Mengenal OpenCV dan Pengenalan Wajah
OpenCV ialah program open source berbasiskan C++ yang saat ini banyak digunakan sebagai program computer vision, salah satu penerapannya ialah pada robotika. Dengan OpenCV, Anda dapat membuat interaksi antara manusia dan robot (Human Robot Interaction. Misalnya, wajah dari manusia dideteksi oleh camera/webcam, lalu diproses oleh komputer, untuk kemudian diproses oleh robot untuk melakukan aksi tertentu, misalnya mengikuti/mengenal wajah orang tersebut. Kesemuanya itu membutuhkan OpenCV sebagai program utama antara webcam dan pengolahnya yaitu komputer. Silahkan kunjungi situs opencv.org untuk download atau mengetahui berita terbaru tentang software ini. Anda juga diharapkan menginstal Visual C++ 2010 Express Edition sebagai editornya.
Sebagai contoh, buatlah program Win32 console application untuk menampilkan sebuah gambar di Windows, berikut contohnya :
Demo.cpp:
// Demo Program menampilkan gambar imut
#include “stdafx.h”
#include “conio.h”
#include <cv.h>
#include <highgui.h>
int main(int argc, char** argv)
{
IplImage* img =cvLoadImage(argv[1]);
cvNamedWindow (“Contoh_DISPLAY_GAMBAR”,CV_WINDOW_AUTOSIZE);
cvShowImage(“Contoh_DISPLAY_GAMBAR”,img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow(“Contoh_DISPLAY_GAMBAR”);
}
Program di atas akan meload file .jpg yang kita berikan menggukan cvLodImage(), lalu ditampilkan menggunakan cvNamedWindow(). Setelah dikompilasi, eksekusi file .exe yang tercipta atau jalankan dengan perintah:
Demo fira.JPG
Maka akan tampil gambar berikut :
Gambar 1 Wajah cantik yang nongol
Jika Anda ingin mendeteksi webcam dan mengambil image dari webcam tersebut, gunakan demo kode berikut ini, dimana fungsi yang umum digunakan ialah :
pCapture = cvCaptureFromCAM( CV_CAP_ANY );
WebcamCapture.cpp:
// Demo koneksi ke webcam dan simpan frame
#include “stdafx.h”
#include “stdio.h”
#include “string.h”
#include “cv.h”
#include “highgui.h”
int main(int argc, char ** argv)
{
CvCapture * pCapture = 0;
IplImage * pVideoFrame = 0;
int i;
char filename[50];
// Inisialisasi video capture
pCapture = cvCaptureFromCAM( CV_CAP_ANY );
if( !pCapture )
{
fprintf(stderr, “Gagal inisialisasi webcam\n”);
return -1;
}
// Ambil 3 frame video
for(i=0; i<3; i++)
{
pVideoFrame = cvQueryFrame( pCapture );
if( !pVideoFrame )
{
fprintf(stderr, “failed to get a video frame\n”);
}
// tulis ke file
sprintf(filename, “VideoFrame%d.jpg”, i+1);
if( !cvSaveImage(filename, pVideoFrame) )
{
fprintf(stderr, “failed to write image file %s\n”, filename);
}
}
// Terminasi video capture
cvReleaseCapture( &pCapture );
return 0;
}
Pengenalan Wajah
OpenCV ialah open source library computer vision, yang memudahkan pemrograman deteksi wajah, face tracking, face recognition, kalman filtering dn berbagai metode artificial intelligent.
OpenCV menggunakan sebuah tipe face detector yang disebut Haar Cascade classifier. Gambar menunjukkan face detector berhasil bekerja pada sebuah gambar. Jika ada sebuah image (biasa dari file /live video), face detector menguji tiap lokasi image dan mengklasifikasinya sebagai “wajah” atau “bukan wajah”. Klasifikasi dimisalkan sebuah skala fix untuk wajah, misal 50×50 pixel. Jika wajah pada image lebih besar atau lebih kecil dari pixel tersebut, classifier terus menerus jalan beberapa kali, untuk mencari wajah pada gambar tersebut.
Classifier menggunakan data yang disimpan pada file XML untuk memutuskan bagaimana mengklasifikasi tiap lokasi image. OpenCV menggunakan 4 data XML untuk deteksi wajah depan, dan 1 untuk wajah profile. Termasuk juga 3 file XML bukan wajah: 1 untuk deteksi full body, 1 untuk upper body, dan 1 untuk lower body. Anda harus memberitahukan classifier dimana menemukan file data yang akan anda gunakan. Salah satunya bernama haarcascade_frontalface_default.xml. Pada OpenCV, terletak pada :
Program_Files/OpenCV/data/haarcasades/haarcascade_frontalface_default.xml.
Konsep Pendeteksian Wajah
OpenCV face detector menggunakan metode Paul Viola dan Michael Jones. Metode mengkombinasikan :
- Fitur rectangular sederhana yang disebut fitur Haar
- Integral imag untuk deteksi fitur yang cepat
- Metode machine learning AdaBoost.
- Sebuah pengklasifikasi cascade untkmengkombinasikan banyak fitur secara efisien.
Fitur yang digunakan Viola dan Jones menggunakan bentuk gelombang Haar. Bentuk gelombang Haar ialah sebuah gelombang kotak. Pada 2 dimensi, gelombang kotak ialah pasangan persegi yang bersebelahan, 1 terang dan 1 gelap. Haar ditentukan oleh pengurangan pixel rata-rata daerah gelap dari pixel rata-rata daerah terang. Jika perbedeaan diatas threshold (diset selama learning), fitur tersebut dikatakan ada.
Implementasi Deteksi Wajah:
- Variable CvHaarClassifierCascade * pCascade menyimpan data dari file XML. Untuk meload data XML ke pCascade, Anda dapat menggunakan fungsi cvLoad(). cvLoad ialah fungsi umum untuk meload data dari file yang membutuhkan hingga 3 parameter input. JIka anda membuat kode pada C, set parameter sisanya menjadi 0, jika menggunakan C++ hilangkan parameter yang tidak digunakan.
- Sebelum mendeteksi wajah pada images, Anda membutuhkan objek CvMemStorage. Detector akan mendaftar wajah yang terdeteki ke buffer. Yang harus anda kerjakan ialah membuatnya
pStorage=CvCreateMemStorage(0);
dan mereleasenya ketika telah selesai.
cvReleaseMemStorage(&pStorage);
- Anda akan sering meload data dari file, tentu ada kemungkinan salah path, sebaiknya berikan pengecekan untuk memastikan file diload dengan benar.
if(!pInpImg || !pStorage || !pCascade)
{
printf (“Inisialisasi gagal \n”);
}
exit (-1);
}
- Untuk menjalankan detector, panggil objek cvHaarDetect. Fungsi ini membutuhkan 7 parameter, 3 pertama ialah pointer image, XML data dan memory buffer, sisanya diset pada default C++.
pFaceRectSeq =cvHaarDetectObjects
(pInpImg, pCascade, pStorage,
1.1, //tingkatkan skala pencarian dengan 10% tiap passing
3, //drop group yang kurang dari 3 deteksi
CV_HAAR_DO_CANNY_PRUNNING //skip region yang tidak berisi wajah
cvSize(0,)); //gunakan XML default untuk skala pencarian terkecil.
- Untuk membuat display Window gunakan cvNamedWindow seperti berikut:
cvNamedWindow (“Haar Window”, CV_WINDOW_AUTOSIZE);
Untuk memasukkan image ke display, panggil fungsi cvShowImage() dengan nama yang telah dibuat pada window dan nama image yang ingin ditampilkan.
Berikut ini kodel lengkapnya :
DetectFace.cpp:
// Hak Cipta cognotics.com
…
// *********************************************
#define OPENCV_ROOT “C:/Program Files/OpenCV”
// *********************************************
void displayDetections(IplImage * pInpImg, CvSeq * pFaceRectSeq);
int main(int argc, char** argv){
// variables
IplImage * pInpImg = 0;
CvHaarClassifierCascade * pCascade = 0; // face detector
CvMemStorage * pStorage = 0; // memory for detector to use
CvSeq * pFaceRectSeq; // memory-access interface
// pengecekan
if(argc < 2)
{
printf(“Missing name of image file!\n”
“Usage: %s <imagefilename>\n”, argv[0]);
exit(-1);
}
// initializations
pInpImg = (argc > 1) ? cvLoadImage(argv[1], CV_LOAD_IMAGE_COLOR) : 0;
pStorage = cvCreateMemStorage(0);
pCascade = (CvHaarClassifierCascade *)cvLoad
((OPENCV_ROOT”/data/haarcascades/haarcascade_frontalface_default.xml”),
0, 0, 0 );
// validate that everything initialized properly
if( !pInpImg || !pStorage || !pCascade )
{
printf(“Initialization failed: %s\n”,
(!pInpImg)? “can’t load image file” :
(!pCascade)? “can’t load haar-cascade — ”
“make sure path is correct” :
“unable to allocate memory for data storage”, argv[1]);
exit(-1);
}
// detect faces in image
pFaceRectSeq = cvHaarDetectObjects
(pInpImg, pCascade, pStorage,
1.1, // increase search scale by 10% each pass
3, // merge groups of three detections
CV_HAAR_DO_CANNY_PRUNING, // skip regions unlikely to contain a face
cvSize(40,40)); // smallest size face to detect = 40×40
// tampilkn wajah yang terdeteksi
displayDetections(pInpImg, pFaceRectSeq);
// clean up and release resources
cvReleaseImage(&pInpImg);
if(pCascade) cvReleaseHaarClassifierCascade(&pCascade);
if(pStorage) cvReleaseMemStorage(&pStorage);
return 0;
}
void displayDetections(IplImage * pInpImg, CvSeq * pFaceRectSeq)
{
const char * DISPLAY_WINDOW = “Haar Window”;
int i;
// create a window to display detected faces
cvNamedWindow(DISPLAY_WINDOW, CV_WINDOW_AUTOSIZE);
// draw a rectangular outline around each detection
for(i=0;i<(pFaceRectSeq? pFaceRectSeq->total:0); i++ )
{
CvRect* r = (CvRect*)cvGetSeqElem(pFaceRectSeq, i);
CvPoint pt1 = { r->x, r->y };
CvPoint pt2 = { r->x + r->width, r->y + r->height };
cvRectangle(pInpImg, pt1, pt2, CV_RGB(0,255,0), 3, 4, 0);
}
// tampilkan
cvShowImage(DISPLAY_WINDOW, pInpImg);
cvWaitKey(0);
cvDestroyWindow(DISPLAY_WINDOW);
}
Gambar 2 Wajah cantik yang terdeteksi
Ok selamat mencoba, Anda juga dapat request workshop 1 hari full day atau inhouse untuk mencoba OpenCV ini.
Related posts:
- Menampilkan properti dari suatu images Here is a simple program to display image attributes like...
- Pengontrol Alat Berbasis Port Paralel Kit ini merupakan aplikasi port parallel sebagai pengontrol alat menggunakan...
Related posts brought to you by Yet Another Related Posts Plugin.



