Silahkan Melihat Tutorial di website kami dengan nyaman ENJOY YOUR LIFE ☕

OPEN CV :: Penerapan Deteksi Wajah OpenCV


OpenCV

OpenCV ialah open source library computer vision, yg memudahkan pemrograman  deteksi wajah,face trackingface recognition, kalman filtering & berbagai metode artificial intelligent.

OpenCV (Open Source Computer Vision Library)adalah sebuah pustaka perangkat lunak yg ditujukan unt pengolahan citra dinamis scr real-time, yg dibuat oleh Intel, & sekarang didukung oleh Willow Garage & Itseez. Program ini bebas & berada dlm naungan sumber terbuka dari lisensi BSD. Pustaka ini merupakan pustaka lintas platform. Program ini didedikasikan sebagaian besar unt pengolahan citra scr real-time. Jika pustaka ini menemukan pustakaIntegrated Performance Primitives dari intel dlm sistem komputer, maka program ini akan menggunakan rutin ini unt mempercepat proses kerja program ini scr otomatis.

Penerapan Deteksi Wajah OpenCV
Penerapan Deteksi Wajah OpenCV

OpenCV pertama kali diluncurkan scr resmi pada tahun 1999 oleh Inter Research sbg lanjutan dari bagian proyek bertajuk aplikasi intensif berbasis CPU,real-time ray tracing & tembok penampil 3D. Para kontributor utama dlm proyek ini termasuk mereka yg berkecimpung dlm bidang optimasi di Intel Russia, & juga Tim Pusataka Performansi Intel.

Pada awalnya, tujuan utama dari proyek OpenCV ini dideskripsikan sbg berikut,

  1. Penelitian penginderaan citra lanjutan tdk hanya melalui kode program terbuka, tetapi juga kode yg telah teroptimasi unt infrastruktur penginderaan citra.
  2. Menyebarluarkan ilmu penginderaan citra dengan menyediakan infrastruktur bersama di mana para pengembang dapat menggunakannya scr bersama-sama, sehingga kode akan tampak lebih mudah dibaca & ditransfer.
  3. Membuat aplikasi komersial berbasiskan penginderaan citra, di mana kode yg telah teroptimasi tersedia scr bebas dengan lisensi yg tersedia scr bebas yg tdk mensyaratkan program itu harus terbuka atau gratis.

Fitur Utama OpenCV

  • Mengoptimalkan image processing secara realtime
  • Antarmuka utamaOpenCVadalah di C ++
  • Ada juga C, Python dan Java
  • AplikasiOpenCVberjalan pada Windows, Android, Linux, Mac dan iOS
  • Dioptimalkan untuk prosesor Intel

Modul OpenCV

OpenCV memiliki struktur modular. Modul utama dari OpenCV tercantum di bawah ini. Saya telah menyediakan beberapa link yang menunjuk ke beberapa pelajaran contoh di bawah setiap modul

Core

Ini adalah modul dasar OpenCV. Ini mencakup struktur data dasar (misalnya-struktur data Mat) dan fungsi pengolahan gambar dasar. Modul ini juga banyak digunakan oleh modul lain seperti highgui, dll

HighGui

Modul ini menyediakan kemampuan pengguna yang sederhana antarmuka, beberapa gambar dan video codec, gambar dan video yang menangkap kemampuan, memanipulasi jendela gambar, penanganan track bar dan mouse acara dan lain-lain Jika Anda ingin kemampuan UI lebih maju, Anda harus menggunakan kerangka UI seperti QtWinForms, dll

ImgProc

Modul ini mencakup algoritma pengolahan gambar dasar termasuk gambar filtering, transformasi gambar, konversi ruang warna dan lain-lain

Video

Ini adalah modul analisis video yang mencakup algoritma pelacakan objek, algoritma pengurangan latar belakang dan lain-lain

ObjDetect

Ini termasuk deteksi dan pengenalan obyek algoritma untuk objek standar.

