Tahapan Deteksi Tahap Pembangunan Aplikasi
Gambar 3.5 Proses pada Tahap Deteksi Load File Training Haar Cascade
Output dari tahap sebelumnya yang merupakan citra grayscale yang diambil dari webcam. Citra tersebut masih berisi informasi lingkungan dan wajah, sehingga
diperlukan sebuah metode untuk mengambil citra wajah dari citra webcam yang telah diproses sebelumnya. Metode yang digunakan pada aplikasi ini adalah metode
haar cascade classifier sebagai metode untuk pengenalan pola wajah. Library EmguCV telah menyediakan sebuah class untuk mendeteksi objek melalui citra.
Class ini bernama HaarCascade, dimana class ini berfungsi untuk mendeteksi objek, baik itu wajah maupun benda lainnya. Class Haar Cascade memerlukan
sebuah file data training untuk deteksi wajah. File ini telah disediakan oleh library EmguCV bernama haarcascade.frontalface_default.xml digunakan sebagai media
training haar cascade classifer dimana pengembang aplikasi tidak perlu melakukan kembali
training untuk
mendeteksi wajah
manusia. File
training haarcascade.frontalface_default.xml adalah file training bawaan default. Proses
pemanggilan file pada Library Emgu CV ini adalah sebagai berikut :
Private HaarCascade haarCascade = new HaarCascade haarcascade_frontalface_default.xml;
Berikut ini adalah isi dari file training haarcascade.frontalface_default.xml :
opencv_storage haarcascade_frontalface_default type_id=opencv-haar-classifier
size20 20size stages
_ -- stage 0 --
trees _
-- tree 0 -- _
-- root node -- feature
rects _3 7 14 4 -1._
_3 9 14 2 2._rects tilted0tiltedfeature
threshold4.0141958743333817e-003threshold left_val0.0337941907346249left_val
right_val0.8378106951713562right_val__ _
-- tree 1 -- _
-- root node -- feature
rects _1 2 18 4 -1._
_7 2 6 4 3._rects tilted0tiltedfeature
threshold0.0151513395830989threshold left_val0.1514132022857666left_val
right_val0.7488812208175659right_val__
_ -- tree 2 --
... stage_threshold0.8226894140243530stage_threshold
parent-1parent next-1next_
_ -- stage 1 --
... -- stage 21 --
trees _
-- tree 0 -- …
-- tree 212 -- stage_threshold105.7611007690429700stage_threshold
parent20parent next-1next_stageshaarcascade_frontalface_default
opencv_storage
Training memiliki isi yang berbeda baik dari segi jumlah stage, jumlah tree, model segi empat dari fitur rectangle maupun nilai treshold nya. Stage
melambangkan banyaknya tingkatan dalam cascade of classifier, dalam training ini digunakan 22 tingkatan stage 0 sampai stage 21. Tingkatan ini digunakan untuk
mengurangi jumlah sub window citra yang perlu diperiksa. Di tingkatan pertama dilakukan pengklasifikasian terhadap seluruh sub window citra, lalu di tingkatan
kedua dilakukan pengklasifikasian terhadap sub window yang berasal dari hasil pengklarifikasian tingkatan pertama. Maka semakin tinggi tingkatanya semakin
sedikit jumlah sub window yang harus diperiksa. Di tiap tingkatan terdiri dari beberapa tree, biasanya semakin tinggi tingkatan maka tree yang terdapat
didalamnya pun semakin banyak. Pada stage 0 terdapat 2 tree dan pada stage 21 terdapat 212 tree.
Pencarian Fitur Wajah
Setelah file training dipanggil, training dilakukan terlebih dahulu untuk
mendapatkan suatu pohon keputusan dengan nama cascade classifier sebagai
penentu apakah ada obyek atau tidak dalam tiap frame yang di proses. Pencarian posisi wajah dilakukan dengan cara mencari fitur-fitur yang memiliki tingkat
pembeda yang tinggi. Hal ini dilakukan dengan mengevaluasi setiap fitur terhadap data latih dengan menggunakan nilai dari fitur tersebut. Fitur yang memiliki batas
terbesar antara wajah dan bukan wajah dianggap sebagai fitur terbaik. Contoh dari pencarian fitur wajah dapat dilihat pada Gambar 3.6.
Gambar 3.6 Contoh pencarian fitur wajah dengan haar cascade
Haar-like feature mempunyai sifat learner dan classifier yang lemah. Jika ingin mendapatkan hasil yang lebih akurat maka harus dilakukan proses haar-like
feature secara massal, semakin banyak proses haar-like feature yang dilakukan maka akan semakin akurat hasil yang dicapai. Oleh karena itu pemrosesan haar-
like feature yang banyak terebut diorganisir di dalam cascade classifier.
Pada Gambar 3.7 adalah alur kerja dari klasifikasi bertingkat.
Gambar 3.7 Proses Cascade Classifier
Pada klasifikasi filter pertama, tiap subcitra akan diklasifikasi menggunakan satu fitur. Jika hasil nilai fitur dari filter tidak memenuhi kriteria yang diinginkan,
hasil ditolak. Algoritma kemudian bergerak ke sub window selanjutnya dan menghitung nilai fitur kembali. Jika didapat hasil sesuai dengan threshold yang
diinginkan, maka dilanjutkan ke tahap filter selanjutnya. Hingga jumlah sub window yang lolos klasifikasi pun akan berkurang hingga mendekati citra yang ada
pada sampel. Seperti pada Gambar 3.7, dapat dijelaskan secara keseluruhan proses
cascade classifier-nya sebagai berikut : 1.
Filter pertama first classifier 1 fitur
Detection rate : 100, false positive rate : 50
2. Filter kedua second classifier
5 fitur Detection rate : 100, false positive rate : 80
3. Filter ketiga dan keempat third and fourth classifiers
20 fitur Pencarian fitur wajah sendiri dalam library EmguCV telah dideklarasi
dalam class HaarCascade. Fungsi pencarian fitur wajah dalam Class HaarCascade dari library EmguCV adalah sebagai berikut:
public DetectHaarCascade imagegray
, haarCascade,
scaleFactor ,
minNeighbors ,
HAAR_DETECTION_TYPE, minSize, maxSize
Fungsi DetectHaarCascade akan memberikan nilai balikan berupa array citra. yaitu array khusus pada library EmguCV untuk menyimpan array hasil deteksi
objek. imagegray merupakan citra grayscale yang akan dideteksi, dimana citra ini adalah citra hasil dari proses tahap kamera. haarCascade adalah file training yang
telah dipanggil pada tahap sebelumnya untuk menguji deteksi wajah. ScaleFactor adalah faktor skala ketika pencarian fitur wajah, dimana jika slaka diisi 1.1 maka
akan membuat skala windows lebih besar sebesar 10. minNeighbors adalah jumlah minimum minus 1 dari persegi tetangga yang membentuk sebuah objek.
minSize dan maxSize adalah ukuran minimum dan maksimum dari ukuran aplikasi windows.
HAAR_DETECTION_TYPE adalah tipe-tipe dari pendeteksi Haar Cascade, dimana tipe-tipe tersebut adalah sebagai berikut :
1. DEFAULT
Jenis default di mana tidak ada optimasi dilakukan. Biasanya digunakan ketika mendeteksi objek.
2. DO_CANNY_PRUNING
Jika menggunakan tipe ini, fungsi deteksi akan menggunakan detektor tepi Canny untuk menolak beberapa daerah gambar yang mengandung terlalu
sedikit atau terlalu banyak tepi atau objek yang bukan dicari. Nilai ambang batas tertentu akan disetel untuk deteksi wajah dan dalam hal ini
mempercepat pemangkasan sampai pengolahan citra. 3.
SCALE_IMAGE Untuk setiap faktor skala yang digunakan pada fungsi akan diturunkan skala
gambarnya daripada melakukan zoom fitur koordinat pada cascade classifier.
4. FIND_BIGGEST_OBJECT
Fungsi ini untuk mencari objek terbesar dalam sebuah citra yang dideteksi. 5.
DO_ROUGH_SEARCH Fungsi ini akan aktif ketika fungsi FIND_BIGGEST_OBJECT dipanggil,
sehingga fungsi tidak akan mencari hasil deteksi dari ukuran yang lebih kecil segera setelah menemukan objek yang lebih besar pada skala tertentu.
DO_CANNY_PRUNING merupakan salah satu tipe pendeteksi Haar Cascade, dimana tipe ini menggunakan algoritma deteksi tepi Canny. Detektor tepi
Canny adalah operator deteksi tepi yang menggunakan algoritma multi-tahap untuk mendeteksi berbagai macam tepi dalam gambar. Ini dikembangkan oleh John F.
Canny pada tahun 1986. Operator Canny merupakan pendeteksi tepi hasil pengembangan pendekatan gradien. Dalam algoritma Canny, deteksi tepi
ditemukan dengan melihat maksimum lokal pada gradien citra. Gradien dihitung dengan menggunakan turunan dari filter Gaussian. Dalam algoritma ini digunakan
dua nilai threshold ambang, untuk mendeteksi tepi yang kuat dan tepi yang lemah dan memasukkan tepi yang lemah dalam output hanya jika terhubung pada tepi
yang kuat. Penjelasan algoritma deteksi tepi Canny adalah sebagai berikut :
1. Penghalusan citra dengan filter Gaussian
2. Menghitung besar dan arah gradien untuk turunan parsial
3. Memakai nonmakisma suppression untuk besar gradien
4. Menggunakan double thresholding untuk mendeteksi dan menghubungkan sisi
dari deteksi tepi 5.
Melacak tepi dengan hysteresis: Finalisasi deteksi tepi dengan menekan semua tepi lain yang lemah dan tidak terhubung ke tepi yang kuat
Algoritma Canny bertujuan untuk memenuhi tiga kriteria utama: 1.
Low error rate: deteksi yang baik hanya wujud tepi yang ada 2.
Good localization : jarak antara tepi piksel terdeteksi dan tepi piksel nyata harus diminimalkan
3. Minimal response: satu detektor respons per tepi
Pada library EmguCV, algortima deteksi tepi Canny ini digunakan sebagai tipe deteksi Haar Cascade untuk membuang sejumlah tepi gambar yang bukan
merupakan tepi dari lingkar wajah. Ini membuat pencarian fitur wajah menjadi jauh lebih cepat sehingga wajah akan terdeteksi tanpa harus melakukan pencarian secara
menyeluruh terhadap gambar hasil capture dari webcam. Algortima Canny menggunakan citra grayscale sebagai citra masukan untuk mendeteksi tepi dari
citra. Algoritma Canny yang digunakan pada EmguCV merupakan salah satu
algortima yang diturunkan dari OpenCV. Pada library OpenCV, algoritma Canny yang digunakan disebut Canny Edge Detection.
Pemberian Kotak Wajah Terdeteksi
Pada tahapan ini, class Haar Cascade pada library EmguCV yang telah menghasilkan pola wajah diposisikan pada citra asli secara real-time melalui
webcam. Hasil deteksi wajah yang telah dilakukan pada proses sebelumnya akan ditampilkan pada citra real-time dengan menampilkan sebuah kotak dimana posisi
kotak tersebut adalah hasil deteksi lokasi wajah setelah dilakukan pencarian citra wajah pada tahap sebelumnya. Fungsi DetectHaarCascade yang pada proses
sebelumnya menghasilkan citra array citra akan disimpan ke dalam citra array lain, dimana array citra ini selanjutnya akan dibuat sebuah kotak ke frame-frame hasil
citra dari webcam. Fungsi untuk membuat kotak pada wajah yang telah dideteksi adalah sebagai berikut :
foreach array face in DetectHaarCascade {
frame.Drawface.rect, Color, thickness; }
Array face adalah array citra khusus pada library EmguCV untuk menyimpan array hasil deteksi objek. DetectHaarCascade adalah fungsi pencarian
wajah dari tahap sebelumnya. Fungsi Draw adalah fungsi turunan dari frame yang telah dipanggil pada tahap kamera, fungsi ini akan menggambar kotak pada citra
dari webcam. Fungsi Draw sendiri terdiri dari face.rect, dimana array citra face menghasilkan fungsi rectangle untuk menggambar sebuah kotak untuk objek yang
berhasil terdeteksi, Color sebagai warna kotak, dan thickness sebagai ketebalan garis kotak.
Pada fungsi tersebut, setiap kali frame video dari webcam dideteksi sebagai wajah, maka kotak hasil deteksi akan muncul. Hasil pada proses ini dapat dilihat
pada Gambar 3.8.
Gambar 3.8 Hasil deteksi wajah Estimasi Lokasi dan Posisi Wajah
Pada proses ini aplikasi akan mengestimasi lokasi dan juga posisi dari wajah berdasarkan lokasi hasil deteksi wajah dari proses sebelumnya. Lokasi wajah
ditentukan dari nilai vector x, vector y, panjang dan lebar dari kotak deteksi wajah. Berikut fungsi dari penentuan lokasi kotak deteksi wajah :
foreach array face in DetectHaarCascade {
frame.Drawface.rect, White, 2; int X = face.rect.X;
int Y = face.rect.Y; int height = face.rect.Height;
int width = face.rect.Width; }
Nilai dari setiap vector tersebut dikalkulasi menjadi nilai tengah dimana nilai tengah tersebut akan menjadi posisi dari objek 3 dimensi yang akan
dimunculkan. Berikut adalah fungsi nilai tengah dari vector-vector tersebut :
Point center = new PointX + height 2,Y + width 2;