Kursus
OpenCV adalah pustaka visi komputer yang mendukung bahasa pemrograman seperti Python, C++, dan Java. Paket ini awalnya dibuat oleh Intel pada 1999 dan kemudian dibuat open-source serta dirilis ke publik.
OpenCV memungkinkan pengembang dan non-matematikawan membangun aplikasi visi komputer dengan mudah tanpa harus menulis kode dari nol. Pustaka ini memiliki lebih dari 2.500 algoritma yang memungkinkan pengguna melakukan tugas seperti pengenalan wajah dan deteksi objek.
Pengembang dan praktisi data di organisasi mapan seperti Google, Microsoft, IBM, dan Intel banyak menggunakan pustaka OpenCV, yang saat ini gratis untuk penggunaan komersial.
Pada artikel ini, kita akan menggunakan OpenCV untuk melakukan deteksi wajah di Python.
Pada akhir tutorial ini, Anda akan mengetahui cara:
- Mendeteksi wajah manusia dalam gambar dengan OpenCV di Python
- Melakukan deteksi wajah secara real-time pada siaran langsung dari webcam
Apa Itu Deteksi Wajah?
Deteksi wajah melibatkan identifikasi wajah seseorang dalam gambar atau video. Ini dilakukan dengan menganalisis masukan visual untuk menentukan apakah fitur wajah seseorang ada.
Karena wajah manusia sangat beragam, model deteksi wajah biasanya perlu dilatih pada sejumlah besar data masukan agar akurat. Dataset pelatihan harus memuat representasi yang memadai dari orang yang berasal dari latar belakang, gender, dan budaya berbeda.
Algoritma ini juga perlu diberi banyak sampel pelatihan yang mencakup pencahayaan, sudut, dan orientasi berbeda agar dapat membuat prediksi yang benar dalam skenario dunia nyata.
Nuansa ini membuat deteksi wajah menjadi tugas yang tidak sepele dan memakan waktu, memerlukan jam-jam pelatihan model dan jutaan sampel data.
Untungnya, paket OpenCV hadir dengan model pra-latih untuk deteksi wajah, yang berarti kita tidak perlu melatih algoritme dari nol. Secara khusus, pustaka ini menggunakan pendekatan pembelajaran mesin yang disebut Haar cascade untuk mengidentifikasi objek dalam data visual.
Tutorial OpenCV untuk Deteksi Wajah
Pada bagian ini, kita akan mempelajari cara menerapkan pendekatan deteksi wajah populer bernama Haar Cascade untuk deteksi wajah menggunakan OpenCV dan Python.
Jalankan dan edit kode dari Tutorial ini secara online
Jalankan kodePengenalan Klasifier Haar Cascade
Metode ini pertama kali diperkenalkan dalam makalah Rapid Object Detection Using a Boosted Cascade of Simple Features yang ditulis oleh Paul Viola dan Michael Jones.
Gagasan di balik teknik ini melibatkan penggunaan kaskade klasifier untuk mendeteksi berbagai fitur dalam sebuah gambar. Klasifier ini kemudian digabungkan menjadi satu klasifier kuat yang dapat membedakan secara akurat antara sampel yang mengandung wajah manusia dan yang tidak.
Klasifier Haar Cascade yang tertanam di OpenCV sudah dilatih pada dataset besar berisi wajah manusia, jadi tidak diperlukan pelatihan lebih lanjut. Kita hanya perlu memuat klasifier dari pustaka dan menggunakannya untuk melakukan deteksi wajah pada gambar masukan.
Instalasi OpenCV untuk Python
Untuk memasang pustaka OpenCV, cukup buka command prompt atau jendela terminal Anda dan jalankan perintah berikut:
pip install opencv-python
Perintah ini hanya akan berfungsi jika Anda sudah memasang pip di perangkat Anda. Jika Anda ingin mempelajari lebih lanjut tentang manajer paket pip, Anda dapat membaca PIP Python Tutorial kami.
OpenCV untuk Deteksi Wajah pada Gambar
Kita akan membuat detektor untuk mengidentifikasi wajah manusia pada sebuah foto dari Unsplash. Pastikan untuk menyimpan gambar tersebut ke direktori kerja Anda dan ubah namanya menjadi input_image sebelum mengikuti penulisan kodenya.
Langkah 1: Impor Paket OpenCV
Sekarang, mari impor OpenCV dan masukkan path gambar masukan dengan baris-baris kode berikut:
import cv2
imagePath = 'input_image.jpg'
Langkah 2: Baca Gambar
Kemudian, kita perlu membaca gambar dengan fungsi imread() milik OpenCV:
img = cv2.imread(imagePath)
Ini akan memuat gambar dari path berkas yang ditentukan dan mengembalikannya dalam bentuk array Numpy.
Mari kita cetak dimensi array ini:
img.shape
(4000, 2667, 3)
Perhatikan bahwa ini adalah array 3 dimensi. Nilai pada array mewakili tinggi, lebar, dan channel dari gambar, masing-masing. Karena ini adalah gambar berwarna, ada tiga channel yang digunakan untuk merepresentasikannya - biru, hijau, dan merah (BGR).
Perlu dicatat bahwa walaupun urutan konvensional untuk merepresentasikan gambar adalah RGB (Red, Green, Blue), pustaka OpenCV menggunakan susunan sebaliknya (Blue, Green, Red).
Langkah 3: Konversi Gambar ke Grayscale
Untuk meningkatkan efisiensi komputasi, kita terlebih dahulu perlu mengonversi gambar ini ke grayscale sebelum melakukan deteksi wajah:
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Sekarang mari kita periksa dimensi gambar grayscale ini:
gray_image.shape
(4000, 2667)
Perhatikan bahwa array ini hanya memiliki dua nilai karena gambar sudah grayscale dan tidak lagi memiliki channel warna ketiga.
Langkah 4: Muat Klasifier
Mari muat klasifier Haar Cascade pra-latih yang tertanam di OpenCV:
face_classifier = cv2.CascadeClassifier(
cv2.data.haarcascades + "haarcascade_frontalface_default.xml"
)
Perhatikan bahwa kita menggunakan berkas bernama haarcascade_frontalface_default.xml. Klasifier ini dirancang khusus untuk mendeteksi wajah frontal dalam masukan visual.
OpenCV juga menyediakan model pra-latih lain untuk mendeteksi berbagai objek dalam gambar - seperti mata, senyuman, tubuh bagian atas, hingga plat nomor kendaraan. Anda dapat mempelajari lebih lanjut tentang berbagai klasifier bawaan OpenCV dengan menelusuri repositori GitHub pustaka tersebut.
Langkah 5: Lakukan Deteksi Wajah
Sekarang kita dapat melakukan deteksi wajah pada gambar grayscale menggunakan klasifier yang baru saja kita muat:
face = face_classifier.detectMultiScale(
gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(40, 40)
)
Mari kita uraikan metode dan parameter yang ditentukan pada kode di atas:
- detectMultiScale():
Metode detectMultiScale() digunakan untuk mengidentifikasi wajah dengan ukuran berbeda dalam gambar masukan.
grey_image:
Parameter pertama dalam metode ini bernama grey_image, yaitu gambar grayscale yang kita buat sebelumnya.
scaleFactor:
Parameter ini digunakan untuk memperkecil ukuran gambar masukan agar algoritme lebih mudah mendeteksi wajah yang lebih besar. Dalam kasus ini, kita menentukan faktor skala 1,1 yang menunjukkan bahwa kita ingin mengurangi ukuran gambar sebesar 10%.
minNeighbors:
Klasifier kaskade menerapkan sliding window pada gambar untuk mendeteksi wajah di dalamnya. Anda dapat membayangkan jendela-jendela ini sebagai persegi panjang.
Awalnya, klasifier akan menangkap sejumlah besar false positive. Ini dihilangkan menggunakan parameter minNeighbors, yang menentukan jumlah persegi panjang bertetangga yang perlu diidentifikasi agar sebuah objek dianggap sebagai deteksi yang valid.
Ringkasnya, memberikan nilai kecil seperti 0 atau 1 pada parameter ini akan menghasilkan banyak false positive, sedangkan nilai yang besar dapat menyebabkan hilangnya banyak true positive.
Kuncinya adalah menemukan kompromi yang memungkinkan kita menghilangkan false positive sekaligus mengidentifikasi true positive secara akurat.
minSize:
Terakhir, parameter minSize menetapkan ukuran minimum objek yang akan dideteksi. Model akan mengabaikan wajah yang lebih kecil dari ukuran minimum yang ditentukan.
Langkah 6: Menggambar Bounding Box
Sekarang model telah mendeteksi wajah dalam gambar, mari jalankan baris-baris kode berikut untuk membuat bounding box di sekeliling wajah tersebut:
for (x, y, w, h) in face:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 4)
Variabel face adalah array dengan empat nilai: sumbu x dan y tempat wajah terdeteksi, serta lebar dan tingginya. Kode di atas mengiterasi wajah-wajah yang teridentifikasi dan membuat bounding box yang merentang sesuai ukuran tersebut.
Parameter 0,255,0 merepresentasikan warna bounding box, yaitu hijau, dan 4 menunjukkan ketebalannya.
Langkah 7: Menampilkan Gambar
Untuk menampilkan gambar dengan wajah yang terdeteksi, pertama-tama kita perlu mengonversi gambar dari format BGR ke RGB:
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
Sekarang, mari gunakan pustaka Matplotlib untuk menampilkan gambar:
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10))
plt.imshow(img_rgb)
plt.axis('off')
Kode di atas seharusnya menghasilkan keluaran berikut:

