Cara Kerja Viola-Jones
Mendeteksi Adanya Wajah dalam satu Frame
Cara Kerja Viola-Jones
Mendeteksi Adanya Wajah dalam satu Frame
Assalamu’alaikum teman data.. Pada artikel kali ini, kita akan mengetahui langkah-perlangkah bagaimana cara kerja Algoritma Viola-Jones untuk mendeteksi adanya wajah dalam suatu gambar. Dari sisi kita sebagai manusia akan sangat mudah menentukan apakah dalam sebuah gambar ada wajah atau tidak. Namun dari sisi mesin maka tidak mudah mengetahui apakah ada wajah atau tidak disitu, karena mesin melihatnya hanya berupa kumpulan angka-angka yang merupakan representasi dari piksel.
Viola–Jones: Metode deteksi wajah klasik
Metode Viola–Jones (2001) adalah algoritma deteksi objek — terutama wajah — yang terkenal karena kecepatan dan efisiensinya. Ciri utamanya:

bagaimana pertama kali menentukan ukuran bounding box atau frame yang digunakan untuk mendeteksi adanya wajah ketika size dari setiap gambar mesti beda-beda? Ini inti dari robustness Viola–Jones terhadap ukuran gambar dan wajah yang bervariasi.
Ukuran wajah bisa berbeda-beda tergantung jarak kamera, resolusi, atau posisi wajah di dalam gambar. Tapi Viola–Jones harus menggunakan satu ukuran jendela (bounding box) awal yang tetap, karena seluruh proses deteksi (fitur Haar, integral image, dll) dirancang pada ukuran window tertentu — biasanya 24×24 piksel.
Bagaimana Viola–Jones mengatasi ukuran wajah yang berbeda?
Ada dua pendekatan umum, dan Viola–Jones memakai yang kedua:
1. Scaling the features (window stays the same)
- Ukuran gambar tetap, tapi ukuran filter Haar (fitur pendeteksi) diperbesar atau diperkecil.
- Secara konseptual masuk akal, tapi secara komputasi mahal karena setiap fitur harus disesuaikan ulang.
2. Scaling the image (features stay the same) ✅
- Viola–Jones tidak mengubah ukuran jendela (24×24), tapi mengubah ukuran gambar (resize).
- Gambar diperbesar dan diperkecil dalam image pyramid (piramida skala).
- Pada setiap level skala, algoritma meluncurkan jendela 24×24 ke seluruh gambar.
- Jika wajah lebih besar → terdeteksi di skala lebih kecil dari gambar.
- Jika wajah lebih kecil → terdeteksi di skala lebih besar dari gambar.
Tentang Bounding Box
- Bounding box (misalnya 24×24) adalah ukuran dasar.
- Setelah wajah terdeteksi di level skala tertentu, posisi bounding box di-map back ke ukuran gambar asli.
- Jadi hasil akhir di gambar asli bisa punya bounding box 48×48, 96×96, dsb., tergantung pada skala tempat wajah itu ditemukan.
Secara ringkas berikut langkahnya
- Tentukan ukuran jendela dasar (biasanya 24×24).
- Bangun piramida gambar (resize gambar jadi lebih kecil).
- Jalankan detektor wajah di tiap skala gambar.
- Skala ulang koordinat bounding box ke ukuran asli.
- Gabungkan (merge) deteksi yang tumpang tindih (misal pakai Non-Max Suppression).

bagaimana sliding window bekerja: sliding window (jendela) 24×24 bergeser di seluruh gambar dan pada berbagai skala. Apa yang dilakukan di dalam jendela itu? Viola–Jones menghitung fitur Haar untuk mengenali pola khas wajah manusia.
Fitur Haar adalah pola kontras sederhana — berupa perbedaan intensitas rata-rata antara area terang dan gelap dalam jendela gambar.

Di dalam jendela itu, ia menghitung perbedaan terang-gelap
Manusia punya pola umum di wajah:
- Mata lebih gelap dari pipi
- Hidung lebih terang dari sekitarnya
- Dahi lebih terang dari mata
Nah, pola terang–gelap ini bisa diukur dengan fitur Haar. Setiap fitur Haar adalah pola sederhana dari dua atau lebih kotak:
- Bagian putih → daerah yang diharapkan terang
- Bagian hitam → daerah yang diharapkan gelap
Setiap fitur Haar dihitung dengan:
Haar value = Sum(area putih)−Sum(area hitam)
Kalau hasilnya sesuai dengan pola terang-gelap wajah, maka nilai itu mendukung kemungkinan “ada wajah” di situ.
Contoh:
- Fitur mata (atas hitam, bawah putih): Jika bagian atas memang lebih gelap → nilai positif → cocok dengan wajah.
Untuk menghitung cepat semua ini, digunakan konsep Integral Image (jadi total intensitas area bisa didapat dalam 4 operasi saja, bukan ribuan pixel). Integral Image adalah gambar kumulatif yang menyimpan jumlah intensitas dari kiri-atas hingga titik tertentu.
Dengan ini, jumlah piksel dalam kotak apa pun bisa dihitung cuma dengan 4 operasi, bukan 576 (24×24). Itu sebabnya Viola–Jones sangat cepat, walaupun memeriksa ribuan fitur di setiap jendela.
Bagaimana tahapan fitur Haar dipakai untuk mendeteksi wajah?
Viola–Jones melatih ribuan fitur Haar pada dataset wajah dan bukan wajah, lalu memilih fitur-fitur yang paling efektif membedakan keduanya.
Setiap jendela 24×24:
- Akan diuji dengan ratusan sampai ribuan fitur Haar.
- Setiap fitur punya threshold dan arah keputusan (contoh: jika nilai fitur >15 → kemungkinan area mata → lanjutkan).
- Output-nya: skor keyakinan bahwa jendela itu mengandung wajah.
Namun, agar cepat, tidak semua fitur diperiksa di awal.
Tahap “Cascade Classifier” — rahasia kecepatannya
Fitur Haar dibagi dalam beberapa tahap (cascade stages):

Jika pada tahap awal nilai fitur tidak cocok dengan wajah, maka jendela itu langsung dibuang (rejected) tanpa lanjut ke tahap berikutnya.
Hasilnya:
- Ribuan jendela dapat diproses per detik.
- Hanya jendela yang “menjanjikan” (mirip wajah) yang lolos sampai akhir.
Kapan satu jendela dikatakan memiliki wajah?
Sebuah jendela (bounding box) dinyatakan “mengandung wajah” jika:
- Lolos semua tahap cascade classifier.
- Nilai keputusannya > ambang batas (confidence threshold).
- Biasanya, beberapa jendela bertumpuk di sekitar area yang sama — maka dilakukan Non-Maximum Suppression (NMS) untuk menggabungkannya jadi satu bounding box akhir.
untuk lengkapnya bisa ditemukan dengan mencari paper tersebut yang dapat diperoleh di beberapa link dengan judul,
“Rapid Object Detection using a Boosted Cascade of Simple Features” yang dipublish di proceeding Conceference on Computer Vision and Pattern Recognition 2001.
prosedur diatas dapat dicoba pada koding yang telah saya berikan pada artikel berikut ini
Catatan penting
1. Dalam satu jendela (24×24), bukan cuma satu fitur yang dicoba
Saat detektor Viola–Jones memeriksa satu jendela (misal di posisi (x, y) pada gambar), ia tidak mencoba satu pola Haar, kemudian geser, lalu cari yang cocok. Sebaliknya, ia menghitung semua fitur Haar yang relevan di posisi jendela itu sekaligus.
Bayangkan jendela 24×24 seperti “meja kerja” kecil tempat ratusan penggaris kecil (fitur Haar) ditempel pada posisi tertentu dan mengukur perbedaan terang–gelap.
2. Setiap fitur Haar punya posisi, ukuran, dan orientasi
Misalnya:
- Fitur A: dua-rectangle vertikal di posisi mata kiri (baris 8–12, kolom 6–12)
- Fitur B: dua-rectangle horizontal di tengah (baris 10–20, kolom 10–20)
- Fitur C: tiga-rectangle vertikal di bawah (mulut)
- dst.
Jadi, fitur-fitur ini bukan digeser setiap piksel di dalam jendela 24×24. Mereka sudah punya posisi dan ukuran tetap yang ditentukan saat proses training.
Bayangkan 100 fitur terbaik yang sudah “dilatih” di dataset wajah. Maka setiap jendela baru akan diuji dengan 100 fitur yang sama, di posisi dan ukuran yang sama relatif terhadap jendela.
Semua fitur dihitung serentak menggunakan Integral Image
Untuk menghitung “berapa terang” dan “berapa gelap” tiap kotak putih/hitam dengan cepat, Viola–Jones membuat integral image — semacam peta kumulatif dari intensitas piksel.
Dengan integral image, setiap fitur bisa dihitung dalam 4 operasi aritmetika saja (karena cukup pakai nilai di sudut-sudut kotak). Jadi walaupun ada ratusan fitur, semuanya bisa dihitung sangat cepat.
Hasil fitur tidak sekadar positif-negatif
Nilai setiap fitur (hasil perbedaan terang–gelap) bukan hanya dilihat apakah “positif” (misalnya gelap–terang) atau “negatif” (terang–gelap). Tiap fitur punya:
- nilai ambang (threshold), dan
- arah keputusan (polarity).
Misalnya:
- Fitur “mata” diharapkan negatif (karena atas gelap, bawah terang). → Jika hasil < –5 → mendukung wajah.
- Fitur “hidung” diharapkan positif (karena tengah terang). → Jika hasil > +7 → mendukung wajah.
Jadi sistem tidak berhenti di “nilai positif,” tapi memeriksa apakah hasilnya cocok dengan arah dan batas nilai yang sudah dilatih.
Kemudian, fitur-fitur ini diuji secara bertingkat (cascade)
Stage 1: hanya 2–5 fitur paling cepat.
- Kalau jendela gagal di sini (misal tidak punya pola mata–dahi yang benar) → langsung ditolak.
Stage 2: 25 fitur lebih kompleks (cek bentuk hidung–pipi).
- Kalau gagal → jendela dibuang.
Stage 3+: ratusan fitur mendalam (konfirmasi wajah penuh).
Jadi bukan berarti “fitur dicoba satu-satu di jendela.” Melainkan “semua fitur di jendela dihitung,” tapi keputusan dibuat berlapis, dari fitur paling cepat ke paling kompleks.
Semoga dapat membantu memahami cara kerja Viola-Jones
메타데이터
- post_id
- 0efbb93fac4a
- slug
- cara-kerja-viola-jones-0efbb93fac4a
- url
- https://medium.com/@986110101/cara-kerja-viola-jones-0efbb93fac4a
- canonical_url
- https://medium.com/@986110101/cara-kerja-viola-jones-0efbb93fac4a
- author_url
- https://medium.com/@986110101
- status
- ok
- fetched_at
- 2026-07-15 20:30:32