BAB III
PERANCANGAN ALAT
Tugas akhir ini adalah penelitian aplikatif dalam bentuk eksperimen.
Langkah awal yang diperlukan adalah membuat sebuah aplikasi yang dapat
membedakan objek (wajah) sesuai dengan objek referensi. Bab ini akan
menguraikan jenis dan cara mendapatkan data, variabel serta cara analisis data
dan kerangka penelitian.
3.1. Alat dan Bahan
3.1.1. Hardware
1)
Personal Computer (PC) / Laptop
Berfungsi sebagai tempat untuk menyimpan basis data dan
beberapa program pendukung. Pada tugas akhir ini digunakan
laptop dengan spesifikasi harddisk 320GB, memory 3GB ,
Software Operation Windows 8.
2) Kamera
Pada sistem ini, kamera yang digunakan adalah kamera web, atau
yang sering disebut webcam. Untuk pemilihan kamera, sebaiknya
kita memilih webcam yang memiliki kecepatan serta resolusi yang
bagus dan juga harus memiliki kemampuan yang baik dalam
adaptasi terhadap cahaya di sekelilingnya. Kamera web yang
dipakai pada tugas akhir ini memiliki resolusi 2 Mega piksel.
15
3.1.2. Software
1) Microsoft Visual Studio C# adalah software yang dibuat untuk
mendesain serta membuat kode (coding) pada tugas akhir ini.
2) EmguCV, berperan untuk menjembatani C# dan OpenCV.
EmguCV adalah wrapper .Net untuk OpenCV. Dengan EmguCV,
fungsi-fungsi dalam OpenCV bisa dipanggil melalui bahasa
pemrograman yang compatible dengan .NET seperti C#, VB, dan
VC++.
16
3.2. Blok Diagram Aplikasi
Flowchart dan penjelasan programnya adalah sebagai berikut :
Gambar 2. 4 Flowchart Program.
3.2.1. Penjelasan Blok Diagram
- Start, program dijalankan.- Observasi gambar pada kamera.
- Object segmentation, kamera memeriksa setiap frame image yang masuk untuk
17
- Kamera memeriksa apakah pada frame terdeteksi wajah. Bila tidak terdeteksi, program kembali ke awal. Dan apabila pada kamera terdeteksi wajah, program dilanjutkan ke tahap berikutnya.
- Kemudian program akan meng-capture wajah yang terdeteksi dengan membuat
frame pada wajah yang terdeteksi dan mencari kesamaan wajah pada data
referensi wajah.
- Apakah wajah yang terdeteksi ada pada data referensi. Apabila tidak ada, maka dapat ditambahkan untuk disimpan sebagai data referensi wajah baru. Namun apabila wajah yang terdeteksi ada pada data referensi, maka akan ditampilkan sesuai frame wajah yang terdeteksi.
- Program kembali ke awal.
3.3. Perencanaan Software
Perencanaan software pada aplikasi ini meliputi :
1. Penyusunan Program Interfacing pada Kamera
2. Penyusunan Program Pendeteksi Wajah
3. Penyusunan Program Pencocokan Wajah
3.3.1. Program Interfacing pada Kamera
Langkah pertama dari program pada PC adalah mengaktifkan
kamera, tujuannya agar PC mendapatkan gambar dari kamera
tersebut dan ditampilkan pada layar. Berikut ini adalah listing
program untuk mengaktifkan kamera :
using System;
18
using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Emgu.CV; using Emgu.CV.Structure; using Emgu.Util; namespace CameraCapture { public partial class CameraCapture : Form { //declaring global variables private Capture capture; //takes images from camera as image frames private bool captureInProgress; public CameraCapture() { InitializeComponent(); } private void ProcessFrame(object sender, EventArgs arg) { Image<Bgr, Byte> ImageFrame = capture.QueryFrame();19
CamImageBox.Image = ImageFrame; } private void btnStart_Click(object sender, EventArgs e) { #region if capture is not created, create it now if (capture == null) { try { capture = new Capture(); } catch (NullReferenceException excpt) { MessageBox.Show(excpt.Message); } } #endregion if (capture != null) { if (captureInProgress) { btnStart.Text = "Start!"; Application.Idle ‐= ProcessFrame; } else20
{ btnStart.Text = "Stop"; Application.Idle += ProcessFrame; } captureInProgress = !captureInProgress; } } private void ReleaseData() { if (capture != null) capture.Dispose(); } } }21
3.3.2. Penyusunan Program Pendeteksi Wajah
Sebelum proses pengolahan wajah, pertama dilakukan pembuatan
program untuk mendeteksi area wajah.
//Get the current frame form capture device currentFrame = grabber.QueryFrame().Resize(453, 284, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); //Convert it to Grayscale gray = currentFrame.Convert<Gray, Byte>(); //Face Detector MCvAvgComp[][] facesDetected = gray.DetectHaarCascade( face, 1.1, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20)); //Action for each element detected foreach (MCvAvgComp f in facesDetected[0]) { t = t + 1; result = currentFrame.Copy(f.rect).Convert<Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); //draw the face detected in the 0th (gray) channel with blue color currentFrame.Draw(f.rect, new Bgr(Color.Red), 2); if (trainingImages.ToArray().Length != 0) { //TermCriteria for FACE RECOGNITION with numbers of trained images like maxIteration MCvTermCriteria termCrit = new MCvTermCriteria(ContTrain, 0.001); //Eigen face recognizer
EigenObjectRecognizer recognizer = new
EigenObjectRecognizer( trainingImages.ToArray(), labels.ToArray(),
3000,
22
3.3.3. Penyusunan Program Pencocokan Wajah
Pertama, pendeklarasian variable-variable yang dibutuhkan.
Image<bgr,> currentFrame; Capture grabber; HaarCascade face; HaarCascade eye; MCvFont font = new MCvFont(FONT.CV_FONT_HERSHEY_TRIPLEX, 0.5d, 0.5d); Image<gray,> result, TrainedFace = null; Image<gray,> gray = null; List<image<gray,>> trainingImages = new List<image<gray,>>(); List<string> labels= new List<string>(); List<string> NamePersons = new List<string>(); int ContTrain, NumLabels, t; string name, names = null;
Setelah didapat input frame dari kamera, langkah selanjutnya adalah
memeriksa setiap gabungan dari piksel untuk mencari objek wajah yang ada.
Proses deteksi wajah tersebut menggunakan metode viola-jones, yaitu dengan cara
mencocokkan setiap fitur pada frame dengan contoh wajah yang ada pada sebuah
file database berekstensi *.xml. File tersebut berisi ribuan sampel positif dari
wajah.
InitializeComponent();
//Load haarcascades for face detection
face = new HaarCascade("haarcascade_frontalface_default.xml"); //eye = new HaarCascade("haarcascade_eye.xml");
23
try { //Load of previus trainned faces and labels for each image string Labelsinfo = File.ReadAllText(Application.StartupPath + "/TrainedFaces/TrainedLabels.txt"); string[] Labels = Labelsinfo.Split('%'); NumLabels = Convert.ToInt16(Labels[0]); ContTrain = NumLabels; string LoadFaces;Setelah proses load database, setiap frame yang didapat dari kamera tadi
dikirimkan ke fungsi yang bertugas untuk menandai objek wajah yang ada.
for (int tf = 1; tf < NumLabels+1; tf++) { LoadFaces = "face" + tf + ".bmp"; trainingImages.Add(new Image<Gray, byte>(Application.StartupPath + "/TrainedFaces/" + LoadFaces)); labels.Add(Labels[tf]); }
Inisialisasi capture perangkat dan FrameGrabber melakukan deteksi pada
masing-masing frame yang ter-capture.
private void button1_Click(object sender, EventArgs e) {
24
//Initialize the capture device grabber = new Capture(); grabber.QueryFrame(); //Initialize the FrameGraber event Application.Idle += new EventHandler(FrameGrabber); button1.Enabled = false; }Selanjutnya operasi DetectHaarCascade dan EigenObjectRecognizer dijalankan
pada masing-masing wajah yang dideteksi di dalam satu frame.
MCvAvgComp[][] facesDetected = gray.DetectHaarCascade( face, 1.2, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20)); //Perform untuk masing‐masing element yang terdeteksi foreach (MCvAvgComp f in facesDetected[0]) { t = t + 1; result = currentFrame.Copy(f.rect).Convert<gray,>().Resi ze(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);