Anda di halaman 1dari 4
BKPM Pengolahan Citra ~ RMD 7% Acara 4 Acara Praktikum Deteksi Wajah Menggunakan Kamera ‘Tempat Laboratorium Komputer Alokasi waktu 2.x 100 menit A. Capaian Pembelajaran Mata Kuliah (PMR) Indikator : + Mahasiswa memahami algortima deteksi wajah menggunakan kamera + Mahasiswa dapat membuat program deteksi wajah dengan algoritma Haar Cascade menggunakan kamera B. Alat dan Bahan * BKPM © Komputer Webcam ATK (Alat Tulis Kantor) Literatur atau pustaka yang mendukung pokok bahasan prakti File master (Microsoft Visual Studio, OpenCV) HardDisk 1 Terra DYD RW C. Prosedure Kerja 1. Buka Visual Studio 2. Buat project baru Visual C++, dengan menggunakan Console. 3. Masukkan library openCV. 4. Melalui windows Explorer, buka folder C:\\OpenC V2. l\data\haarcascade 5. Pada folder tersebut, copy file “haarcascade_frontalface_alt.xnl”, ke dalam folder program yang dibuat, 6. Siapkan webcam 7. Tulis program dibawah ini include “cv.h" include “highgui.h” include include include finclude include include include include include wifder ic ‘define WIN32 endif BKPM Pengolahan Citra ~ RMD 7 static CvMemStoraget storage = 0; static CvHaarClassifierCascade* cascade = @; int use_nested_cascade = 0; void detect_and_draw( IplInage* image ); const char* cascade_name = “hearcascade_frontalface_alt.xml’ double scale = 1; int main() { cvcapture* capture = 0; IplImage *frame, *frame_copy = @; Iplimage *image = @; const chart scale_opt = “--scale: nt scale_opt_len = (int)strlen(scale_opt); const char® cascade_opt = "--cascadi int cascade_opt_len = (int)strlen(cascade_opt); int 45 const char* input_nane = 0; cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, @ ); if( Icascade ) { fprintf(stderr, “ERROR: Could not load classifier cascade\n" ); fprintf( stderr, ‘Usage: facedetect [--cascade=\"\"]\n" [--scale[=\n" [filenone| camera_index]\n" )3 return -1; storage = cvCreateMenStorage(@); capture = cvCaptureF romcaM(2) if( capture ) For(s5) if( levGrabérane( capture )) breaks Frame = cvRatrieveFrane( capture )3 if( IFrame ) break; if( Iframe_copy ) Frame_copy = cvCreatelmage( cvsize (Frame->width, frane->height), IPL_DEPTH_8U, “frame-snChannels ); if( frana-donigin == IPL_ORIGIN_TL ) evCopy( frame, frame_copy, @ ); else = @ ) goto _cleanup_| BKPM Pengolahan Citra ~ RMD 8 cvliaitKey(0) ; _cleanup_i evReleaseImage( &frame_copy ); cyReleaseCapture( acapture ); if( image ) 4 detect_and_draw( image ); culiaitkey (8); evReleaselnage( &image )3 ? alse if( input_nane ) t /* assume it is a text File containing the List of the image filenames to be processed one per line */ FILE? f = fopen( input_name, “rt* ); af F) { char buf{1090+1]; while( fgets( but, 1000, f ) ) t int len = (int)strlen(buF), ¢5 while( len > © 88 isspace(buf[len-1])) den--5 buf[1en] = "\e"3 image = cvLoadimage( buf, 1); fC image ) { detect_and_draw( image ); c= culaithey(@); if( c= 27 [Lc m4 IP e == "0" ) break; evReleaselnage( &image ); } } Felose(#); t cwDestroyiindow ("result") ; return 0; ) void detect_and_draw( Iplimage* img ) { IplImage *gray, *smal1_ing; int a, 45, gray = cvCreatetnage( cvsize(ing->width, img->height), 8, 1); small_img = cvCreateImage( cvSize( cvRound (img->width/scale), evRound (dng->height/scale)), 8, 1); evCvtcolor( img, gray, CV_BGR2GRAY ); BKPM Pengolahan Citra ~ RMD 78 cvResize( gray, smal_img, CV_INTER_LINEAR ); cvEqualizeHist( snal1_ing, smal1_img ); evClearkemstorage( storage ); Cvseqt faces = cvHaarbetectobjects( small_ing, cascade, storage, 1.4, 2, @ |Cv_HAAR_FIND_BIGGEST_OBJECT //\@V_HAAR_00_ROUGH_SEARCH 7/ |CV_RAAR_DO_CANNY_PRUNING 71 \CV_HAAR_SCALE_IMAGE » evSize(30, 30) ); for( i = 0; i < (faces ? faces-stotal : 0); i+ ) { CuRect* r= (CyRect*)cvGetSeqElen( faces, 1); cvRectangle( ing, cvPoint( r->x, r->y ), cvPoint( r->x + r-raidth,r->y + r-height ), CV_RGR(@,255,@),2,8,0); Cumatsmal1_img_rois CvSeqt nested objects; CyPoint center, kaos; int radius; center.x = cvRound((r->x + r->width*®.5)*scale) 5 center.y = cvRound((r->y + r->height*a.5)*scale) ; radius = cvRound((r->uidth + e->height)*0.25*scale); cvCircleCing, cvPoint (center.x,center.y) , 2, evSealar(8,255,0), 1); ) cvShowImage( “result”, ing ); cyReleaselmage( agray )3 cvReleaseInage( &small_ing ); E. TUGAS 1. Buatlah program untuk mengukur lebar dan tinggi wajah yang terdeteksi serta tentukan koordinat tengahnya! 2. Kemudian buatlah program untuk mendeteksi berapa jarak antara wajah dengan kamera

Anda mungkin juga menyukai