Setelah tadi kita membuat projek Simple Face Detection using OpenCV. Sekarang kita akan mencoba membuat projek Simple Eye, Nose and Mouth Detection using OpenCV | Visual Studio. Sebenarnya kodingan masih sama seperti projek tadi, kita tinggal mengganti pembacaan file XML-nya aja dengan memodifikasi sedikit kodingan.
Berikut tahapan-tahapannya :
1. Bagi kamu yang belum install OpenCV, ikutin step by step di postingan install OpenCV dengan Visual Studio disini. Saya sarankan menggunakan OpenCV 2.1.0 karena saya menggunakan yang itu. (Biar sama :p)
2. Setelah selesai meng-install dan setting Project Directories kamu tinggal copy-paste kodingan di bawah :
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
void detect_and_draw(IplImage* img)
{
//inisialisasi
CvHaarClassifierCascade *cascade=0;
CvHaarClassifierCascade *cascade1=0;
CvHaarClassifierCascade *cascade2=0;
CvMemStorage *storage=0;
IplImage* gray = img;
//baca file xml untuk image detection
if(!cascade)
{
//untuk deteksi hidung
char * file = "C:/OpenCV2.1/data/haarcascades/haarcascade_mcs_nose.xml";
//untuk deteksi mata
char * file1 = "C:/OpenCV2.1/data/haarcascades/haarcascade_eye.xml";
//untuk deteksi mulut
char * file2 = "C:/OpenCV2.1/data/haarcascades/haarcascade_mcs_mouth.xml";
cascade = (CvHaarClassifierCascade*) cvLoad(file,0,0,0);
cascade1 = (CvHaarClassifierCascade*) cvLoad(file1,0,0,0);
cascade2 = (CvHaarClassifierCascade*) cvLoad(file2,0,0,0);
storage = cvCreateMemStorage(0);
}
//mendeteksi image hidung
CvSeq* noses =
cvHaarDetectObjects(
gray,
cascade,
storage,
1.1,
3,
CV_HAAR_DO_CANNY_PRUNING,
cvSize(10,10));
//mendeteksi image mata
CvSeq* eyes =
cvHaarDetectObjects(
gray,
cascade1,
storage,
1.1,
3,
CV_HAAR_DO_CANNY_PRUNING,
cvSize(20,20));
//mendeteksi image mulut
CvSeq* mouth =
cvHaarDetectObjects(
gray,
cascade2,
storage,
1.1,
3,
CV_HAAR_DO_CANNY_PRUNING,
cvSize(10,10));
int i;
//menggambar kotak merah pada bagian hidung yang ditemukan
for(i = 0; i < (noses ? noses->total : 0); i++)
{
CvRect* r = (CvRect*) cvGetSeqElem(noses, i);
cvRectangle(
img,
cvPoint(r->x, r->y),
cvPoint(r->x + r->width, r->y + r->height),
CV_RGB(255,0,0),
1, 20, 0
);
}
//menggambar kotak biru laut pada bagian mata yang ditemukan
for(i = 0; i < (eyes ? eyes->total : 0); i++)
{
CvRect* r = (CvRect*) cvGetSeqElem(eyes, i);
cvRectangle(
img,
cvPoint(r->x, r->y),
cvPoint(r->x + r->width, r->y + r->height),
CV_RGB(0,255,255),
1, 20, 0
);
}
//menggambar kotak putih pada bagian mulut yang ditemukan
for(i = 0; i < (mouth ? mouth->total : 0); i++)
{
CvRect* r = (CvRect*) cvGetSeqElem(mouth, i);
cvRectangle(
img,
cvPoint(r->x, r->y),
cvPoint(r->x + r->width, r->y + r->height),
CV_RGB(255,255,255),
1, 20, 0
);
}
//menampilkan gambar hasil deteksi
cvNamedWindow("hasil");
cvShowImage("hasil", img);
cvWaitKey(0);
}
int main(array<System::String ^> ^args)
{
//load image asli
const char* filename = "dank3.jpg";
IplImage* img = cvLoadImage(filename);
//pemanggilan fungsi untuk deteksi wajah
detect_and_draw(img);
}
3. Untuk yang berwarna merah sesuaikan dengan nama file foto yang sudah kalian masukkan di dalam projeknya. Kalau saya file fotonya ada di C:\Users\Ozi Priawadi\Documents\Visual Studio 2012\Projects\FaceDetection\FaceDetection\dank3.jpg. Kalau yang berwarna biru sesuaikan dengan folder instalan OpenCV yang sudah kamu buat.
4. Setelah selesai coba klik RUN projeknya dan hasilnya kira-kira seperti ini