Deteksi dan Tracking Obyek Buatan XML Berbasiskan OpenCV

By : Mr. Widodo Budiharto
Metode pendeteksian wajah bermacam-macam. Salah satunya menggunakan metode
yang dibangun oleh OpenCV yaitu cvHAAR. cvHaar adalah teknik modern yang
memverifikasi roman wajah dimana menggunakan peniadaan latar belakang (
background subtraction ). Sejak metode ini lebih cepat dan akurat dibandingkan
metode Lienhart dan lainnya, metode ini yang dipakai dalam implementasi sistem
aktual. Kecepatan pendeteksian kurang dari 500ms. Kita
dapat mendeteksi berbagai macam obyek dengan membuat file XML sendiri, sebagai
berikut :
HaarTraining
File xml dibuat dengan suatu training yang dikenal dengan
Haar Training. Proses training secara garis besar dapat dilihat dengan
melalui bagan pada gambar
di bawah. Folder
aplikasi berada secara default di Program Files/OpenCV/bin/

Gambar Bagan Haar Training
Dapat dijelaskan sebagai berikut :
a.
Persiapan DataSet
Dataset terdiri dari 2 buah sample. Sample positif adalah
gambar yang mengandung obyek yang akan dideteksi. Jika kita menginginkan wajah
untuk dideteksi maka sample positif berisi gambar – gambar wajah. Sample
negatif adalah gambar yang tidak mengandung obyek yang akan dideteksi. Seperti
gambar pegunungan, mobil dsb. Masukkan sample positif pada 1 direktori,
misalnya positiveSample/rawdata.
Sedangkan sample negatif, dimasukkan pada /negativeSample. Sample paling
minimal 10 buah untuk 1 wajah dalam berbagai pose. Catatan: file gambar harus file *.bmp.
b.
Membuat infofile.txt untuk Sample Negative
Gunakan create_list.bat pada folder /negativeSample untuk mencatatkan
nama file sample negative pada infofile.txt.
c. Membuat info.txt untuk Sample Positive
Kemudian jalankan program objectmarker.exe pada folder positiveSample. Ketika program
ini dijalankan, maka akan muncul satu per satu file dari sample positiveSample. Kemudian tandai
obyek yang dimaksud dari gambar tersebut dengan menggerakkan kursor mouse
membentuk sebuah box persegi panjang. Kemudian tekan spasi untuk menambahkan
box tersebut, lalu tekan enter untuk beralih pada file gambar berikutnya. Kalau
berhasil, maka info.txt akan berisi data
gambar
d. Membuat file vector.vec dari Sample
Positive
Lalu
kita gunakan tool createsamples.exe untuk mengubah obyek gambar ke file vec. Jalankan perintah berikut pada dos
command.
createsamples.exe
-info positive/info.txt -vec data/vector.vec -num 18 -w 20 -h 20
Keterangan parameter tersebut dapat dilihat pada gambar .

Gambar Keterangan
Parameter dari Createsamples.exe
Maka bila hal ini telah berhasil dijalankan maka akan
muncul pada folder /data, file
vector.vec
e. Memulai HaarTraining
Setelah kita punya
file vector.vec maka kita mulai haartraining.
Jalankan program haartraining.exe di dos command:
haartraining.exe -data data/cascade -vec data/vector.vec
-bg negativeSample/infofile.txt -npos 12 -nneg 2 -mem 1000 -mode ALL -w 20 -h 20 –nonsym
Keterangan parameter tersebut dapat dilihat pada gambar di bawah.

Keterangan Parameter dari haartraining.exe
lalu pada folder tools/temp/data/cascade maka akan muncul
folder mulai dari 0 sampai N.
Kemudian copy semua folder tersebut pada tools/cascade2xml/data.
f. Membuat file *.xml
Jalankan
haarconv.exe pada folder /cascade2xml di dos command sebagai berikut:
haarconv.exe data output.xml 20 20
Jika
berhasil, maka akan muncul file output.xml pada folder /cascade2xml.
Buatlah
aplikasi demo tersebut menggunakan webcam berbasis Visual C++ .Net 2005.
// Demo Tracking
Obyek
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include "capture.h"
#include "capture.c"
#include "facedet.h"
#include "facedet.c"
#include "camshift_wrapper.h"
#include "camshift_wrapper.c"
const char * DISPLAY_WINDOW = "DisplayWindow";
#define
OPENCV_ROOT "C:/Program
Files/OpenCV"
//// Global
variables
IplImage * pVideoFrameCopy = 0;
//// Function
definitions
int initAll();
void
exitProgram(int code);
void
captureVideoFrame();
// main()
//
void main( int argc, char** argv
)
{
CvRect * pFaceRect = 0;
if( !initAll() )
exitProgram(-1);
// Capture and display video frames
until a face
// is detected
while( 1 )
{
// mencari wajah pada next
frame
captureVideoFrame();
pFaceRect = detectFace(pVideoFrameCopy);
// Tampilkan image
cvShowImage( DISPLAY_WINDOW, pVideoFrameCopy );
if( (char)27==cvWaitKey(1) ) exitProgram(0);
// exit loop when a face is
detected
if(pFaceRect) break;
}
// initialize tracking
startTracking(pVideoFrameCopy, pFaceRect);
// Track the detected face using
CamShift
while( 1 )
{
CvBox2D faceBox;
CvPoint facePoint;
// ambil next frame video
captureVideoFrame();
// track wajah pada video frame
faceBox = track(pVideoFrameCopy);
// Bentuk elips
cvEllipseBox(pVideoFrameCopy, faceBox,
CV_RGB(50,255,0), 2, CV_AA,
0 );
cvShowImage( DISPLAY_WINDOW, pVideoFrameCopy );
if( (char)27==cvWaitKey(1) ) break;
}
exitProgram(0);
}
int initAll()
{
if( !initCapture() ) return 0;
if( !initFaceDet(OPENCV_ROOT
"/data/haarcascades/output.xml"))
return 0;
//
Buat jendela display
cvNamedWindow( DISPLAY_WINDOW, 1 );
// Initialize tracker
captureVideoFrame();
if( !createTracker(pVideoFrameCopy)
) return 0;
// Set Camshift parameters
setVmin(60);
setSmin(50);
return 1;
}
void
exitProgram(int code)
{
// Release resources allocated in
this file
cvDestroyWindow( DISPLAY_WINDOW );
cvReleaseImage( &pVideoFrameCopy );
// Release resources allocated in
other project files
closeCapture();
closeFaceDet();
releaseTracker();
exit(code);
}
void
captureVideoFrame()
{
printf ("Data : %d\n");
// Capture the next frame
IplImage * pVideoFrame =
nextVideoFrame();
if( !pVideoFrame )
exitProgram(-1);
// Copy it to the display image,
inverting it if needed
if( !pVideoFrameCopy )
pVideoFrameCopy = cvCreateImage( cvGetSize(pVideoFrame),
8, 3 );
cvCopy( pVideoFrame, pVideoFrameCopy, 0 );
pVideoFrameCopy->origin = pVideoFrame->origin;
if( 1 ==
pVideoFrameCopy->origin ) // 1 means the image is
inverted
{
cvFlip( pVideoFrameCopy, 0, 0 );
pVideoFrameCopy->origin = 0;
}
}

Hasil program menggunakan file XML yang berhasil dibuat
Info lebih lanjut hubungi widodo@widodo.om HP: 081410043883.
Referensi : www.sourceforge.net/projects/OpenCV