Pernahkah Anda bertanya-tanya bagaimana Snapchat secara akurat menerapkan berbagai filter di wajah Anda? Apakah ponsel cerdas Anda melakukan keajaiban saat dibuka menggunakan fitur wajah Anda? Tidak, Anda hanya menonton Deteksi Wajah beraksi.
Face Detection merupakan teknologi Artificial Intelligence yang dapat mengidentifikasi wajah manusia dalam sebuah citra digital atau video. Temukan bagaimana Anda dapat membangun program deteksi wajah real-time di bawah 25 baris kode dengan algoritma Haar Cascade yang legendaris.
Apa itu Kaskade Haar?
Haar Cascade adalah algoritma pendeteksian objek yang diperkenalkan oleh Paul Viola dan Michael Jones untuk mendeteksi wajah dalam gambar atau video. Fungsi kaskade dilatih menggunakan banyak gambar positif dan negatif yang nantinya dapat digunakan untuk mengidentifikasi objek atau wajah apa pun di media lain. File terlatih ini tersedia di repositori OpenCV GitHub.
Menggunakan pendekatan jendela geser, jendela dengan ukuran tetap mengiterasi gambar dari kiri ke kanan, atas ke bawah. Pada setiap fase, jendela berhenti dan mengklasifikasikan apakah area tersebut berisi wajah atau tidak.
OpenCV, alat visi komputer, bekerja dengan model Haar Cascade yang telah dilatih sebelumnya untuk mengklasifikasikan fitur. Setiap fase memeriksa lima fitur: dua fitur tepi, dua fitur garis, dan satu fitur empat persegi panjang.
Pada pengamatan, area mata tampak lebih gelap dari area pipi sedangkan area hidung terlihat lebih terang dari area mata. Anda dapat memvisualisasikan fitur-fitur ini dalam mode di bawah ini.
Dengan menggunakan fitur-fitur ini dan penghitungan piksel, algoritme mengidentifikasi lebih dari 100.000 titik data. Anda kemudian dapat menggunakan algoritma Adaboost untuk meningkatkan akurasi dan membuang fitur yang tidak relevan. Pada banyak iterasi, pendekatan ini meminimalkan tingkat kesalahan dan meningkatkan bobot fitur hingga mencapai akurasi yang dapat diterima.
Namun, teknik jendela geser berhenti jika kasus uji tertentu gagal dan secara komputasi mahal. Untuk mengatasi ini, Anda dapat menerapkan konsep Cascade of Classifiers. Alih-alih menerapkan semua fitur dalam satu jendela, pendekatan ini mengelompokkan dan menerapkannya secara bertahap.
Jika jendela gagal pada tahap pertama, proses akan membuangnya, jika tidak maka akan dilanjutkan. Hal ini menyebabkan penurunan drastis dalam jumlah operasi yang harus dilakukan dan membuatnya layak digunakan untuk aplikasi waktu nyata.
Alur kerja Deteksi Wajah
Ikuti algoritme ini untuk membuat program deteksi wajah Anda:
- Muat Algoritma Haar Cascade Frontal Face.
- Inisialisasi kamera.
- Baca frame dari kamera.
- Ubah gambar berwarna menjadi skala abu-abu.
- Dapatkan koordinat wajah.
- Gambarlah sebuah persegi panjang dan letakkan pesan yang sesuai.
- Tampilkan outputnya.
Apa Itu OpenCV?
OpenCV adalah visi komputer sumber terbuka dan perpustakaan pembelajaran mesin. Ini memiliki lebih dari 2.500 algoritma yang dioptimalkan untuk berbagai aplikasi. Ini termasuk deteksi wajah/objek, pengenalan, klasifikasi, dan banyak lagi.
Privasi data wajah Anda adalah masalah tersendiri. Ratusan perusahaan terkemuka seperti Google, IBM, dan Yahoo menggunakan OpenCV dalam aplikasi mereka. Beberapa orang yang bertujuan untuk merahasiakan data mereka telah menunjukkan bahwa ada cara untuk menghindari pengenalan wajah.
Untuk menginstal OpenCV dengan Python, gunakan perintah:
pip install opencv-python
Cara Membuat Program Deteksi Wajah Menggunakan Python
Ikuti langkah-langkah ini untuk membuat detektor wajah:
Kode contoh ini, bersama dengan file algoritma Haar Cascade, tersedia di repositori GitHub dan gratis untuk Anda gunakan di bawah Lisensi MIT.
- Unduh file XML Haar Cascade Frontal Face Default dan letakkan di lokasi yang sama dengan program Python Anda.
- Impor perpustakaan OpenCV.
import cv2 - Simpan file algoritma Haar Cascade Frontal Face untuk memudahkan referensi.
alg = "haarcascade_frontalface_default.xml" - Gunakan kelas CascadeClassifier untuk memuat file XML ke OpenCV.
haar_cascade = cv2.CascadeClassifier(alg) - Rekam video dari kamera. Lulus 0 ke Tangkapan Video() berfungsi untuk menggunakan kamera utama Anda. Jika Anda telah memasang kamera eksternal, Anda dapat menggunakan angka 1, 2, dan seterusnya secara berurutan untuk menggunakannya.
cam = cv2.VideoCapture(0) - Siapkan loop tak terbatas untuk membaca input kamera bingkai demi bingkai. Itu Baca() fungsi mengembalikan dua parameter. Nilai pertama bertipe boolean yang menunjukkan apakah operasi berhasil atau tidak. Parameter kedua berisi bingkai aktual yang akan Anda kerjakan. Simpan bingkai ini di gambar variabel.
while True:
_, img = cam.read() - Atur teks default agar muncul sebagai Wajah tidak terdeteksi. Saat terdeteksi, perbarui nilai variabel ini.
text = "Face not detected"
- Masukan yang diterima dari dunia nyata berwarna-warni, dalam format BGR. BGR adalah singkatan dari Blue, Green, dan Red. Ini menciptakan banyak pemrosesan untuk aplikasi visi komputer. Untuk mengurangi ini, gunakan format skala abu-abu.
grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)Lewati format bingkai dan kode konversi, WARNA_BGR2GRAYke warna cvt() untuk mengubah setiap bingkai video dari warna menjadi skala abu-abu.
- Menggunakan deteksiMultiSkala() untuk mendeteksi wajah. Metode ini mengambil tiga parameter sebagai input. Pertama adalah sumber gambar, abu-abuImg. Parameter kedua adalah scaleFactor. Ini menentukan seberapa banyak Anda harus mengurangi ukuran gambar pada setiap skala gambar. Gunakan nilai default 1.3 sebagai faktor penskalaan. Semakin tinggi faktor skala, semakin sedikit langkah, dan semakin cepat eksekusi. Namun, ada juga kemungkinan lebih besar untuk kehilangan wajah. Parameter ketiga adalah minNeighbors. Ini menentukan berapa banyak tetangga yang harus dimiliki setiap persegi panjang kandidat untuk mempertahankannya. Semakin tinggi nilainya, semakin kecil kemungkinan positif palsu, tetapi itu juga berarti kehilangan jejak wajah yang tidak jelas.
face = haar_cascade.detectMultiScale(grayImg, 1.3, 4) - Saat Anda mendeteksi wajah, Anda mendapatkan empat koordinat. x mewakili koordinat x, y mewakili koordinat y, w mewakili lebar, dan h mewakili tinggi. Perbarui teks menjadi Wajah Terdeteksi dan menggambar persegi panjang menggunakan koordinat ini. Warna persegi panjang adalah format hijau (BGR) dengan ketebalan dua piksel.
for (x, y, w, h) in face:
text = "Face Detected"
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) - Secara opsional, cetak teks pada konsol keluaran. Tampilkan teks di layar menggunakan bingkai yang diambil sebagai sumber, teks seperti yang diperoleh dalam teks di atas, gaya font FONT_HERSHEY_SIMPLEX, faktor skala font 1, warna biru, ketebalan dua piksel, dan jenis garis AA.
print(text)
image = cv2.putText(img, text, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA) - Tampilkan jendela dengan judul Deteksi wajah dan gambar. Menggunakan kunci tunggu() metode untuk menampilkan jendela selama 10 milidetik dan memeriksa penekanan tombol. Jika pengguna menekan tombol ESC kunci (Nilai ASCII 27), keluar dari loop.
cv2.imshow("Face Detection", image)
key = cv2.waitKey(10)if key == 27:
break - Terakhir, lepaskan objek kamera dari program python dan tutup semua jendela.
cam.release()
cv2.destroyAllWindows()
Deteksi Wajah Menggunakan Python dalam Aksi
Saat wajah terlihat, Anda akan melihat output seperti ini:
Saat tidak ada wajah, Anda akan melihat pesan seperti ini:
Keterbatasan Deteksi Wajah Menggunakan Algoritma Haar Cascade
Meskipun algoritme ini ringan, dengan ukuran model kecil, dan bekerja cepat, ada beberapa batasan:
- Dalam video real-time, wajah harus sejajar dengan kamera. Jika wajah terlalu jauh atau terlalu dekat atau terlalu miring, algoritme gagal mengambil fitur.
- Ini adalah algoritme wajah depan, jadi Anda tidak dapat mendeteksi tampilan samping.
- Hasil positif palsu yang tinggi. Ini sering mendeteksi area sebagai wajah meskipun tidak ada wajah.
- Perlu memiliki kondisi pencahayaan yang optimal. Pencahayaan yang berlebihan atau redup menghambat akurasi algoritme.
Banyaknya Aplikasi Deteksi Wajah
Deteksi wajah memiliki berbagai aplikasi di dunia saat ini. Anda dapat menggunakannya untuk pengenalan wajah di smartphone, rumah, kendaraan, dan pos pemeriksaan imigrasi. Deteksi wajah sudah umum dalam pengawasan CCTV, filter media sosial, dan pelacakan wajah otomatis dalam sinematografi.
Ini hanyalah awal dari teknologi yang luar biasa ini. Dengan kemajuan, kita mungkin dapat mengidentifikasi anak-anak yang hilang, menangkap penjahat, dan mencegah kejahatan seperti pencurian identitas.