Bagus!
Model berhasil mendeteksi wajah manusia dalam gambar ini dan membuat bounding box di sekelilingnya.
Deteksi Wajah Real-Time dengan OpenCV
Sekarang kita telah berhasil melakukan deteksi wajah pada gambar statis dengan OpenCV, mari lihat cara melakukan hal yang sama pada siaran video langsung.
Langkah 1: Prasyarat
Pertama, mari langsung impor pustaka OpenCV dan muat model Haar Cascade seperti yang kita lakukan pada bagian sebelumnya. Anda dapat melewati blok kode ini jika sudah menjalankannya sebelumnya:
import cv2
face_classifier = cv2.CascadeClassifier(
cv2.data.haarcascades + "haarcascade_frontalface_default.xml"
)
Langkah 2: Akses Webcam
Sekarang, kita perlu mengakses kamera perangkat untuk membaca siaran langsung data video. Ini dapat dilakukan dengan kode berikut:
video_capture = cv2.VideoCapture(0)
Perhatikan bahwa kita memberikan parameter 0 ke fungsi VideoCapture(). Ini memberi tahu OpenCV untuk menggunakan kamera bawaan pada perangkat kita. Jika Anda memiliki beberapa kamera yang terpasang pada perangkat, Anda dapat mengubah nilai parameter ini sesuai kebutuhan.
Langkah 3: Mengidentifikasi Wajah dalam Siaran Video
Sekarang, mari kita buat fungsi untuk mendeteksi wajah dalam siaran video dan menggambar bounding box di sekelilingnya:
def detect_bounding_box(vid):
gray_image = cv2.cvtColor(vid, cv2.COLOR_BGR2GRAY)
faces = face_classifier.detectMultiScale(gray_image, 1.1, 5, minSize=(40, 40))
for (x, y, w, h) in faces:
cv2.rectangle(vid, (x, y), (x + w, y + h), (0, 255, 0), 4)
return faces
Fungsi detect_bounding_box menerima bingkai video sebagai masukan.
Dalam fungsi ini, kita menggunakan kode yang sama seperti sebelumnya untuk mengonversi bingkai menjadi grayscale sebelum melakukan deteksi wajah.
Kemudian, kita juga mendeteksi wajah pada gambar ini menggunakan nilai parameter yang sama untuk scaleFactor, minNeighbors, dan minSize seperti sebelumnya.
Terakhir, kita menggambar bounding box berwarna hijau dengan ketebalan 4 pada bingkai.
Langkah 4: Membuat Loop untuk Deteksi Wajah Real-Time
Sekarang, kita perlu membuat loop while tanpa batas yang akan menangkap bingkai video dari webcam dan menerapkan fungsi deteksi wajah padanya:
while True:
result, video_frame = video_capture.read() # read frames from the video
if result is False:
break # terminate the loop if the frame is not read successfully
faces = detect_bounding_box(
video_frame
) # apply the function we created to the video frame
cv2.imshow(
"My Face Detection Project", video_frame
) # display the processed frame in a window named "My Face Detection Project"
if cv2.waitKey(1) & 0xFF == ord("q"):
break
video_capture.release()
cv2.destroyAllWindows()
Setelah menjalankan kode di atas, Anda akan melihat jendela bernama My Face Detection Project muncul di layar:

