Belajar Praktis: Pengenalan Pendeteksian Objek (OpenCV dan Python) Author: M. Rasyid Aqmar 2015.07.28
Pendeteksian Objek Contoh: Pendeteksian wajah Diambil dari: http://i.stack.imgur.com Aplikasi teknologi ini ada di mana-mana: kamera, facebook, dsb. Ingin tahu bagaimana caranya?
Apakah Sulit membuatnya? Tidak! Insya Allah tutorial ini akan berusaha membimbing Anda untuk bisa menjalankan aplikasi sederhana pendeteksian wajah. Walaupun Anda seorang pemula.
Mulai dari mana? Siapkan komputer Anda Download dan install pustaka OpenCV dari sini: OpenCV3 Download dan install paket Python seperti: 1.1. Python-2.7.x. 1.2. Numpy. 1.3. Matplotlib Atau Anda bisa mendapatkan ketiganya pada paket Anaconda (Python) dari sini: Anaconda Kami tahu proses setup ini memerlukan waktu, tapi bersabarlah! Jerih payah Anda insya Allah akan segera terbayar.
Selanjutnya? Persiapan selesai! Asumsikan Anda sudah memiliki direktori yang sama/mirip seperti ini: C:\OpenCV3.0 C:\Python27 Lihat directory OpenCV di : C:\opencv\build\python\2.7 Copy cv2.pyd ke C:\Python27\lib\site-packages. Persiapan selesai!
Mari langsung coba! Buka command prompt Akses ke: C:\OpenCV3.0\opencv\sources\samples\python2 Jalankan skrip Python ini: peopledetect.py ..\data\basketball2.png Hasil: Selamat! Anda telah berhasil menjalankan program pendeteksian orang
Bagaimana dengan deteksi wajah? No Problem! Di C:\OpenCV3.0\opencv\sources\samples\python2 ada contoh skrip facedetect.py untuk pendeteksian wajah dari video atau kamera. Silakan sesuaikan input yang diperlukan. Selain itu, silakan akses skrip yang sudah kami revisi sehingga bisa mendeteksi wajah dengan ‘satu klik’ saja: https://github.com/soca-rg/python-opencv/blob/master/facedetect_soca.py (Simpan di C:\OpenCV3.0\opencv\sources\samples\python2 , jalankan langsung tanpa argumen input) Hasil:
Mudah bukan?
Bagaimana proses yang terjadi di dalamnya Bagaimana proses yang terjadi di dalamnya? (Bagian ini merupakan tutorial konsep/teknologinya secara ilustratif tanpa notasi matematika)
Penjelasan source code Membaca file citra Bagian utama dari source code: Convert ke grayscale (Metode deteksinya tidak membutuhkan warna) … img=cv2.imread('../data/lena.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) rects = detect(gray, cascade) vis = img.copy() draw_rects(vis, rects, (0, 255, 0)) …. Fungsi utama untuk mendeteksi (citra input dan model cascade) Menggambar hasil deteksi dengan persegi warna hijau
Penjelasan teknologi (1) Apa yang ada di dalam “detect()” Box yang teruji lolos dalam proses Klasifikasi terhadap model cascade itulah yang menang! Raster scanning Respon skor terhadap model citra citra citra Model Cascade Untuk membuat model cascade diperlukan sebuah proses yang dinamakan “training” . Detil tentang proses training di luar topik tutorial ini. Nantikan di tutorial yang lainnya ya!
Penjelasan Teknologi (1) : Ekstraksi fitur Fitur yang digunakan oleh OpenCV adalah Haar-like feature. Citra objek yang akan digunakan untuk training Perhatikan pola berikut: Aplikasikan ke - + - + - + - + Mendeteksi “edge” Mendeteksi “line” - + = (+)Jumlah Pixel Wilayah Hitam-Jumlah Pixel Wilayah Putih Fitur 1 Fitur 3 Fitur n - + Untuk ukuran citra 24x24, n bisa hingga 160K! Terlalu besar untuk komputasi. Trik: Cascade classfier (slide 18) - + … - + - + Fitur 2 Fitur 4 Menghitung jumlah pixel di dalam kotak ini berulang-ulang sangat memakan waktu,. Trik: Citra Integral (slide 16)
Penjelasan Teknologi: (2) Citra Integral Citra Integral adalah sebuah teknik untuk menghitung jumlah pixel pada sebuah area di dalam citra dengan cepat. Kuncinya adalah: lakukan pre-komputasi citra/tabel jumlah kumulatif untuk setiap pixel. px-1,y-1) p(x,y) p(x,y-1) p(x-1,y) I(x-1,y-1) I(x,y) I(x-1,y) Komputasi ini untuk setiap pixel: I(x,y)=p(x,y)+I(x-1,y)+I(x,y-1)-I(x-1,y-1) Bayangkan 4 box di atas adalah 4 pixel yang bertetangga. Catatan penting: Ingat, pixel bukanlah box! Ini hanya untuk ilustrasi saja. A F B E I J C H D G K L Akhirnya, menghitung jumlah pixel di area ini cukup dengan: I(L)+I(F)-I(H)-I(J)
Penjelasan Teknologi (3): Adaboost Training Adaboost adalah sebuah classifier sederhana yang cukup efektif. Ide utamanya adalah, Adaboost dibangun oleh classifier-classifier yang “lemah”/”weak”, yang jika bekerja sama akan menjadi classifier yang “kuat”/”strong”. Bayangkan kita memiliki sampel training set: Objek (+1) Dan Non-Objek (-1) Fitur Haar-like Matematika sedikit ya: … … … … … … … Nilai “pentingnya” fitur ke t, ditentukan saat training … … “strong classifier” … … … Jumlah fitur “weak classifier”, bisa hanya dengan threshold. Kalau nilai fitur > maka +1, selainnya -1 frekuensi frekuensi frekuensi … Nilai fitur Nilai fitur Nilai fitur Keputusan final: kalau f(x) positif, maka H(x) juga positif atau kelas objek, dan sebaliknya. Fitur ke-1 Fitur ke-2 Fitur ke-n
Penjelasan Teknologi (4): Cascade classifier Pada saat pengujian, jumlah fitur yang terlampau besar akan sangat membebani komputasi. Triknya adalah dengan “cascade classifier”. Mari kita lihat: Dari proses sebelumnya, kita memiliki sejumlah fitur K yang “penting” (silakan tebak di bagian mana, sebagai latihan ) ditestimasi pada fase training, di mana K<T. Misal, kalau T 160k, kita pilih K=600. Mari kita kembali ke ilustrasi fungsi “detect()” Raster scanning Cascade classfier Stage 1 Stage 2 Stage n Pemenang! … citra 1 fitur 10 fitur k fitur Intinya, jika dalam stage awal objek sudah ditemukan, kita tidak perlu menggunakan semua fitur!
Tidak terlalu sulit bukan?
Kontak Diskusi Bagi yang ingin sharing dan diskusi lebih lanjut, silakan hubungi: Twitter: @SocaResearch Email: soca.research@gmail.com Bagi yang ingin bergabung dengan mailing list kami (SOCA-research@googlegroups.com), silakan hubungi admin kami di: soca.research@gmail.com Dengan Subject Email ”[Permohonan Subscribe Milis]“
Seeing is believing. Listening is understanding. Sharing is inspiring. © 2015 Seeing is believing. Listening is understanding. Sharing is inspiring.