Tracking / Pengenalan / Deteksi Mata
Pengenalan Deteksi Mata : Tracking objek bisa dipahami sebagai sebuah contoh kasus yang cukup istimewa dari sekian banyak permasalahan umum yang dipelajari dalam bidang computer vision. Perkembangan tingginya kemampuan dari suatu komputer saat ini dan meningkatnya kebutuhan akan analisa video dilakukan secara otomatis yang telah banyak sekali menghasilkan sesuatu yang hebat dan menarik dalam algoritma tracking objek.Penggunaan tracking objek ini merupakan sebuah permasalahan yang penting bagi sejumlah aplikasi yang mungkin bisa menguntungkan dalam penerapannya, seperti traffic monitoring, automated surveillance, sistem navigasi suatu kendaraan, terutama dalam bidang robotikayaitu mobile robot, robotic soccer dan masih banyak lagi yang bisa diaplikasikan.Sudah diketahui dengan hasil yang baik bahwavision digunakan sebagai sebuah computer visionyang handal dikarenakan kemampuannya untuk nonkontak dan penghitungan langsung dari lingkungan dan juga ketentuan dari beberapa informasi.
Dalam artikel ini, dilakukan analisa untuk melakukan tracking / pelacakan mata / Pengenalan Deteksi Matasebagai objek yang akan di dekenali / di deteksi. Prosedur tracking lebih ditekankan pada proses dalam pencarian objek dan mengikutinya. Hal tersebut dapat dilakukan melalui pemrosesan data dengan bantuan webcam.
Open CV
OpenCV (Open Computer Vision) adalah sebuahAPI (Application Programming Interface) Library yang sudah sangat familiar pada Pengolahan Citra Computer Vision. Computer Vision itu sendiri adalah salah satu cabang dari Bidang Ilmu Pengolahan Citra (Image Processing) yang memungkinkan komputer dapat melihat seperti manusia.Dengan vision tersebut komputer dapat mengambil keputusan, melakukan aksi, dan mengenali terhadap suatu objek. Beberapa pengimplementasian dari Computer Vision adalah Face Recognition, Face Detection, Face/Object Tracking, Road Tracking, dll. OpenCV adalah library Open Source untuk Computer Vision untuk C/C++, OpenCV didesain untuk aplikasi real-time, memiliki fungsi-fungsi akuisisi yang baik untuk image/video.
OpenCV sendiri terdiri dari 5 library, yaitu :
- CV : untuk algoritma Image processing dan Vision.
- ML : untuk machine learning library
- Highgui : untuk GUI, Image dan Video I/O.
- CXCORE : untuk struktur data, support XML dan fungsi-fungsi grafis.
- CvAux
Pengenalan Deteksi Mata Dengan OpenCV |
OpenCV pertama kali diluncurkan secara resmi pada tahun 1999 oleh Inter Research sebagai lanjutan dari bagian proyek bertajuk aplikasi intensif berbasisCPU, real-time ray tracing dan tembok penampil 3D. Para kontributor utama dalam proyek ini termasuk mereka yang berkecimpung dalam bidang optimasi di Intel Russia, dan juga Tim Pusataka Performansi Intel Pada awalnya, tujuan utama dari proyek OpenCV ini dideskripsikan sebagai berikut,
- Penelitian penginderaan citra lanjutan tidak hanya melalui kode program terbuka, tetapi juga kode yang telah teroptimasi untuk infrastruktur penginderaan citra.
- Menyebarluarkan ilmu penginderaan citra dengan menyediakan infrastruktur bersama di mana para pengembang dapat menggunakannya secara bersama-sama, sehingga kode akan tampak lebih mudah dibaca dan ditransfer.
- Membuat aplikasi komersial berbasiskan penginderaan citra, di mana kode yang telah teroptimasi tersedia secara bebas dengan lisensi yang tersedia secara bebas yang tidak mensyaratkan program itu harus terbuka atau gratis.
- Manipulation data citra
- Citra dan video I/O
- Manipulasi Matriks dan Vektor beserta rutin-rutin aljabar linear
- Data struktur dinamis
- Pemroses Citra fundamental
- Analisis struktur
- Kalibrasi kamera
- Analisis gerakan
- Pengenalan obyek
- Graphical User Interface
- Pelabelan citra
Contoh Program
Ini adalah program pengenalan / deteksi mata cepat dan pelacakan yang mengambil masukan dari webcam. Program menggunakan OpenCV detektor wajah untuk mendeteksi wajah pengguna dan mata. Untuk melacak mata pengguna, itu adalah menggunakan metode template matching.Jika kamu melihat ke dalam direktori sampel OpenCV, kamu akan menemukan facedetect.cpp yang akan mendeteksi wajah pengguna dari webcam menggunakan metode Viola-Jones. Program ini melakukan sangat baik dalam mendeteksi wajah manusia, tapi itu berjalan agak lambat karena algoritma kompleks.
Saya ingin mengambil facedetect.cpp satu langkah lebih lanjut untuk mendeteksi dan melacak matapengguna secara real-time. Untuk mencapai kecepatan tinggi, program perlu melakukan wajah dan mata deteksi hanya sekali pada startup Program. Setelah mata berhasil terdeteksi, template matadibuat pada saat runtime dan akan digunakan untuk melacak mata menggunakan metode template matching. Ini akan sangat meningkatkan kecepatan pelacakan real-time.
Deteksi Mata Dengan Viola Jones Open CV
Berikut adalah penggunaan model viola jones danopencv.
Kerangka program
Mari kita lihat kerangka program.Source Code C++
- int detectEye() {} // fungsi untuk deteksi wajah dan mata
- void trackEye() {} // Fungsi untuk deteksi mata dari dari template
- int main()
- {
- cv::VideoCapture cap(0);
- cv::Mat frame;
- cv::Mat eye_tpl; // template maata
- cv::Rect eye_bb; // kotak untuk deteksi
- while(cv::waitKey(15) != 'q')
- {
- cap >> frame;
- cv::Mat gray;
- cv::cvtColor(frame, gray, CV_BGR2GRAY);
- if (eye_bb.width == 0 && eye_bb.height == 0)
- detectEye(gray, eye_tpl, eye_bb);
- else
- {
- trackEye(gray, eye_tpl, eye_bb);
- cv::rectangle(frame, eye_bb, CV_RGB(0,255,0));
- }
- cv::imshow("video", frame);
- }
- return 0;
- }
Mendeteksi wajah pengguna dan mata dengan metode Viola-Jones
Deteksi wajah dan mata di implementasikan menggunakan fungsi detectEye(). Pertama proses yang dilakukan adalah mendeteksi wajah, jika berhasil akan dilanjutkan dengan proses deteksi mata. Jika proses ini berhasil maka berikutnya akan membuat dan mengembalikan template mata dan kotak deteksi mata.Source Code C++
- /**
- * Fungsi untuk mendeteksi wajah manusia dan mata dari gambar.
- *
- * @param im Gambar sumber
- * @param tpl Akan diisi dengan template mata, jika kesuksesan deteksi.
- * @param rect Akan diisi dengan kotak deteksi mata
- * @return zero=gagal, nonzero=sukses
- */
- int detectEye(cv::Mat& im, cv::Mat& tpl, cv::Rect& rect)
- {
- std::vector<cv::Rect> faces, eyes;
- face_cascade.detectMultiScale(im, faces, 1.1, 2,
- CV_HAAR_SCALE_IMAGE, cv::Size(30,30));
- for (int i = 0; i < faces.size(); i++)
- {
- cv::Mat face = im(faces[i]);
- eye_cascade.detectMultiScale(face, eyes, 1.1, 2,
- CV_HAAR_SCALE_IMAGE, cv::Size(20,20));
- if (eyes.size())
- {
- rect = eyes[0] + cv::Point(faces[i].x, faces[i].y);
- tpl = im(rect);
- }
- }
- return eyes.size();
Pelacakan mata dengan template matching
Fungsi ini akan mencari mata dalam kerangka yang diberikan dengan metode template matching. Metode template matching dilakukan di dalam jendela pencarian untuk meningkatkan kecepatan. Jika sukses, kotak deteksi mata akan diperbarui ke lokasi yang terdeteksi.Source Code C++
- /**
- * Melakukan pencocokan template untuk mencari mata pengguna pada gambar yang diberikan.
- *
- * @param im Gambar sumber
- * @param tpl Template mata
- * @param rect Kotak deteksi mata
- */
- void trackEye(cv::Mat& im, cv::Mat& tpl, cv::Rect& rect)
- {
- cv::Size size(rect.width * 2, rect.height * 2);
- cv::Rect window(rect + size - cv::Point(size.width/2, size.height/2));
- window &= cv::Rect(0, 0, im.cols, im.rows);
- cv::Mat dst(window.width - tpl.rows + 1, window.height - tpl.cols + 1, CV_32FC1);
- cv::matchTemplate(im(window), tpl, dst, CV_TM_SQDIFF_NORMED);
- double minval, maxval;
- cv::Point minloc, maxloc;
- cv::minMaxLoc(dst, &minval, &maxval, &minloc, &maxloc);
- if (minval <= 0.2)
- {
- rect.x = window.x + minloc.x;
- rect.y = window.y + minloc.y;
- }
- else
- rect.x = rect.y = rect.width = rect.height = 0;
- }
Hasil program
Ketika program dijalankan, video tidak bermain dengan lancar karena ia melakukan metode Viola-Jones untuk mendeteksi wajah dan mata. Tapi ketika mata berhasil terdeteksi, video diputar dengan lancar.Contoh hasilnya :P
Pengenalan Deteksi Mata Dengan OpenCV |
0 komentar:
Post a Comment