Algoritme akan melacak wajah Anda dan membuat bounding box berwarna hijau di sekelilingnya, di mana pun Anda bergerak dalam bingkai.
Dalam bingkai di atas, model mengenali wajah saya dan foto saya pada SIM yang saya pegang.
Anda juga dapat menguji keefektifan model ini dengan memegang beberapa gambar atau meminta orang berbeda berdiri pada berbagai sudut di belakang kamera. Model seharusnya dapat mengidentifikasi semua wajah manusia dalam latar atau pengaturan pencahayaan yang berbeda.
Jika Anda ingin keluar dari program, Anda dapat menekan tombol “q” pada keyboard untuk keluar dari loop.
Kesimpulan
Singkatnya, OpenCV adalah pustaka yang andal dan serbaguna untuk membangun aplikasi visi komputer, menawarkan beragam model pra-latih dan alat untuk menyederhanakan tugas kompleks seperti deteksi wajah.
Baik Anda memproses gambar statis maupun siaran video langsung, OpenCV menyediakan titik awal yang mudah diakses bagi pengembang untuk membuat solusi yang efisien dan terukur.
Dengan menguasai teknik yang dibahas dalam tutorial ini, Anda akan siap menjelajahi aplikasi visi komputer yang lebih lanjut di proyek Anda.
Natassha adalah seorang konsultan data yang bekerja di persimpangan ilmu data dan pemasaran. Ia meyakini bahwa data, ketika digunakan dengan bijak, dapat menginspirasi pertumbuhan luar biasa bagi individu dan organisasi. Sebagai profesional data autodidak, Natassha suka menulis artikel yang membantu para calon praktisi ilmu data menembus industri. Artikel-artikelnya di blog pribadi, serta publikasi eksternal, meraih rata-rata 200 ribu tayangan per bulan.
FAQs
Apakah OpenCV dapat digunakan untuk mendeteksi objek selain wajah?
Ya, OpenCV mendukung deteksi objek untuk berbagai item seperti mata, senyuman, kendaraan, bahkan plat nomor menggunakan klasifier Haar Cascade pra-latih. Selain itu, OpenCV dapat dikombinasikan dengan model deteksi objek modern seperti YOLO atau SSD untuk deteksi multiobjek yang lebih andal dan akurat.
Bagaimana saya dapat menangani banyak wajah dalam satu gambar menggunakan OpenCV?
Metode detectMultiScale() milik OpenCV secara otomatis mendeteksi semua wajah dalam gambar dengan membuat bounding box untuk masing-masing. Anda dapat mengiterasi bounding box yang dikembalikan untuk memproses atau memberi label setiap wajah yang terdeteksi secara terpisah. Contoh:
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 4) # Draw boxes for all detected facesBisakah OpenCV bekerja dengan model deep learning untuk deteksi wajah?
Ya, OpenCV mendukung model deep learning untuk deteksi wajah, seperti menggunakan model DNN pra-latih seperti Caffe atau TensorFlow. Modul cv2.dnn milik OpenCV memungkinkan integrasi dengan model-model ini untuk deteksi wajah yang lebih canggih dan akurat dibandingkan Haar cascade. Misalnya, Anda dapat menggunakan model MobileNet-SSD untuk deteksi wajah real-time:
net = cv2.dnn.readNetFromCaffe('deploy.prototxt', 'res10_300x300_ssd_iter_140000.caffemodel')
