Face Detection menggunakan Haar Cascades
Tujuan
Dalam sesi ini,- Kita akan melihat dasar-dasar deteksi wajah menggunakan Haar Feature Cascade Classifiers
- Kami akan memperpanjang hal yang sama untuk deteksi mata dll.
Dasar
Deteksi Objek menggunakan fitur Haar feature cascade classifiers adalah metode pendeteksian objek yang efektif yang diusulkan oleh Paul Viola dan Michael Jones di makalah mereka, "Rapid Object Detection menggunakan Cascade Booster dari Fitur Sederhana" pada tahun 2001. Ini adalah pendekatan berbasis pembelajaran mesin dimana Fungsi kaskade dilatih dari banyak gambar positif dan negatif. Hal ini kemudian digunakan untuk mendeteksi objek pada gambar lainnya.Disini kita akan bekerja dengan face detection. Awalnya, algoritma ini membutuhkan banyak gambar positif (gambar wajah) dan gambar negatif (gambar tanpa wajah) untuk melatih classifier. Lalu kita perlu mengekstrak fitur dari itu. Untuk ini, fitur tangkapan yang ditunjukkan pada gambar di bawah digunakan. Mereka sama seperti kernel konvolusi kami. Setiap fitur adalah satu nilai yang diperoleh dengan mengurangkan jumlah piksel di bawah kotak putih dari jumlah piksel di bawah kotak hitam.
Tapi di antara semua fitur yang kami perhitungkan, kebanyakan dari mereka tidak relevan. Misalnya perhatikan gambar di bawah ini. Baris teratas menunjukkan dua fitur bagus. Fitur pertama yang dipilih nampaknya fokus pada properti bahwa daerah mata sering lebih gelap dari daerah hidung dan pipi. Fitur kedua yang dipilih bergantung pada properti yang matanya lebih gelap dari pada jembatan hidung. Tapi jendela yang sama menempel di pipi atau tempat lain tidak relevan. Jadi, bagaimana kita memilih fitur terbaik dari fitur 160000+? Hal ini dicapai oleh Adaboost .
Pengklasifikasi akhir adalah jumlah tertimbang dari pengklasifikasi lemah ini. Ini disebut lemah karena hanya saja tidak bisa mengklasifikasikan citra, tapi bersama-sama dengan yang lain membentuk classifier yang kuat. Makalah tersebut mengatakan, bahkan 200 fitur memberikan deteksi dengan akurasi 95%. Setup terakhir mereka memiliki sekitar 6000 fitur. (Bayangkan pengurangan dari 160000+ fitur ke 6000 fitur. Itu adalah keuntungan besar).
Jadi sekarang Anda mengambil gambar. Ambil setiap jendela 24x24. Terapkan 6000 fitur untuk itu. Periksa apakah itu wajah atau tidak. Wow .. Wow .. bukankah sedikit tidak efisien dan memakan waktu? Ya itu. Penulis punya solusi bagus untuk itu.
Dalam gambar, sebagian besar wilayah gambar adalah daerah non-wajah. Jadi, lebih baik ide untuk memiliki metode sederhana untuk memeriksa apakah jendela bukan area wajah. Jika tidak, buang dalam satu tembakan. Jangan mengolahnya lagi. Alih-alih fokus pada daerah dimana bisa ada wajah. Dengan cara ini, kita bisa menemukan lebih banyak waktu untuk memeriksa kemungkinan daerah wajah.
Untuk ini mereka memperkenalkan konsep Cascade of Classifiers . Alih-alih menerapkan semua fitur 6000 pada jendela, kelompokkan fitur ke dalam tahap klasifikasi yang berbeda dan terapkan satu per satu. (Biasanya beberapa tahap pertama akan mengandung jumlah fitur yang sangat sedikit). Jika sebuah jendela gagal dalam tahap pertama, buanglah itu. Kami tidak mempertimbangkan fitur yang tersisa di dalamnya. Jika lolos, terapkan tahap kedua dari fitur dan lanjutkan prosesnya. Jendela yang melewati semua tahap adalah daerah wajah. Bagaimana rencananya !!!
Detektor penulis memiliki 6000+ fitur dengan 38 tahap dengan fitur 1, 10, 25, 25 dan 50 pada lima tahap pertama. (Dua fitur pada gambar di atas sebenarnya didapat sebagai dua fitur terbaik dari Adaboost). Menurut penulis, rata-rata, 10 fitur dari 6000+ dievaluasi per sub-jendela.
Jadi ini adalah penjelasan intuitif sederhana tentang bagaimana kerja deteksi wajah Viola-Jones. Baca kertas untuk lebih jelasnya atau lihat referensi di bagian Sumber Tambahan.
Haar-cascade Detection di OpenCV
OpenCV hadir dengan seorang pelatih sekaligus detektor. Jika Anda ingin melatih classifier Anda sendiri untuk objek seperti mobil, pesawat terbang dll, Anda dapat menggunakan OpenCV untuk membuatnya. Rincian lengkap diberikan di sini: Cascade Classifier Training .Di sini kita akan menghadapi deteksi. OpenCV sudah berisi banyak pengklasifikasi pra-terlatih untuk wajah, mata, senyuman, dll. File XML tersebut disimpan dalam folder / data / haarcascades / folder. Mari buat detektor wajah dan mata dengan OpenCV.
Pertama kita perlu memuat classifier XML yang dibutuhkan. Kemudian muatkan gambar masukan (atau video) dalam mode grayscale.
impor numpy sebagai np
impor cv2
face_cascade = cv2.CascadeClassifier ( 'haarcascade_frontalface_default.xml' )
eye_cascade = cv2.CascadeClassifier ( 'haarcascade_eye.xml' )
img = cv2.imread ( 'sachin.jpg' )
abu-abu = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
wajah = face_cascade.detectMultiScale (abu-abu, 1.3, 5)
untuk (x, y, w, h) di wajah:
cv2.rectangle (img, (x, y), (x + w, y + h), (255,0,0), 2)
roi_gray = abu-abu [y: y + h, x: x + w]
roi_color = img [y: y + h, x: x + w]
mata = eye_cascade.detectMultiScale (roi_gray)
untuk (ex, ey, ew, eh) di mata:
cv2.rectangle (roi_color, (ex, ey), (ex + ew, ey + eh), (0,255,0), 2)
cv2.imshow ( 'img' , img)
cv2.waitKey (0)
cv2.destroyAllWindows ()
Sumber daya tambahan
- Video Ceramah tentang Deteksi Wajah dan Pelacakan
- Sebuah wawancara menarik mengenai Face Detection oleh Adam Harvey
Komentar
Posting Komentar