OpenCV kin banyak digunakan untuk mengembangkan pengolahan citra dan visi komputer canggih aplikasi. Ini telah menjadi alat bagi siswa, insinyur dan peneliti di setiap sudut dan sudut dunia.

Konsep Pendeteksian Wajah

OpenCV face detector menggunakan metodePaul Viola & Michael Jones,

Metode mengkombinasikan :

  • Fitur  rectangular sederhana yg disebut fitur Haar
  • Integral imag unt deteksi fitur yg cepat
  • Metode machine learning AdaBoost.
  • Sebuah pengklasifikasi cascade untkmengkombinasikan banyak fitur scr efisien.

Fitur yg digunakan Viola & Jones menggunakan bentuk gelombang Haar. Bentuk gelombang Haar ialah sebuah gelombang kotak.  Pada 2 dimensi, gelombang kotak ialah pasangan persegi yg bersebelahan, 1 terang & 1 gelap. Haar ditentukan oleh pengurangan pixel rata-rata daerah gelap dari pixel rata-rata daerah terang.  Jika perbedeaan diatasthreshold (diset selama learning), fitur tersebut dikatakan ada.

Contoh Program OpenCV

OpenCV menggunakan sebuah tipe face detector yg dsebut Haar Cascade classifier.  Gambar menunjukkan face detector berhasil bekerja pada sebuah gambar.  Jika ada sebuah image (bias dari file /live video), face detector menguji tiap lokasi image & mengklasifikasinya sbg “wajah” atau “bukan wajah”. Klasifikasi dimisalkan sebuah skala fix unt wajah, misal 50x50 pixel.  Jika wajah pada image lebih besar atau lebih kecil dari pixel tersebut, classifier terus menerus jalan beberapa kali, unt mencari wajah  pada gambar tersebut.


Penerapan Deteksi Wajah OpenCV

Classifier menggunakan data yg disimpan pada fileXML unt memutuskan bagaimana mengklasifikasi tiap lokasi image.  OpenCV menggunakan 4 data XML unt deteksi wajah depan, & 1 unt wajah profile.  Termasuk juga 3 file XML bukan wajah: 1 unt deteksi full body, 1 unt upper body, & 1 unt lower body.  Anda harus memberitahukan classifier dimana menemukan file data yg akan anda gunakan. Salah satunya bernama haarcascade_frontalface_default.xml. Pada OpenCV, terletak pada :
Program_Files/OpenCV/data/haarcasades/haarcascade_frontalfa

Implementasi Deteksi Wajah:

1.        Variable CvHaarClassifierCascade *pCascade menyimpan data dari file XML.  Untuk meload data XML ke pCascade, Anda dapat menggunakan fungsi cvLoad().  cvLoad ialah fungsi umum unt meload data dari file yg membutuhkan hingga 3 parameter input. JIka anda membuat kode pada C, set parameter sisanya menjadi 0, jika menggunakan C++ hilangkan parameter yg tdk digunakan.

2.        Sebelum mendeteksi wajah pada images, Anda membutuhkan objek  CvMemStorage.  Detector akan mendaftar wajah yg terdeteki ke buffer. Yang harus anda kerjakan ialah membuatnya

 Source Code C++


  1. pStorage=CvCreateMemStorage(0);




dan mereleasenya ketika telah selesai.

 Source Code C++


  1. cvReleaseMemStorage(&pStorage);



3.        Anda akan sering meload data dari file, tentu ada kemungkinan salah path, sebaiknya berikan pengecekan unt memastikan file diload dengan benar.

 Source Code C++


  1. if(!pInpImg || !pStorage || !pCascade)

  2. {

  3. printf (“Inisialisasi gagal \n”);

  4. }

  5. exit (-1);

  6. }



4.        Untuk menjalankan detector, panggil objekcvHaarDetect.  Fungsi ini membutuhkan 7  parameter, 3 pertama ialah pointer image,  XML data & memory buffer, sisanya diset pada default C++.

 Source Code C++


  1. pFaceRectSeq =cvHaarDetectObjects

  2. (pInpImg, pCascade, pStorage,

  3. 1.1, //tingkatkan skala pencarian dengan 10% tiap passing

  4. 3, //drop group yg kurang dari 3 deteksi

  5. CV_HAAR_DO_CANNY_PRUNNING //skip region yg tdk berisi wajah

  6. cvSize(0,)); //gunakan XML default unt skala pencarian terkecil.



5.    Untuk membuat display Window gunakancvNamedWindow seperti berikut:

 Source Code C++


  1. cvNamedWindow (“Haar Window”, CV_WINDOW_AUTOSIZE);



Untuk memasukkan image ke display, panggil fungsicvShowImage() dengan nama yg telah dibuat pada window & nama image yg ingin ditampilkan.

Source Code Open CV C++

Berikut ini kode lengkap untuk Penerapan Deteksi Wajah OpenCV :

 Source Code C++


  1. DetectFace.cpp:

  2. // Capturing.cpp : Mendefinisikan entry point unt aplikasi konsol.

  3.  

  4. static CvMemStorage* storage = 0;

  5. static CvHaarClassifierCascade* cascade = 0;

  6.  

  7. void detect_and_draw( IplImage* image );

  8.  

  9. const char* cascade_name =

  10. "C:/Program Files/OpenCV/data/haarcascades/haarcascade_frontalface_alt.xml";

  11. /*"haarcascade_profileface.xml";*/

  12.  

  13. int main(int argc, char** argv)

  14. {

  15. CvCapture* capture = 0;

  16. IplImage *frame, *frame_copy = 0;

  17. argc = 1;

  18. argv = 0;

  19. int optlen = strlen("--cascade=");

  20. const char* input_name;

  21. input_name = 0;

  22.  

  23. if( argc > 1 && strncmp( argv[1], "--cascade=", optlen ) == 0 )

  24. {

  25. cascade_name = argv[1] + optlen;

  26. input_name = argc > 2 ? argv[2] : 0;

  27. }

  28. else

  29. {

  30. fprintf( stderr,

  31. "Usage: facedetect --cascade=\"\" [filename|camera_index]\n" );

  32. //return -1;

  33. /*input_name = argc > 1 ? argv[1] : 0;*/

  34. }

  35.  

  36. cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );

  37. if( !cascade )

  38. {

  39. fprintf( stderr, "ERROR: Tidak dapat memuat classifier cascade\n" );

  40. //return -1;

  41. }

  42.  

  43. storage = cvCreateMemStorage(0);

  44.  

  45. if( !input_name || (isdigit(input_name[0]) && input_name[1] == '\0') )

  46. capture = cvCaptureFromCAM( !input_name ? 0 : input_name[0] - '0' );

  47. else

  48. capture = cvCaptureFromAVI( input_name );

  49.  

  50. cvNamedWindow( "Face Detection", 1 );

  51.  

  52. if( capture )

  53. {

  54. for(;;)

  55. {

  56. if( !cvGrabFrame( capture ))

  57. break;

  58. frame = cvRetrieveFrame( capture );

  59. if( !frame )

  60. break;

  61. if( !frame_copy )

  62. frame_copy = cvCreateImage( cvSize(frame->width,frame->height),

  63. IPL_DEPTH_8U, 3 );

  64. if( frame->origin == IPL_ORIGIN_TL )

  65. cvCopy( frame, frame_copy, 0 );

  66. else

  67. cvFlip( frame, frame_copy, 0 );


  68. detect_and_draw( frame_copy );

  69.  

  70. if( cvWaitKey( 10 ) >= 0 )

  71. break;

  72. }

  73.  

  74. cvReleaseImage( &frame_copy );

  75. cvReleaseCapture( &capture );

  76. }

  77. else

  78. {

  79. const char* filename = "lena.jpg";

  80. IplImage* image = cvLoadImage( filename, 1 );

  81.  

  82. if( image )

  83. {

  84. detect_and_draw( image );

  85. cvWaitKey(0);

  86. cvReleaseImage( &image );

  87. }

  88. else

  89. {

  90. /* menganggap itu adalah file teks yg berisi

  91.                daftar nama file gambar yg akan diproses - satu per baris */

  92. FILE* f = fopen( filename, "rt" );

  93. if( f )

  94. {

  95. char buf[1000+1];

  96. while( fgets( buf, 1000, f ) )

  97. {

  98. int len = (int)strlen(buf);

  99. while( len > 0 && isspace(buf[len-1]) )

  100. len--;

  101. buf[len] = '\0';

  102. image = cvLoadImage( buf, 1 );

  103. if( image )

  104. {

  105. detect_and_draw( image );

  106. cvWaitKey(0);

  107. cvReleaseImage( &image );

  108. }

  109. }

  110. fclose(f);

  111. }

  112. }

  113. }

  114.  

  115. cvDestroyWindow("Face Detection");

  116.  

  117. return 0;

  118. }

  119.  

  120. void detect_and_draw( IplImage* img )

  121. {

  122. int scale = 1;

  123. IplImage* temp = cvCreateImage( cvSize(img->width/scale,img->height/scale), 8, 3 );

  124. CvPoint pt1, pt2;

  125. int i;

  126.  

  127. //cvPyrDown( img, temp, CV_GAUSSIAN_5x5 );

  128. cvClearMemStorage( storage );

  129.  

  130. if( cascade )

  131. {

  132.  

  133. CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,

  134. 1.2, 2, CV_HAAR_DO_CANNY_PRUNING,

  135. cvSize(40, 40) );

  136. for( i = 0; i < (faces ? faces->total : 0); i++ )

  137. {

  138. CvRect* r = (CvRect*)cvGetSeqElem( faces, i );

  139. pt1.x = r->x*scale;

  140. pt2.x = (r->x+r->width)*scale;

  141. pt1.y = r->y*scale;

  142. pt2.y = (r->y+r->height)*scale;

  143. cvRectangle( img, pt1, pt2, CV_RGB(0,255,0), 3, 8, 0 );

  144.  

  145. IplImage * faceSave = cvCreateImage(cvGetSize(img),img->depth,img->nChannels);

  146. IplImage * faceToSave = 0;

  147. if( !faceToSave )

  148. faceToSave = cvCreateImage( cvGetSize(pImg), 8, 3 );

  149. cvCopy(pImg, faceToSave, 0);

  150. faceToSave->origin = pImg->origin;

  151. int pointX = 0;

  152. int pointY = 0;

  153. int lebar = 0;

  154. if (r->width > r->height)

  155. {

  156. lebar = r->width;

  157. pointX = r->x - ((r->width - r->height)/2);

  158. pointY = r->y - ((r->width - r->height)/3);

  159. } else if (r->width < r->height)

  160. {

  161. lebar = r->height;

  162. pointX = r->x - ((r->height - r->width)/2);

  163. pointY = r->y - ((r->height - r->width)/3);

  164. }

  165. cvSetImageROI(img, cvRect(pointX,pointY,lebar,lebar));


  166. faceSave = img;

  167. cvNamedWindow("Result", 1 );

  168. cvShowImage("Result", img);

  169. cvResetImageROI(img);*/

  170.  

  171. }

  172. }

  173.  

  174. cvShowImage( "Face Detection", img );

  175. cvReleaseImage( &temp );

  176. }

  177.  

  178. #ifdef _EiC

  179. main(1,"facedetect.c");

  180. #endifx

  181.  




Contoh program dan tutorial untuk Penerapan Deteksi Wajah menggunakan algoritma dan metode lainnya bisa anda baca pada artikel tentang PenerapanDeteksi Wajah di website kami. Kamu dapat mencari topik mengenai Penerapan Deteksi Wajah melalui form pencarian di kanan atas :)




0 komentar:

Post a Comment

OPEN CV :: Penerapan Deteksi Wajah OpenCV