Lewati ke konten utama

Deteksi Wajah dengan Python Menggunakan OpenCV

Pelajari deteksi objek di Python menggunakan pustaka OpenCV dan temukan cara menerapkannya untuk tugas seperti deteksi wajah.
Diperbarui 28 Sep 2026  · 8 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

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 kode

Pengenalan 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:

  1. detectMultiScale():

Metode detectMultiScale() digunakan untuk mengidentifikasi wajah dengan ukuran berbeda dalam gambar masukan.

  1. grey_image:

Parameter pertama dalam metode ini bernama grey_image, yaitu gambar grayscale yang kita buat sebelumnya.

  1. 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%.

  1. 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.

  1. 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: 

hasil deteksi wajah

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:

hasil deteksi wajah

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 Selvaraj's photo
Author
Natassha Selvaraj
LinkedIn
Twitter

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 faces

Bisakah 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')
Topik
Python
Kecerdasan Buatan

Pelajari AI dengan kursus-kursus ini!

Kursus

Konsep Generative AI

2 jam
121.2K
Pelajari cara mulai memanfaatkan AI generatif secara bertanggung jawab. Pelajari cara model AI generatif dikembangkan dan dampaknya bagi masyarakat ke depan.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya