Viola dan Jones
memperkenalkan metode yang akurat untuk mendeteksi wajah melalui sebuah citra.
teknik ini dapat diadaptasi untuk mendeteksi pula fitur dari wajah tersebut.
Bagian atau daerah wajah yang telah terdeteksi dianalisis kemungkinan untuk
ditemukan fitur sangat tinggi. Sebagai contoh dari fitur tersebut adalah fitur
mata dan mulut. Hal ini menyebabkan pemrosesan akan berjalan dengan lebih
cepat. Wajah manusia memiliki kompleksitas permasalahn pemrosesan karena wajah
manusia merupakan objek dinamis yang memiliki banyak macam dan warna. Oleh
karenanya facial detection memiliki banyak pengaruh. Walaupun terdapat banyak
algoritma untuk pemrosesan citra digital dan facial detection, tetapi banyak
diantaranya yang memiliki kekurangan dan kelebihan[1].
1.
Inisialisasi Kamera
Inisialisasi kamera dimulai dari menginisialisasi
video masukan sampai dengan pemrosesan citra. pada proses ini citra wajah
secara fisik ditangkap dari capture device berupa webcam dengan resolusi 320 x
240 piksel. Citra wajah diambil untuk citra training berdasarkan posisi wajah
yaitu posisi tegak lurus, rotasi sejajar 15* ke kanan, rotasi sejajar 15* ke
kiri, mengangkat dagu ke atas 15* ke atas dan menundukkan kepala 15* ke bawah
serta berdasarkan tiga jarak objek wajah, yaitu 100 cm, 150 cm dan 200 cm.
2.
Tahap Scalling
Scalling
merupakan proses mengubah ukuran digital, hal ini perlu dilakukan agar semua
citra digital memiliki ukuran yang sama. Untuk melakukan scaling di sistem ini
dapat memanfaatkan package displau object. Citra digital tersebut diperkecil
dengan menggunakan metode interpolasi. Metode ini menggunakan rata-rata suatu
daerah yang mewakili daerah yang lebih besar. Berikut ini merupakan citra hasil
interpolasi:
Gambar asli 320x240 piksel
Gambar dengan
ukuran tersebut discan dan dikonversi ke dalam bentuk matriks 320 x 240 yang
berisi nilai piksel dari masing-masing komponen piksel.
Proses
pengubahan resolusi dari gambar dengan ukuran m x n tersebut terlihat pada
tabel berikut, yaitu:
k
|
Resolusi-k
(m), diambil ukuran panjang (Rk/2k)
|
Nilai
Rata-rata
|
0
|
320
|
12 10 | 4 6
|13 59 |12 12 | ... |14 15|
|
1
|
160
|
11 8|36
12|...|14 15|
|
2
|
...
|
...
|
3
|
...
|
...
|
3.
Tahap Grayscaling
citra digital
yang telah melalui proses scaling kemudian diubah menjadi citra dua warna
dengan proses grayscaling. Masing-masing chanel piksel dengan komponen R,G dan
B diproses dengan rumus sebagai berikut:
W= 0.2989 R +
0.5870 G + 0.1140 B
Sehingga
diperoleh citra hasil grayscaling sebagai berikut:
Gambar hasil grascaling 20 x 20 piksel
4.
Pendeteksian dengan Haar Cascade Classifier
metode ini
menggunakan haar-like features dimana perlu dilakukan training terlebih dahulu
untuk mendapatkan suatu pohon keputusan dengan nama cascade classifier sebagai
penentu apakah ada obyek atau tidak dalam setiap frame yang di proses. Terdapat
3 jenis fitur berdasarkan jumlah persegi panjang yang terdapat di dalamnya
(Krishna & Srinivasulu, 2012), seperti yang dapat dilihat pada gambar di
bawah ini:
5.
Proses menghitung Integral Image
citra integral
adalah sebuah citra yang nilai setiap pikselnya merupakan akumulasi dari nilai
piksel atas dan kirinya. Sebagai contoh, piksel (a,b) memiliki nilai akumulatif
untuk semua piksel (x,y) dimana x<=a dan y <= b. Salah satu contoh
seperti perhitungan berikut:
Gambar sampel perhitungan citra integral
Nilai fitur = |total piksel hitam- total piksel
putih|
= |(6+0-(0+0))+(25+3-(15+0))-(15+1-(6+0))|
= |6+13-10|
= 9
Nilai Haar feature yang didapatkan di atas yaitu 9 adalah
nilai perbedaan antar kotak (fitur puih dan fitur hitam) yang biasa disebut
threshold. Threshold ini digunakan sebagai parameter klasifikasi objek yang
terdeteksi sebagai wajah atau tidak.
Kemudian dengan Eclipse dan bahasa pemrograman Java serta Library OpenCV, ketikkan program seperti di bawah ini:
package latihan;
import java.io.File;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.highgui.Highgui;
import org.opencv.objdetect.CascadeClassifier;
public class FaceDetector {
public static String filename = "IMG_4936.png";
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
System.out.println("\nRunning FaceDetector");
CascadeClassifier faceDetector = new CascadeClassifier("xml/haarcascade_frontalface_alt.xml");
File file=new File("images/abc.JPG");
Mat image=null;
if(file.exists()){
image = Highgui.imread(file.getAbsolutePath());
}else{
System.out.println("Image doesn't exists!");
}
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
System.out.println(String.format("Detected %d faces", faceDetections.toArray().length));
for (Rect rect : faceDetections.toArray()) {
Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255, 0));
}
System.out.println(String.format("Writing %s", filename));
Highgui.imwrite(filename, image);
}
}
Kode di atas digunakan untuk mendeteksi lebih dari
satu foto dengan ukuran yang beraneka ragam.
[1]. Ian, Philip Wilson, Fernandez John, Dr. 2006. Facial
Feature Detection Using Haar Classifier
[2]. Gunawan, Hendra. 1997. Matematika di balik Citra
Digital. Bandung :
[3].Viola, P. & Jones, M., 2001. Robust Realtime Object Detection. Second International Workshop On Statistical And Computational Theories Of Vision – Modeling, Learning, Computing And Sampling Vancouver, Canada, July 13, 2001.
[3].Viola, P. & Jones, M., 2001. Robust Realtime Object Detection. Second International Workshop On Statistical And Computational Theories Of Vision – Modeling, Learning, Computing And Sampling Vancouver, Canada, July 13, 2001.