Friday, June 13, 2014

Face Detection Using Haar Cascade Classifier Algorithm

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
Maka hasil perhitungan citra integralnya adalah:



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.      

dan hasilnya sebagai berikut:



                                                

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

Posted By Unknown9:26 PM