Fisherface Fisherf ace Pengena Pengenalan lan Wa Wajah jah OpenCV Pengenalan Wajah Wajah Secara umum sistem pengenalan sistem pengenalan citra wajah dibagi yaitu sistem featurewajah dibagi menjadi dua jenis, yaitu sistem featurebased dan sistem dan sistem image-based . Pada sistem pertama digunakan ciri yang diekstraksi dari komponen citra wajah seperti mata, hidung, mulut, dan lain-lain yang kemudian dimodelkan secara geometris hubungan antara ciri-ciri tersebut. Sedangkan pada sistem kedua menggunakan informasi mentah dari piksel dari piksel citra yang kemudian direpresentasikan dalam metode tertentu, misalnya pada Principal pada Principal Component Analysis ( Analysis (PCA) atau transformasi transformasi wavelet yang yang digunakan untuk klasifikasi identitas citra. Penelitian tentang deteksi wajah dan pengenalan dan pengenalan wajah telah wajah telah dilakukan sebelumnya, antara lain dengan menggunakan algoritma Eigenface, Eigenface, dengan distribusi Gaussian dan Gaussian dan Clustering , dengan Support Vector achine, achine, dan dengan metode !tatistic dan !tatistic dan "avelet . Seorang peneliti bernama Alan Brooks pernah mengembangkan sebuah penelitian yang membandingkan dua algoritma yaitu Eigenface yaitu Eigenface dan dan #isherface #isherface.. Penelitian ini difokuskan pada perubahan pose wajah apakah mempengaruhi akurasi pengenalan akurasi pengenalan wajah. wajah. Diberikan database latih berupa foto wajah manusia, kemudian digunakan untuk melatih sebuah sistem pengenalan sistem pengenalan wajah,, setelah proses latihan selesai, diberikan sebuah masukan image yang sebenarnya sama wajah dengan salah satu image wajah pada fase latihan tetapi dengan pose yang berbeda. Sistem juga diharapkan punya sensitifitas minimal terhadap pencahayaan. Sistem dikembangkan dengan dua algoritma yaitu igenface dan !isherface, dan dibandingkan hasilnya. "edua teknik menghasilkan hasil yang memuaskan tetapi ada beberapa perbedaan. Pada igenface kompleksitas komputasi lebih komputasi lebih sederhana daripada !isherface. Dari segi efektifitas karena perubahan pose, !isherface memberikan hasil yang lebih baik, bahkan dengan data yang lebih terbatas. #eknik #eknik igenface juga lebih sensitif terhadap penc ahayaan dibandingkan dengan !isherface.
Proses Pengenalan Wajah $ajah merupakan bagian $ajah b agian dari anggota tubuh manusia. $ajah $ajah memiliki keunikan sehingga setiap wajah memiliki ciri atau karakteristik yang berbeda. %leh karena itu, wajah dapat digunakan sebagai pembeda antara wajah satu dengan wajah yang lainnya. Selain wajah, sidik jari, iris mata, bentuk geometi telapang tangan juga bisa dijadikan pembeda. Secara umum sistem pendeteksian dan pengenalan dan pengenalan wajah di bagi menjadi & proses yaitu proses registrasi dan identifikasi. Proses Registrasi
Pada tahapan registrasi, citra wajah ditangkap (capture (capture)) oleh sebuah alat perekam (webcam) kemudian pada citra tersebut akan dilakukan image preprocessing. 'mage preprocessing adalah pengolahan awal suatu citra. Pada proses ini citra wajah akan dibersihkan dari gangguan seperti
gambar buram, bintik-bintik, kurang cahaya (noise (noise). ). Proses berikutnya akan dilakukan lokalisasi lok alisasi citra. #ujuannya adalah untuk mengetahui lokasi dari citra wajah. #ahapan berikutnya adalah melakukan ekstraksi ciri dari citra wajah yang kemudian akan disimpan ke dalam database. Proses Identifikasi
Pada tahapan identifikasi, proses yang dilakukan hampir sama dengan proses registrasi. edanya adalah pada tahapan ini dilakukan pengukuran kemiripan antara data citra masukan dengan data citra yang sudah disimpan di dalam database. d atabase. al yang cukup sulit dari sistem pendeteksian dan pengenalan wajah adalah bagaimana membuat sebuah sistem pendeteksi dan pengenalan dan pengenalan wajah yang cepat (mendekati waktu nyata) dan memiliki tingkat akurasi yang tinggi. *ntuk mencapai hal tersebut maka perlu dibuat sistem pengenalan sistem pengenalan wajah yang cepat dan tingkat akurasi yang tinggi sehingga wajah dapat dikenali dengan cepat dan tepat.
Metode Fisherface
$ajah adl salah satu ukuran fisiologis yg paling pa ling Fisherface Pengenalan Wajah OpenCV + $ajah mudah sering digunakan unt mem-bedakan indentitas indiidu yg satu dengan yg lainnya. anusia dapat membedakan wajah antara orang yg satu dengan yg lainnya mengingat wajah seseorang dengan cepat mudah. %leh krn itu, face itu, face recognition adl recognition adl salah satu teknologi biometrics yg banyak dipelajari dikembangkan oleh para ahli.
Deteksi Wajah (Face Detection /angkah pertama pd pengenalan pd pengenalan wajah scr wajah scr otomatis adl mendeteksi keberadaan wajah dr gambar masukan. Setelah wajah terdeteksi, tugas feature tugas feature e$traction adl unt memperoleh ciri-ciri dr wajah
gambar buram, bintik-bintik, kurang cahaya (noise (noise). ). Proses berikutnya akan dilakukan lokalisasi lok alisasi citra. #ujuannya adalah untuk mengetahui lokasi dari citra wajah. #ahapan berikutnya adalah melakukan ekstraksi ciri dari citra wajah yang kemudian akan disimpan ke dalam database. Proses Identifikasi
Pada tahapan identifikasi, proses yang dilakukan hampir sama dengan proses registrasi. edanya adalah pada tahapan ini dilakukan pengukuran kemiripan antara data citra masukan dengan data citra yang sudah disimpan di dalam database. d atabase. al yang cukup sulit dari sistem pendeteksian dan pengenalan wajah adalah bagaimana membuat sebuah sistem pendeteksi dan pengenalan dan pengenalan wajah yang cepat (mendekati waktu nyata) dan memiliki tingkat akurasi yang tinggi. *ntuk mencapai hal tersebut maka perlu dibuat sistem pengenalan sistem pengenalan wajah yang cepat dan tingkat akurasi yang tinggi sehingga wajah dapat dikenali dengan cepat dan tepat.
Metode Fisherface
$ajah adl salah satu ukuran fisiologis yg paling pa ling Fisherface Pengenalan Wajah OpenCV + $ajah mudah sering digunakan unt mem-bedakan indentitas indiidu yg satu dengan yg lainnya. anusia dapat membedakan wajah antara orang yg satu dengan yg lainnya mengingat wajah seseorang dengan cepat mudah. %leh krn itu, face itu, face recognition adl recognition adl salah satu teknologi biometrics yg banyak dipelajari dikembangkan oleh para ahli.
Deteksi Wajah (Face Detection /angkah pertama pd pengenalan pd pengenalan wajah scr wajah scr otomatis adl mendeteksi keberadaan wajah dr gambar masukan. Setelah wajah terdeteksi, tugas feature tugas feature e$traction adl unt memperoleh ciri-ciri dr wajah
yg diperlukan pd klasifikasi wajah. ergantung pd tipe pengenalan wajahnya, ciri-ciri yg diperlukan dapat berupa ciri-ciri lokal wajah seperti hidung, mata, mulut, lainnya, maupun ciri-ciri global wajah (seluruh bagian wajah). etode fisherface memakai seluruh bagian wajah sebagai data dlm pengenalannya. !eg"entasi Warna #$lit
Proses yg dilakukan pertama kali pd algoritma deteksi wajah yg digunakan adl membuang sebanyak mungkin bagian bukan wajah dr gambar input. al ini dapat dilakukan dengan memberikan batasan pd nilai intensitas warna (color (color thres-holding thres-holding ) pd gambar input krn pd dasarnya seluruh manusia memiliki range atau cakupan nilai warna (chrominance (chrominance value) value) yg hampir sama unt warna kulitnya. 0ang 0ang membedakannya adl ariasi pd nilai intensitas cahayanya (luminance value). value). Salah satu cara memisahkan nilai intensitas cahaya dr komponen warna gambar masukan adl dengan mentransformasi komponen warna gambar masukan yg adl gambar berwarna (R%B) ke dlm komponen warna &C'Cr ('luminance, 1hrominance-blue, 1hrominance-red). 2ika pd komponen warna 34 masih terdapat informasi mengenai intensitas pencahayaan pd setiap komponen warnanya (3ed, 4reen, lue), unt komponen warna 01b1r, komponen C' Cr adl komponen warna yg bebas dr intensitas cahaya, krn seluruh informasi mengenai cahaya pd gambar disimpan pd komponen 0
etode !isherface Pengenalan !isherface Pengenalan $ajah %p %pen en15 15 Proses Morfologi
asil dr proses segmentasi kulit adl topeng (mask) yg berupa gambar hitam putih (binary image) yg menunjukkan bagian kulit k ulit dr gambar masukan. 6kan tetapi topeng hasil segmentasi kulit masih terdapat noise potongan dr beberapa benda lainnya pd gambar, seperti latar belakang gambar. %leh krn itu, perlu dilakukan beberapa tahapan proses morfologi unt membersihkan gambar dr noise potongan tersebut #eknik morfologi dapat dilakukan unt suatu gambar biner maupun gambar pd leel grayscale
(abu-abu). *ntuk gambar biner, piksel berwarna putih bernilai biner .7. (%8) piksel berwarna hitam bernilai biner .9. (%!!). Proses morfologi unt gamber biner adl proses erosi dilasi. Proses erosi membuang p iksel dr gambar atau ekialen dengan membuat piksel %8 menjadi %!!, yaitu piksel putih yg melekat pd daerah background, sehingga akan menyebabkan piksel putih berkurang luasnya (shrinking) dengan tujuan unt menghilangkan piksel yg adl noise pd topeng. Proses dilasi adl kebalikan dr proses erosi, membuat piksel %!! menjadi %8, sehingga akan menyebabkan piksel putih bertambah luasnya (growing). #ujuan #ujuan dilakukan proses dilasi adl krn saat proses erosi dilakukan pd topeng, daerah yg adl kulit juga ikut mengalami shrinking sehingga perlu dilakukan suatu proses yg mengembalikan daerah tersebut agar bagian wajah nantinya akan terdeteksi dengan benar.
etode !isherface Pengenalan !isherface Pengenalan $ajah %p %pen en15 15 Region Analsis
4ambar topeng hasil proses morfologi akan tetap terdapat bagian bukan wajah yg adl bagian tubuh lainnya seperti tangan bagian bag ian lainnya yg memiliki intensitas warna yg menyerupai intensitas warna kulit. Pada proses region analysis akan dianalisa bag ian-bagian tersebut unt mendapatkan satu bagian yg adl bagian wajah, yaitu dengan menghitung nilai uler dr tiap-tiap bagian yg terdapat pd topeng. 8ilai uler pd gambar biner adl selisih antara region (daerah yg memiliki nilai piksel 7) dengan hole (daerah yg memilki nilai piksel 9) yg ada pd region tersebut. Pada umumnya unt wajah manusia setidaknya akan memiliki satu region tiga buah hole pd region tersebut yg menunjukkan sepasang mata satu mulut
etode !isherface Pengenalan $ajah %p %pen en15 15
)kstraksi Wajah
Setelah didapat satu bagian yg adl wajah, proses selanjutnya adl mengambil (cropping) wajah tersebut dr gambar input dengan ukuran yg sesuai dengan posisi wajah pd gambar topeng mengubah ukurannya menjadi ukuran yg sama dengan ukuran gambar wajah pd training set yg digunakan unt pengenalan wajah
etode !isherface Pengenalan !isherface Pengenalan $ajah %p %pen en15 15
Perhit$ngan PCA Perhitungan P16 dilakukan dengan langkah-langkah sebagai berikut : 7. engambil engambil satu satu set gambar gambar training training kemudian kemudian mentrans mentransforma formasikan sikan setiap setiap gambar gambar tersebut menjadi ektor kolom, sehingga akan didapat satu matriks yg tiap kolomnya mewakili gambar yg berbeda, face space. &. embentuk embentuk aerage aerage face (;), (;), yaitu yaitu nilai rata-r rata-rata ata dr seluruh seluruh gambar gambar wajah pd pd training training set, mengurangi seluruh gambar pd training set terhadap aerage face unt un t mencari deiasinya (<). =. enghitung enghitung matriks matriks koarian koarian (6), yaitu yaitu dengan dengan melakukan operasi operasi perkalian perkalian transpos transposee dr training set yg telah dinormalisasikan. >. enghitung enghitung nilai nilai eigen eigen (? ) ektor ektor eigen (@) (@) dr matrik matrikss koarian. koarian. A. engurutkan engurutkan ektor ektor eigen eigen berdasarkan berdasarkan dengan dengan besarnya besarnya nilai eigen masingmasing-masing masing ektor. B. enghitung enghitung matriks matriks proyeksi proyeksi P16 ($pca) ($pca) yaitu dengan dengan mengalikan mengalikan nilai deiasi deiasi dengan dengan ektor eigen. C. engambil engambil 8-1 komponen komponen $pca $pca yg diperlu-ka diperlu-kan n unt mengkonstr mengkonstruksi uksi fisherf fisherface. ace.
Perhit$ngan F*D
Perhitungan !/D dilakukan dengan langkah-langkah sebagai berikut : 7. entransformasikan training set ke dlm ektor kolom (face space). &. embentuk aerage face (;) dr face space, nilai wajah rata-rata masing-masing kelas (class aerage face) =. elakukan perhitungan matriks sebaran dlm kelas (within-calss scatter-matri) matriks sebaran antar kelas (between-class scatter-matri). >. emproyeksikan matriks sebaran ($S dan) ke dlm matriks proyeksi P16 ($pca). A. enghitung nilai eigen ektor eigen dr matriks sebaran. B. enghitung matriks proyeksi fisher dengan mengurutkan ektor eigen berdasarkan besarnya nilai eigen masing-masing ektor eigen mengambil komponen ektor eigen yg memiliki nilai eigen tidak nol.*ntuk 1 kelas, akan selalu didapat 1-7 ektor eigen yg memiliki nilai eigen tidak nol C. enghitung matriks proyeksi optimal. E. elakukan normalisasi pd matriks proyeksi optimal. F. enghitung bobot tiap fisherface terhadap masing-masing gambar wajah pd training set (face key) dengan memproyeksikan nilai deiasi face space terhadap aerage face ke dlm matriks proyeksi optimal.
#lasifikasi Identitas "lasifikasi identitas yg digunakan adl dengan membandingkan bobot dr masing-masing fisherface pd gambar wajah pd training set gambar wajah masukan dengan menghitung jarak uclidian-nya. /angkah-langkah klasifikasi identitas adl sebagai berikut : 7. engubah gambar wajah masukan menjadi ektor kolom &. enormalisasikan gambar wajah masukan terhadap nilai rata-rata training set (aerage face,;). =. enghitung bobot fisherface pd gambar wajah masukan, yaitu dengan memproyeksikan gambar masukan ke dlm matriks proyeksi optimal ($opt). >. enghitung jarak euclidian (min) antara bobot input bobot training set (*database). A. encari membandingkan jarak minimum (min) dengan satu nilai batas (G). Sebuah wajah dikatakan cocok jika jarak minimumnya lebih kecil dr nilai batas yg diterapkan. Semakin kecil jarak minimum yg diperoleh, semakin besar kesamaan (similarity) gambar
masukan dengan pasangan gambar pd training set. 8ilai batas diperoleh dr hasil percobaan-percobaan hingga ditemukan satu nilai yg memuaskan
Metode Fisherface Pengenalan Wajah Dengan OpenCV "esulitan dlm pembuatan proses face recognition terutama adl k rn kekompleksan dr kondisi wajah, yaitu alam hal kualitas gambar yg ditangkap, dr segi warna, pencahayaan, hingga posisi gambar yg tertangkap, maupun dlm hal peru-bahan geometrinya. %leh krn itu, dlm tulisan ini akan diujikan metode fisherface unt melakukan pengenalan wajah. !ace recognition H pengenalan wajah adl salah satu teknik identifikasi teknologi biometrik dengan memakai wajah indiidu yg bersangkutan sbg parameter utamanya. Secara garis besar proses pengenalan wajah terdiri dr tiga proses utama I7J, yaitu: 7. Deteksi wajah (face detection). &. ktraksi ciriHwajah (faceHfeature etraction). =. Pengenalan wajah (face recognition). wajah dapat dikelompokan ke dlm tiga pendekatan berdasarkan data yg dibutuhkannya I7J, yaitu: 7. Pendekatan holistik. Pada pendekatan holistik, seluruh bagian H ciri-ciri global wajah digunakan sbg data masukan unt pengenalan wajah. 1ontoh: eigenface, fisherface, nearest feature line (8!/), support ector machine (S5). &. Pendekatan feature-based. Pada pendekatan feature-based, wajah terbagi berdasarkan ciri-ciri lokal wajah seperti hidung, mulut, mata, lainnya yg kemudian digunakan sbg data masukan. 1ontoh : idden arko odel Dynamic /ink 6rchitecture. =. Pendekatan hybrid. Pendekatan hybrid memakai seluruh bagian wajah ciri-ciri lokal wajah sbg data masukan. 1ontoh : modular eigenface hybrid local feature.
M)+OD) FI!,)RFAC) Pengenalan wajah yg akan direalisasikan terbagi ke dlm empat modul utama. Diagram blok yg akan direalisasikan terlihat pd 4ambar 7. 4ambar 7. Diagram lok yg akan Direalisasikan Deteksi $ajah (!ace Detection)
Salah satu kunci sukses dlm pengenalan wajah adl deteksi wajah yg akurat krn gambar wajah yg terdeteksi akan sangat mempengaruhi dlm proses pengenalannya I>J. /angkah pertama pd pengenalan wajah scr otomatis adl mendeteksi keberadaan wajah dr gambar masukan. Setelah wajah terdeteksi, tugas feature etraction adl unt memperoleh ciri-ciri dr wajah yang diperlukan pd klasifikasi wajah. ergantung pd tipe pengen alan wajahnya, ciri-ciri yg diperlukan dapat berupa ciri-ciri lokal wajah seperti hidung, mata, mulut, lainnya, maupun ciri-ciri global wajah (seluruh bagian wajah). etode fisherface memakai seluruh bagian wajah sbg data dlm pengenalannya. Segmentasi $arna "ulit Proses yg dilakukan pertama kali pd algoritma deteksi wajah yg digunakan adl membuang sebanyak mungkin bagian bukan wajah dr gambar input. al ini dapat dilakukan dengan memberikan batasan pd nilai intensitas warna (color thres-holding) pd gambar input krn pd dasarnya seluruh manusia memiliki range H cakupan nilai warna (chrominance alue) yg hampir sama unt warna kulitnya. 0ang membedakannya adl ariasi pd nilai intensitas cahayanya (luminance alue) I=J. 6kibatnya, jika nilai chrominance luminance dapat dipisahkan dr gambar kemudian dilakukan pembatasan nilai intensitas pd komponen chrominance, akan didapat bagian yg adl bagian berwarna seperti kulit (skin like-hood) dr gambar input.
Pengenalan wajah adl adl suatu pengenalan pola (pattern recognition) yg khusus unt kasus wajah. 'ni dapat dideskripsikan sbg pengklasifikasian suatu wajah apakah dikenali (known) H tidak dikenali (unknown), dimana setelah dibandingkan kemudian disimpan scr tersendiri. eberapa pendekatan unt pengenalan obyek grafika komputer didasarkan scr langsung pd citra-citra tanpa penggunaan model =D. anyak dr teknik ini tergantung pd suatu representasi citra yg membentuk suatu struktur ruang ektor, dlm prinsip ini memerlukan korespondensi yg pada t. Pendekatan appearance-based kebanyakan digunakan unt pengenalan wajah. Pada metode ini, model wajah dipelajari melalui proses training dengan memakai satu set data pelatihan yg berisi contoh-contoh wajah. "emudian hasil training ini digunakan unt pengenalan wajah. Secara umum metode ini memakai teknik-teknik analisis statistik mesin pembelajaran (machine learning) unt menemukan karakteristik-karakteristik yg sesuai dr wajah maupun non-wajah. 0ang termasuk dlm kelompok ini adl : igenfaces, distribution-based clustering, jaringan syaraf tiruan, S5 (Support 5ectormachine), dll. #iga pengklasifikasi linear appearance-based adl P16, '16 and /D6. #iap pengklasifikasi mempunyai representasi (ector basis) tersendiri dr suatu ruang space ector wajah dengan dimensi tinggi didasarkan pd titik pandang scr statistik yg berbeda. elalui proyeksi ector wajah ke ector basis, koefisien proyeksi digunakan sbg representasi fitur tiap citra wajah. 8ilai matching diantara citra wajah tes pelatihan dih itung (sebagai contoh sudut nilai cosine) diantara ector-ector koefisien. "etiga representasi dapat dianggap sbg suatu transformasi linier dr ector citra asli ke suatu ector fitur proyeksi.
Proyeksi citra ke dlm ruang eigen (eigenspace) adl suatu prosedur standar unt beberapa algoritma pengenalan obyek yg didasarkan pd tampilan (appearance-based). Penelitian dasar tentang proyeksi eigenspace pertama kali dilakukan oleh ichael "irby yg memperkenalkan tentang ide karakteristikasi dimensi rendah suatu wajah. #urk and Pentland memakai proyeksi eigenspace unt pengenalan wajah. igenspace dihitung melalui identifikasi eigenector dr matriks koariansi yg diturunkan dr suatu himpunan citra pelatihan (#urk and Pentland,7FF7) Proyeksi ruang eigen (eigenspace) juga dikenal sbg "arhunen-/oee ("/) H juga dinamakan dengan Principal 1omponent 6nalysis (P16). 6lgoritma eigenface memanfaatkan Principal 1omponent 6nalysis (P16) unt mereduksi dimensinya guna menemukan ector-ektor yg mempunyai nilai terbaik unt distribusi citra wajah didlm ruang citra masukan. 5ektor ini mendefinsikan subruang dr citra-citra wajah subruang tersebut dinamakan ruang wajah. Semua wajah-wajah dlm himpunan pelatihan diproyeksikan ke dlm ruang wajah unt menemukan suatu himpunan bobot-bobot yg mendeskripsikan kontribusi dr tiap ector dlm ruang wajah. *ntuk identifikasi suatu citra uji, membutuhkan proyeksi suatu citra ke dlm ruang wajah unt menentukan korespondensi kumpulan bobot-bobot. Dengan membandingkan kumpulan bobot-bobot wajah dlm training set, Pengujian citra dapat diidentifikasi. Prosedur kunci dlm P16 didasarkan pd tranformasi "arhumen-/oee. 2ika elemen-elemen citra dianggap sbg ariable-ariabel random, citra mungkin dilihat sbg sample suatu proses stokastik. 'de utama principal component analysis adl menemukan ektor dengan nilai terbaik unt distribusi citra wajah dlm seluruh ruang citra. 5ektor-ektor ini mendefinisikan subruang citra wajah H biasa disebut dengan nama ruang wajah. #iap ektor dengan panjang 8&, mendsikripsikan citra dengan ukuran 8 8, yg adl suatu kombinasi linier dr citra wajah asli
Contoh Progra" Fisherface Pengenalan Wajah OpenCV Fisherface $nt #lasifikasi -enis #ela"in
etode fisherface mencapai tingkat pengenalan FEK dlm cross-alidasi subjek-independen. Sebuah subjek-independen meansimages lintas alidasi dr orang yg diuji tidak pernah digunakan unt belajar model. Dan bisa 6nda percaya: 6nda hanya dapat memakai facerecLfisherfaces demo, yg inlcuded %pen15. "ode sumber unt aplikasi demo ini juga tersedia dlm folder src dokumentasi ini:
!o$rce Code C.. #include "opencv2/core.hpp" #include "opencv2/contrib.hpp" #include "opencv2/highgui.hpp"
#include
#include #include using namespace cv; using namespace std; static Mat norm_0_2!nputrra$ _src% & Mat src ' _src.getMat!%;
// Membuat ( mengembali)an citra normalisasi* Mat dst; s+itch!src.channels!%% & case ,* cv**normali-e!_src dst 0 2 1M_MM 34_563,%; brea); case 7* cv**normali-e!_src dst 0 2 1M_MM 34_5637%; brea); default* src.cop$8o!dst%; brea); 9 return dst;
9 static void read_csv!const string( filename vector( images vector( labels char separator ' :;:% & std**ifstream file!filename.c_str!% ifstream**in%; if !file% & string error_message ' "o valid input file +as given please chec) the given filename."; 34_rror!34_=tsadrg error_message%; 9 string line path classlabel;
+hile !getline!file line%% & stringstream liness!line%; getline!liness path separator%; getline!liness classlabel%; if!path.empt$!% (( classlabel.empt$!%% & images.push_bac)!imread!path 0%%; labels.push_bac)!atoi!classlabel.c_str!%%%; 9 9
9 int main!int argc const char ?argv@A% & // Beri)sa argumen baris perintah $g sah penggunaan ceta) Ci)a tida) ada argumen $g diberi)an. if !argc < 2% & cout << "usage* " << argv@0A << " " << endl; eDit!,%; 9 string output_folder;
if !argc '' 7% & output_folder ' string!argv@2A%; 9 // Eapat)an path )e 3=4 nda. string fn_csv ' string!argv@,A%; // 4e)tor ini memegang gambar ( label $g sesuai. vector images; vector labels; // aca di data. Fal ini dapat gagal Ci)a tida) ada nama file input $g valid diberi)an. tr$ & read_csv!fn_csv images labels%; 9 catch !cv**Dception( e% & cerr << "rror opening file G"" << fn_csv << "G". 1eason* " << e.msg << endl; eDit!,%; 9 // Heluar Ci)a tida) ada cu)up gambar unt demo ini. if!images.si-e!% <' ,% & string error_message ' "8his demo needs at least 2 images to +or). Blease add more images to $our data set"; 34_rror!34_=tsrror error_message%; 9 // Eapat)an )etinggian dr gambar pertama. Hita a)an membutuh)an nanti ini dlm )ode unt membentu) )embali gambar )e u)uran aslin$a* int height ' [email protected]+s;
Mat test=ample ' [email protected]!% I ,A; int testJabel ' [email protected]!% I ,A; images.pop_bac)!%; labels.pop_bac)!%; // // // // // // // // // // // // // // // //
aris beri)ut membuat model fisherface unt Bengenalan +aCah ( melatihn$a dengan gambar dan Jabel membaca dr file 3=4 $g diberi)an. Ki)a nda han$a ingin men$impan ,0 fisherface )emudian memanggil Metode pabri) seperti ini* cv**createLisherLace1ecogni-er!,0%; amun tida) berguna unt membuang fisherface mohon 6ntu) =elalu mencoba unt mema)ai _all_ tersedia fisherface unt Hlasifi)asi. Ki)a nda ingin membuat Lace1ecogni-er dengan atas )eperca$aan !misaln$a ,270% ( mema)ai _all_ Lisherface )emudian men$ebutn$a dengan*
// //
cv**createLisherLace1ecogni-er!0 ,27.0%;
Btr model ' createLisherLace1ecogni-er!%; modelI>train!images labels%; // aris beri)ut mempredi)si label $g diberi)an // test image* int predictedJabel ' modelI>predict!test=ample%; // // 6ntu) mendapat)an )eperca$aan dr predi)si panggilan model dengan* // // int predictedJabel ' I,; // double confidence ' 0.0; // modelI>predict!test=ample predictedJabel confidence%; // string result_message ' format!"Bredicted class ' d / ctual class ' d." predictedJabel testJabel%; cout << result_message << endl; // eri)ut adl cara unt mendapat)an nilai eigen model igenfaces ini* Mat eigenvalues ' modelI>getMat!"eigenvalues"%; // Ean )ita bisa mela)u)an hal $g sama unt menampil)an 4e)tor igen !baca igenfaces%* Mat N ' modelI>getMat!"eigenvectors"%; // Eapat)an mean sampel dr data pelatihan Mat mean ' modelI>getMat!"mean"%; // Menampil)an / men$impan* if!argc '' 2% & imsho+!"mean" norm_0_2!mean.reshape!, [email protected]+s%%%; 9 else & im+rite!format!"s/mean.png" output_folder.c_str!%% norm_0_2!mean.reshape!, [email protected]+s%%%; 9 // Menampil)an / men$impan pertama paling ,O fisherface* for !int i ' 0; i < min!,O N.cols%; iPP% & string msg ' format!"igenvalue #d ' .f" i eigenvalues.at!i%%; cout << msg << endl; // dapat)an eigenvector #i Mat ev ' N.col!i%.clone!%; // Membentu) )e u)uran aslin$a ( menormal)an )e @0 ... 2A unt imsho+. Mat gra$scale ' norm_0_2!ev.reshape!, height%%; // 8ampil)an gambar ( menerap)an colormap tulang unt penginderaan $g lebih bai). Mat cgra$scale; appl$3olorMap!gra$scale cgra$scale 3J1MB_%;
// Menampil)an / men$impan* if!argc '' 2% & imsho+!format!"fisherface_d" i% cgra$scale%; 9 else & im+rite!format!"s/fisherface_d.png" output_folder.c_str!% i% norm_0_2!cgra$scale%%; 9 9 // Menampil)an / men$impan re)onstru)si gambar di beberapa lang)ah $g telah ditetap)an* for!int num_component ' 0; num_component < min!,O N.cols%; num_componentP P% & // Botong Lisherface dr model* Mat ev ' N.col!num_component%; Mat proCection ' subspaceBroCect!ev mean [email protected]!,,%%; Mat reconstruction ' subspace1econstruct!ev mean proCection%; // Menormal)an hasiln$a* reconstruction ' norm_0_2!reconstruction.reshape!, [email protected]+s%%; // Menampil)an / men$impan* if!argc '' 2% & imsho+!format!"fisherface_reconstruction_d" num_component% reconstruction%; 9 else & im+rite!format!"s/fisherface_reconstruction_d.png" output_folder.c_str!% num_component% reconstruction%; 9 9 // 8ampilan Ci)a )ita tida) menulis )e folder output* if!argc '' 2% & +aitHe$!0%; 9 return 0; 9
Deteksi Wajah Viola -ones -a/a Metode Viola0-ones merupakan metode pendeteksian obyek yang memiliki tingkat keakuratan yang cukup tinggi yaitu sekitar F=,C K dengan kecepatan 7A kali lebih cepat daripada detektor %owley &aluja-'anade dan kurang lebih B99 kali lebih cepat daripada detektor !chneiderman 'anade. etode ini, diusulkan oleh Paul Viola dan ichael (ones pada tahun &997. etode 5iola-2ones menggabungkan empat kunci utama yaitu )aar *ike #eature, +ntegral +mage, Adaboost learning dan Cascade classifier .
,aar *ike Feat$re yaitu selisih dari jumlah piksel dari daerah di da lam persegi panjang. 1ontoh aar /ike !eature disajikan dalam 4ambar berikut :
1ontoh aar /ike !eature Deteksi $ajah 5iola 2ones 2aa 8ilai )aar *ike #eature diperoleh dari selisih jumlah nilai piksel daerah gelap dengan jumlah nilai piksel daerah terang : ! ( aar ) M N ! Dimana :
- N ! black
white
! ( aar ) M 8ilai fitur total N ! white M 8ilai fitur pada daerah terang N ! black M 8ilai fitur pada daerah gelap Integral I"age yaitu suatu teknik untuk menghitung nilai fitur secara cepat dengan mengubah nilai dari setiap piksel menjadi suatu representasi citra baru, sebagaimana disajikan dalam 4ambar berikut :
'ntegral image (,y) Deteksi $ajah 5iola 2ones 2aa erdasarkan 4ambar diatas, citra integral pada titik (,y) (ii(,y)) dapat dicari menggunakan persamaan
"eterangan : ii(,y) M 1itra integral pada lokasi ,y i(O,yO) M nilai piksel pada citra asli
Perhitungan nilai dari suatu fitur dapat dilakukan secara cepat dengan menghitung nilai citra integral pada empat buah titik sebagaimana disajikan dalam 4ambar berikut :
Perhitungan 8ilai !itur Deteksi $ajah 5iola 2ones 2aa 2ika nilai integral image titik 7 adalah 6, titik & adalah 6, titik = adalah 61, dan di titiki > adalah 61D, maka jumlah piksel di daerah D dapat diketahui d engan cara > 7 - ( & = ) Algorit"a Ada'oost learning , digunakan untuk meningkatkan kinerja klasifikasi dengan pembelajaran sederhana untuk menggabungkan banyak classifier lemah menjadi satu classifier kuat. 1lassifier lemah adalah suatu jawaban benar dengan tingkat kebenaran yang kurang akurat. Sebuah classifier lemah dinyatakan:
"eterangan : h j() adalah klasifikasi lemah P j adalah parity ke j G j adalah threshold ke j adalah dimensi sub image misalnya &>&>. /angkah-langkah untuk mendapatkan sebuah classifier kuat dinyatakan dalam suatu algoritma sebagai berikut : 7. Diberikan contoh gambar (Q7, 07) , ... (Qn, 0n) dimana 0i M 9 untuk contoh positif dan 0i M 7 untuk contoh negatif &. 'nisialisasi bobot R
m dan l adalah jumlah negatif dan positif. =. *ntuk t M 7 , ... , #
enormalkan bobot sehingga wt adalah distribusi probabilitas
*ntuk setiap fitur, j melatih classifier h j , untuk setiap fitur tunggal. "esalahan ( ∈ j) diealuasi dengan bobot wt
Pilih classifier ht dengan eror terkecil dimana ei M 9 untuk i adalah klaifikasi benar, dan ei M 7 untuk yang lain. Perbaharui bobot :
Dimana :
Didapatkan sebuah 1lassifier kuat yaitu
dimana
1ascade classifier adalah sebuah metode untuk mengkombinasikan classifier yang kompleks dalam sebuah struktur bertingkat yang dapat meningkatkan kecepatan pendeteksian obyek dengan memfokuskan pada daerah citra yang berpeluang saja. Struktur cascade >=lassifier disajikan 4ambar berikut :
1ascade 1lasifier Deteksi $ajah 5iola 2ones 2aa Di asumsikan suatu sub image di ealuasi oleh classifier pertama dan berhasil melewati classifier tersebut, hal ini mengindikasikan sub image berpotensi terkandung obyek dan dilanjutkan pada classifier ke dua sampai dengan ke-n, jika berhasil melewati keseluruhan classifier, maka disimpulkan terdapat obyek yang dideteksi. 2ika tidak, proses ealuasi tidak dilanjutkan ke classifier berikutnya dan disimpulkan tidak terdapat obyek.
CO1+O, PRO%RAM -AVA 2 Viola -ones erikut adalah contoh implementasi program metode 5iola 2ones dengan menggunakan bahasa pemrograman 2aa. !o$rce Code -a/a pac)age CviolaCones; import Cava.a+t.1ectangle; import Cava.a+t.image.ufferedmage; import Cava.a+t.Boint; import Cava.io.?; import org.Cdom.?; import org.Cdom.input.?; import org.Cdom.filter.?; import Cava.util.rra$Jist; import Cava.util.rra$s; import Cava.util.Jin)edJist; import Cava.util.Jist; import Cava.util.terator; import Cava.util.=canner; import CavaD.imageio.mage; import CavaD.s+ing.KLrame;
public class Eetector & Jist<=tage> stages; Boint si-e; public Eetector!=tring filename% thro+s Cava.io.LileotLoundDception& this!ne+ Lilenput=tream!filename%%; 9 public Eetector!nput=tream input% & org.Cdom.Eocument document'null; lement racine;
stages'ne+ Jin)edJist<=tage>!%; =uilder sDb ' ne+ =uilder!%; tr$ & document ' sDb.build!input%; 9 catch!Dception e%&e.print=tac)8race!%;9 racine ' !lement% document.get1ootlement!%.get3hildren!%.get!0%; =canner scanner ' ne+ =canner!racine.get3hild!"si-e"%.get8eDt!%%; si-e ' ne+ Boint!scanner.neDtnt!%scanner.neDtnt!%%; terator it'racine.get3hild!"stages"%.get3hildren!"_"%.iterator!%; +hile!it.haseDt!%% & lement stage'!lement%it.neDt!%; float thres'Lloat.parseLloat!stage.get3hild!"stage_threshold"%.get8eDt!%%; terator it2'stage.get3hild!"trees"%.get3hildren!"_"%.iterator!%; =tage st'ne+ =tage!thres%; +hile!it2.haseDt!%% & lement tree ' !!lement%it2.neDt!%%; 8ree t ' ne+ 8ree!%; terator itQ ' tree.get3hildren!"_"%.iterator!%; +hile!itQ.haseDt!%% & lement feature'!lement% itQ.neDt!%; float thres2'Lloat.parseLloat!feature.get3hild!"threshold"%.get8eDt!%%; int left_node'I,; float left_val ' 0; boolean has_left_val 'false; int right_node'I,; float right_val ' 0; boolean has_right_val 'false; lement e; if!!e'feature.get3hild!"left_val"%%'null% & left_val ' Lloat.parseLloat!e.get8eDt!%%; has_left_val'true; 9 else & left_node ' nteger.parsent!feature.get3hild!"left_node"%.get8eDt!%%; has_left_val'false; 9 if!!e'feature.get3hild!"right_val"%%'null% & right_val ' Lloat.parseLloat!e.get8eDt!%%; has_right_val'true; 9 else & right_node ' nteger.parsent!feature.get3hild!"right_node"%.get8eDt!%%;
has_right_val'false; 9 Leature f ' ne+ Leature!thres2left_valleft_nodehas_left_valright_valright_nodehas_right_ valsi-e%; terator it7'feature.get3hild!"feature"%.get3hild!"rects"%.get3hildren!"_"%.iterator!%; +hile!it7.haseDt!%% & =tring s ' !!lement% it7.neDt!%%.get8eDt!%.trim!%; 1ect r ' 1ect.from=tring!s%; f.add!r%; 9 t.addLeature!f%; 9 st.add8ree!t%; 9 stages.add!st%; 9 9 public Jist getLaces!=tring filename float base=cale float scale_incfloat increment int min_neighborsboolean do3ann$Bruning% thro+s Cava.io.LileotLoundDception Cava.io.Dception& return getLaces!ne+ Lilenput=tream!filename% base=cale scale_inc increment min_neighbors do3ann$Bruning%; 9 public Jist getLaces!nput=tream input float base=cale float scale_incfloat increment int min_neighborsboolean do3ann$Bruning% thro+s Cava.io.LileotLoundDception Cava.io.Dception& return getLaces!mage.read!input% base=cale scale_inc increment min_neighbors do3ann$Bruning%; 9 public Jist getLaces!ufferedmage image float base=cale float scale_incfloat increment int min_neighborsboolean do3ann$Bruning% & Jist<1ectangle> ret'ne+ rra$Jist<1ectangle>!%; int +idth'image.getNidth!%; int height'image.getFeight!%; float maD=cale ' !Math.min!!+idthP0.f%/si-e.D!heightP0.0f%/si-e.$%%; int@A@A gra$mage'ne+ int@+idthA@heightA; int@A@A img ' ne+ int@+idthA@heightA; int@A@A sRuares'ne+ int@+idthA@heightA; for!int i'0;i<+idth;iPP% & int col'0; int col2'0; for!int C'0;C> ,O; int green ' !c ( 0D0000ff00% >> 5; int blue ' c ( 0D000000ff; int value'!70?red PT?green P,,?blue%/,00; img@iA@CA'value; gra$mage@iA@CA'!i>0Ugra$mage@iI,A@CA*0%PcolPvalue; sRuares@iA@CA'!i>0UsRuares@iI,A@CA*0%Pcol2Pvalue?value;
colP'value; col2P'value?value;
9 9 int@A@A cann$ ' null; if!do3ann$Bruning% cann$ ' getntegral3ann$!img%; for!float scale'base=cale;scale,00% continue; 9 boolean pass'true; int )'0; for!=tage s*stages% & if!s.pass!gra$magesRuaresiCscale%% &pass'false; brea);9 )PP;
9 if!pass% ret.add!ne+ 1ectangle!iCsi-esi-e%%; 9 9 9 return merge!retmin_neighbors%;
9 public int@A@A getntegral3ann$!int@A@A gra$mage% & int@A@A cann$ ' ne+ int@gra$mage.lengthA@gra$[email protected]; for!int i'2;i
sumP'?gra$mage@iP0A@CI2A; sumP',2?gra$mage@iP0A@CI,A; sumP',?gra$mage@iP0A@CP0A; sumP',2?gra$mage@iP0A@CP,A; sumP'?gra$mage@iP0A@CP2A; sumP'Q?gra$mage@iP,A@CI2A; sumP'T?gra$mage@iP,A@CI,A; sumP',2?gra$mage@iP,A@CP0A; sumP'T?gra$mage@iP,A@CP,A; sumP'Q?gra$mage@iP,A@CP2A; sumP'2?gra$mage@iP2A@CI2A; sumP'Q?gra$mage@iP2A@CI,A; sumP'?gra$mage@iP2A@CP0A; sumP'Q?gra$mage@iP2A@CP,A; sumP'2?gra$mage@iP2A@CP2A; cann$@iA@CA'sum/,T;
9 int@A@A grad ' ne+ int@gra$mage.lengthA@gra$[email protected]; for!int i',;i0Ucann$@iI,A@CA*0%PcolPvalue; colP'value; 9 9 return cann$; 9 public Jist merge!Jist rects int min_neighbors% & Jist retour'ne+ Jin)edJist!%; int@A ret'ne+ [email protected]!%A; int nb_classes'0; for!int i'0;i
if!found% & ret@iA'nb_classes; nb_classesPP; 9 9 //=$stem.out.println!rra$s.to=tring!ret%%; int@A neighbors'ne+ int@nb_classesA; 1ectangle@A rect'ne+ 1ectangle@nb_classesA; for!int i'0;i' min_neighbors% & 1ectangle r'ne+ 1ectangle!0000%; r.D ' [email protected]?2 P n%/!2?n%; r.$ ' !rect@iA.$?2 P n%/!2?n%; r.+idth ' !rect@iA.+idth?2 P n%/!2?n%; r.height ' [email protected]?2 P n%/!2?n%; retour.add!r%; 9 9 return retour; 9 public boolean eRuals!1ectangle r, 1ectangle r2% & int distance ' !int%!r,.+idth?0.2%; if!r2.D <' r,.D P distance (( r2.D >' r,.D I distance (( r2.$ <' r,.$ P distance (( r2.$ >' r,.$ I distance (( r2.+idth <' !int%! r,.+idth ? ,.2 % (( !int%! r2.+idth ? ,.2 % >' r,.+idth% return true;
if!r,.D>'r2.D((r,.DPr,.+idth<'r2.DPr2.+idth((r,.$>'r2.$((r,.$Pr,.height<'r2.$P r2.height% return true; return false; 9 9
Algorit"a ,aar Cascade Classifier
OpenCV memakai suatu tipe face detector yg disebut ,aar0cascade classifier . 2ika terbisa suatu image (bisa dr file Hlie ideo), face detector akan melakukan proses pengujian tiap lokasi image mengklasifikasinya sbg wajahT or bukan wajahT. "lasifikasi wajah ini memakai suatu pemisalan skala yg tetap, misalnya A9UA9 piel. 2ika wajah pd image lebih besar or lebih kecil dr piel tersebut, classifier terus menerus jalan beberapa kali, unt mencari wajah pd gambar tersebut. Classifier memakai data yg disimpan pd file Q/ unt memutuskan bagaimana mengklasifikasi tiap lokasi image. ,penCV memakai > data Q/ unt deteksi wajah depan, satu unt wajah profile. #ermasuk juga = file Q/ unt bukan wajah: satu unt mendeteksi badan secara penuh, satu unt badan bagian atas, satu unt badan bagian bawah. "ita harus memberitahukan (mendeklarasikan) letak dr classifier yg dipakai. Salah satunya bernama haarcascadefrontalfacedefault.$ml.
Deteksi $ajah 6lgoritma aar 1ascade 1lassifier
,aar0*ike Feat$re Secara umum, )aar-*ike #eature dipakai dlm mendeteksi objek pd image digital. 8ama aar merujuk pd suatu fungsi matematika ( )aar "avelet ) yg berbentuk kotak, prinsipnya sama seperti pd fungsi #ourier . 6walnya pengolahan gambar hanya dng melihat dr nilai 34 setiap piel, namun metoda ini ternyata tidaklah efektif. Viola / (ones lalu mengembangkannya sehingga terbentuk )aar-*ike feature. aar-like feature memproses gambar dlm kotak-kotak, dimana dlm satu kotak terbisa be berapa piel. Per kotak itu pun lalu di-proses dibisakan perbedaan nilai (threshold ) yg menandakan daerah gelap terang. 8ilai V nilai inilah yg nantinya dijadikan dasar dlm image processing . /alu unt gambar bergerak(video), perhitungan penjumlahan piel terjadi secara terus V menerus membutuhkan waktu yg lama. %leh sebab itu, penjumlahan diganti dng integral sehingga dibisakan hasil lebih cepat. asil deteksi dr )aar-*ike kurang akurat jika hanya memakai satu fungsi saja sehingga biasanya dipakai beberapa fungsi sekaligus (massal). makin banyak fungsi yg dipakai maka hasilnya akan makin akurat. Pemrosesan )aar-*ike feature yg banyak tersebut diorganisir or diatur di dlm classifier cascade. asil deteksi aar-like !eature kurang akurat jika hanya memakai satu fungsi saja. makin tinggi tingkatan filter pendeteksian maka makin tepat pula suatu obyek dideteksi akan tetapi akan makin lama proses pendeteksiannya. Pemrosesan aar-like feature yg ban yak tersebut diatur dlm classifier cascade. ,aar0Wa/elet ($ae M 4elombang) adl gelombang persegi (interval gelap interval terang ) yg lalu dibandingkan nilai rata-rata piel keduanya. bila perbandingan nilai rata-rata intensitas tersebut berada di atas threshold (ambang batas), maka disebut memenuhi syarat fitur aar. unt gambar bergerak seperti ideo, proses ini dikerjakan secara diskrit dng men cuplik ideo pd frame rate tertentu. acam-macam ariasi aar-like feature ditunjukkan pd gambar = sbg berikut (Paani, Delgadoa, !rangia, &979):
erbagai ariasi persegi aar dng obot Standar Persegi Panjang Deteksi $ajah 6lgoritma aar 1ascade 1lassifier "eterangan gambar : •
a, b : !itur aar yg diusulkan Papageogiou dkk.
•
c : !itur aar yg diusulkan 5iola 2ames
•
d, e, f : 5ariasi fitur aar yg diusulkan /einhardt
•
g, h : Penguraian /ietal terhadap !itur aar-like
•
i : !itur aar-like 5iola 2ames unt menangkap struktur diagonal dlm penampilan obyek
Perhitungan nilai fitur 4ambar = di atas ditunjukkan pd 4ambar formula sbg berikut:
!itur Persegi aar-like Deteksi $ajah 6lgoritma aar 1ascade 1lassifier 8ilai!itur(6!) M 2umlah8ilaiPiel(6D1)-2umlah8ilaiPiel(1D!) bila 0ilai#itur (ABF)) punya nilai di atas threshold maka disebut memenuhi syarat. Seperti dijelaskan pd gambar &, bila suatu fitur disebut tidak memenuhi syarat, maka area 6! tidak terbisa obyek yg dideteksi area perseginya berpindah lokasi akan tetapi jika p ersegi 6! memenuhi fitur, maka aturan fitur berikutnya dikerjakan. 2ika semua syarat fitur dipenuhi disebut pd persegi 6! disebut terbisa obyek. Deteksi $ajah 6lgoritma aar 1ascade 1lassifier Integral i"age
suatu citra digital punya komponen nilai 34 (kombinasi dr warna merah, hijau biru). dr n ilai 34 tersebut bisa diketahui nilai grayscale (derajat keabu-abuan) yg dihitung memakai formula (&) sbg berikut: 4rayscaleLpiel M 9.&FEF3 9.AEC94 9.77>9 Sebagai contoh suatu piel punya kombinasi warna 3M799, M799 4M799 maka nilai grayscale menurut formula & di atas sama dng FF.FF. Proses pendeteksian obyek ditunjukkan pd diagram alir di 4ambar sbg berikut:
Deteksi $ajah 6lgoritma aar 1ascade 1lassifier Pertama, ditentukan terlebih dahulu area yg akan dideteksi apakah terbisa obyek or tidak. Proses berikutnya adalah melakukan pendeteksian obyek memakai )aar Cascade Clasifier dng langkah-langkah yg akan dijelaskan nanti Citra integral adalah suatu citra yg nilai tiap piel-nya adl penjumlahan nilai piel atas kirinya. sbg contoh pd gambar A (c) suatu daerah persegi yg akan di-scan memakai persegi gelap terang punya nilai sbg berikut:
Deteksi $ajah 6lgoritma aar 1ascade 1lassifier Proses integral image matriks citra ditentukan memakai formula sbg berikut: s(,y)Mi(,y)s(-7,y)s(,y-7)-s(-7,y-7) Dimana 304 04 adalah piel tetangga dr piel yg akan dihitung 8ilai fitur aar dr area matriks dihitung memakai formula sbg berikut: i(O,yO)Ms(6)s(D)s()-s(1) Sehingga: fitur nilai aar
M (=&&-7B-A)-(>FA-=&-B)(CCB->F-F) M &&
#onsep Pendeteksian Wajah ,penCV face detector memakai metode Paul-Viola ichael (ones yg dipublikasikan pd tahun &997. Pendekatan ini mendeteksi objek dng menggabungkan > konsep : •
!itur rectangular sederhana yg disebut fitur aar
•
'ntegral image unt deteksi fitur yg cepat
•
etode machine learning 6daoost.
suatu pengklasifikasi cascade unt mengkombinasikan banyak fitur secara efisien. !itur yg dipakai Viola / (ones memakai bentuk gelombang )aar . entuk gelombang aar ialah suatu gelombang kotak. pd & dimensi, gelombang kotak ialah pasangan persegi yg bersebelahan, 7 terang 7 gelap. aar ditentukan oleh pengurangan piel rata-rata daerah gelap dr piel ratarata daerah terang. 2ika perbedeaan diatas threshold (diset selama learning), fitur tersebut disebut ada. unt menentukan terbisa or tidaknya )aar feature di setiap lokasi image H gambar, 5iola 2ones memakai teknik yg disebut 'ntegral 'mage. * mumnya integral menambahkan unit kecil secara bersamaan. dlm hal ini unit kecil ini disebut dng nilai dr piel. 8ilai dr integral H integral alue pd masing-masing piel adl penjumlahan dr semua piel di atasnya di sebelah kirinya. Dimulai dr kiri atas sampai kanan bawah, image H gambar bisa diintegrasikan sbg operasi matematika per piel.
Deteksi $ajah 6lgoritma aar 1ascade 1lassifier unt memilih fitur aar yg dipakai unt mengubah nilai threshold, 5iola 2ones memakai metode machine-learning yg disebut AdaBoost . 6daoost menggabungkan banyak classifier unt membuat satu classifier. asing-masing classifier menetapkan suatu bobot, gabungan dr bobot inilah yg akan membentuk satu classifier yg kuat. 5iola 2ones menggabungkan serangkaian Ada&oost classifier sbg rantai filter H filter chain. asing-masing filter adl 6daoost classifier yg terpisah dng jumlah weak classifier yg sedikit sama.
Deteksi $ajah 6lgoritma aar 1ascade 1lassifier !ilter pd masing-masing leel dilatih unt mengklasifikasikan gambar yg sebelumnya telah difilter (1raining set adl database dr wajah). Selama penggunaannya, jika satu dr filter-filter tersebut gagal, image region H daerah pd gambar diklasifikasikan sbg ukan $ajahT. Saat filter berhasil melewatkan image region, image region lalu masuk pd filter yg selanjutnya. +mage region yg telah melalui semua filter akan dianggap sbg $ajahT.
Deteksi $ajah 6lgoritma aar 1ascade 1lassifier
CO1+O, PRO%RAM F$ngsi deteksi dan pena"pil !ungsi deteksi dan penampil adalah sebagai berikut: !o$rce Code C.. void detectndEispla$! Mat frame % & std**vector<1ect> cars; cv**Mat frame_gra$; cvt3olor! frame frame_gra$ 34_S12S1W %; eRuali-eFist! frame_gra$ frame_gra$ %; cars_cascade.detectMulti=cale! frame_gra$ cars ,., 2 0V 34_F1_=3J_MS =i-e!70 70%%; for! si-e_t i ' 0; i < cars.si-e!%; iPP % & Boint center! [email protected] P cars@iA.+idth?0. cars@iA.$ P [email protected]?0. %; ellipse! frame center =i-e! cars@iA.+idth?0. [email protected]?0.% 0 0 7O0 =calar! 2 0 2 % Q 5 0 %; 9 cv**imsho+! +indo+_name frame %; 9
Me"'$ka #oneksi Dengan IP Ca"era #ahapan pertama dalam proses deteksi kendaraan adalah membuka koneksi ke 'P camera. Protokol yang digunakan adalah 3eal #ime Streaming Protocol (3#SP). Petikan kode program berikut adalah proses inisialisasi 'P 1amera menggunakan protokol 3#SP: !o$rce Code C.. 3v3apture? capture ' cv3aptureLromLile!"rtsp*//,T2.,O5.,.,/MKBSU X'0(1'7000000"%; if !capture''6JJ% & printf!"video is not o)Gn"%; s$stem!"B6="%; 9 else printf!"video is read$Gn"%; 9
Me"anggil Cascade Classifier agian ini digunakan untuk memanggil file cascade classifier yang telah dideklarasikan pada global ariable. erikut petikan programnya: !o$rce Code C.. if! cars_cascade.load! cars_cascade_name % % & printf!"II!%rror loadingGn"%; s$stem!"B6="%; return I,; 9;
Baca Video !trea" IP Ca"era Proses berikutnya adalah membaca stream dari ideo yang ditangkap oleh 'P 1amera. erikut adalah petikan programnya: !o$rce Code C.. if! capture % & +hile! true % & frame ' cvXuer$Lrame! capture %; if! frame.empt$!% % & detectndEispla$! frame %; 9 else & printf!" II!% 8ida) ada frame $ang terbaca II rea)"%; brea); 9 int c ' +aitHe$!,0%; if! !char%c '' :c: % & brea); 9 9 9
Proses Deteksi Wajah erikut adalah code unt deteksi wajah H face detection : !o$rce Code C.. void detect_faces!plmage? img%
& /? pertamaItama )ita harus mengambil file MJ dng cvJoad!file name memor$ storage name real name% file name diisi)an dng classifier file MJ $g sudah diIde)larasi)an sebelumn$a Ychar? file ' Y3*/pen342.0/data/haarcascades/haarcascade_frontalface_alt.DmlZ;Z memor$ storage name ( real name diberi)an nilai 0 saCa. lalu buat instance dr cvFaar3lassifier3ascade ( panggil fungsi load. ?/ if !cascade% & char? file ' Y3*/pen342.0/data/haarcascades/haarcascade_frontalface_alt.DmlZ; cascade ' !3vFaar3lassifier3ascade?% cvJoad!file 0 0 0%; /? uat suatu memor$ storage )osong. Memor$ ini bersifat eDpandable ( berfungsi unt men$impan hasil dr face detection ?/ storage ' cv3reateMem=torage!0%; 9 /? Cabar)an semua element $g a)an dipa)ai dlm face detection dng cv=eR ?/ 3v=eR? faces ' cvFaarEetectbCects! img /? inputan gambar/video ?/ cascade /? classifier $g sudah dide)larasi)an sebelumn$a ?/ storage /? memor$ storage tempat men$impan hasil detection ?/ ,., /? nilai scale fa)tor. ,., menghasil)an dete)tor be)erCa dng cepat namun a)urasiIn$a rendah ?/ , /? menunCu))an seberapa ban$a) )ota) $g bisa dihasil)an unt diproses lebih lanCut ?/ 34_F1_E_3W_B16S /?34_F1_E_3W_B16S a)an menIs)ip daerah $g dianggap bu)an +aCah ?/ cv=i-e!,0 ,0% /? dimensi u)uran ter)ecil dr +aCah $g mung)in terbentu) ?/ %; int i; /? Ee)larasi)an )ota) sbg daerah hasil detector ?/
for! i ' 0; i < !faces U facesI>total * 0%; iPP % & 3v1ect? r ' !3v1ect?%cvSet=eRlem!faces i%; cv1ectangle! img cvBoint!rI>D rI>$% cvBoint!rI>D P rI>+idth rI>$ P rI>height% 34_1S!2 0 0% , 5 0 %; 9
9
Proses %rascale
Sebelum open15 melakukan pendeteksian wajah kita bisa melakukan beberapa image processing terlebih dahulu. pd bagian ini, kami melakukan image processing yaitu, grayscale, smoothing (filtering), adaptie threshold. memakai fungsi cL34&4360 unt merubah gambar 34 (= channel) menjadi gambar grayscale. Setelah menjadi grayscale maka dikerjakan face detection hasilnya aar-cascade masih data mendeteksi bagian wajah. erikut adalah code-nya : !o$rce Code C.. 3v3apture? capture ' cv3aptureLrom3M! 34_3B_W %; if ! capture % & fprintf! stderr Y111* capture is 6JJ GnZ %; getchar!%; 9 // 3reate a +indo+ in +hich the captured images +ill be presented // =ho+ the image captured from the camera in the +indo+ and repeat
+hile ! , % & // Set one frame plmage? frame ' cvXuer$Lrame! capture %; if ! frame % & fprintf! stderr Y111* frame is null[GnZ %; getchar!%; brea); 9 int percent ' 0;
plmage ?frame2' cv3reatemage ! cv=i-e!!int%!!frameI>+idth?percent%/,00% !int%!!frameI >height?percent%/,00% %frameI>depth frameI>n3hannels %; cv1esi-e!frame frame2%; plmage? gra$ ' cv3reatemage ! cvSet=i-e!frame2% frame2I>depth , %; cv3vt3olor!frame2gra$34_1S2S1W%; detect_faces!gra$%; cv=ho+mage! Ygra$scaleZgra$%; // Eo not release the frame //f =3 )e$ pressed He$'0D,000, under pen34 0.T.\!linuD version% //remove higher bits using E operator if ! !cvNaitHe$!,0% ( 2% '' 2\ % brea); 9 // 1elease the capture device house)eeping cv1elease3apture! (capture %; cvEestro$Nindo+! Ygra$scaleZ %;
Proses !"oothing
memakai fungsi cLSmooth() dng tipe 15-/*3 unt memburamkan gambar. Smoothing filter yg dipakai adalah 4aussian. !ilter 4aussian mengkono lusikan masing-masing titik pd input array dng 4aussian kernel lalu menjumlahkannya unt menghasilkan array output. unt 4aussian blur kali ini, kernel yg dipakai adalah 7A,7A ini menunjukkan lebar tinggi dr filter window. 4ambar menjadi lebih buram namun tetap dlm warna 34. lalu dikerjakanlah face detection, hasilnya bagian wajah masih bisa terdeteksi. erikut adalah code-nya :
!o$rce Code C.. 3v3apture? capture ' cv3aptureLrom3M! 34_3B_W %; if ! capture % & fprintf! stderr Y111* capture is 6JJ GnZ %; getchar!%; 9 // 3reate a +indo+ in +hich the captured images +ill be presented // =ho+ the image captured from the camera in the +indo+ and repeat +hile ! , % & // Set one frame plmage? frame ' cvXuer$Lrame! capture %; plmage? smooth ' cvXuer$Lrame! capture %; if ! frame % & fprintf! stderr Y111* frame is null[GnZ %; getchar!%; brea); 9 cv=mooth! frame smooth 34_S6== , , %; detect_faces!smooth%; cv=ho+mage! YsmoothZsmooth%; // Eo not release the frame //f =3 )e$ pressed He$'0D,000, under pen34 0.T.\!linuD version% //remove higher bits using E operator if ! !cvNaitHe$!,0% ( 2% '' 2\ % brea); 9 // 1elease the capture device house)eeping cv1elease3apture! (capture %; cvEestro$Nindo+! YsmoothZ %;
Proses Adapti/e +hreshold
4ambar 34 mula-mula di-conert terlebih dahulu menjadi grayscale, lalu dng memakai fungsi c6daptie#hreshold maka dikerjakan thresholding unt memisahkan antara bagian gelap terang. 6daptie threshold akan mengatur dirinya sendiri secara otomatis dlm memisahkan daerah gelap terang. Setelah itu dikerjakan face detection. 6walnya agak sulit bagi aarcascade unt menemukan daerah wajah sebab perbedaan kontras antar gelap terang telah menjadi tipis, namun setelah beberapa saat akhinya dibisakan pula. erikut adalah code-nya :
!o$rce Code C.. 3v3apture? capture ' cv3aptureLrom3M! 34_3B_W %; if ! capture % & fprintf! stderr Y111* capture is 6JJ GnZ %; getchar!%; 9 // 3reate a +indo+ in +hich the captured images +ill be presented // =ho+ the image captured from the camera in the +indo+ and repeat +hile ! , % & // Set one frame plmage? frame ' cvXuer$Lrame! capture %; if ! frame % & fprintf! stderr Y111* frame is null[GnZ %; getchar!%; brea); 9 int percent ' 0; plmage ?frame2' cv3reatemage ! cv=i-e!!int%!!frameI>+idth?percent%/,00% !int%!!frameI >height?percent%/,00% %frameI>depth frameI>n3hannels %; plmage? gra$ ' cv3reatemage ! cvSet=i-e!frame2% frame2I>depth , %; plmage? adaptivethreshold ' cv3reatemage ! cvSet=i-e!frame2% frame2I >depth , %; cv1esi-e!frameframe2%; cv3vt3olor!frame2gra$34_1S2S1W%; cvdaptive8hreshold!gra$adaptivethreshold234_EB84_8F1=F_M_ 334_8F1=F_1W\,0%; detect_faces!adaptivethreshold%; cv=ho+mage!Yadaptive thresholdZadaptivethreshold%; // Eo not release the frame //f =3 )e$ pressed He$'0D,000, under pen34 0.T.\!linuD version% //remove higher bits using E operator if ! !cvNaitHe$!,0% ( 2% '' 2\ % brea); 9 // 1elease the capture device house)eeping cv1elease3apture! (capture %;
cvEestro$Nindo+! Yadaptive thresholdZ %;
)igenface OpenCV Pengenalan Wajah Pengenalan Citra Wajah Pengenalan 5ajah adl salah satu teknologi biometrik yg telah banyak diaplikasikan dlm system security selain pengenalan retina mata, pengenalan sidik jari iris mata. dlm aplikasinya sendiri pengenalan wajah memakai sebuah kamera unt menangkap wajah seseorang lalu dibandingkan dng wajah yg sebelumnya telah disimpan di dlm database tertentu. 6da beberapa macam metoda pengenalan wajah yaitu neural network , jaringan syaraf tiruan, neuro fu22y adaptif dan eigenface. Secara khusus dlm tulisan ini metoda yg akan dijelaskan adl metoda eigenface.
Pengenalan wajah manusia dlm gambaran isual bisa di implementasikan ke dlm banyak aplikasi yg mencakup pengenalan wajah dengan memakai metode eigenface, yg mengisyaratkan pemahaman, pengawasan oleh aplikasi tsb. "onsep dari eigenface adl serangkaian eigenvektor yg dipakai unt mengenali wajah manusia dlm suatu computer ision. igenektor berasal dari covariance matri$ yg memiliki distribusi probabilitas yg tinggi dimensi ruang ector unt mengenali kemungkinan sebuah wajah.
)igenface *ntuk membaca karakteristik tubuh manusia semisal pola wajah d iperlukan peralatan pembaca, sebuah basisdata yg bisa menyimpan pola wajah tentu saja algoritma pengenalan wajah yg baik unt proses pengenalan pola wajah. 6lgoritma igenface bisa dipakai unt proses pengenalan pola wajah tsb. igenface adl pendekatan eigenvalue eigenvector . dng pendekatan tsb dilakukan klasifikasi unt mengenali wajah yg di-training dng objek yg telah tersimpan di database. 1itra adl hasil keseluruhan dari suatu sistem perekaman data, yg secara teoritis bisa dikelompokkan jadi & (dua) macam, yaitu citra kontinu citra diskrit (citra digital). Prinsip dasar dari pengenalan wajah adl dng mengutip informasi unik wajah tsb lalu di-encode dibandingkan dng hasil decode yg sebelumnya dilakukan. dlm metode eigenface, decoding dilakukan dng itung eigenector lalu direpresentasikan dlm sebuah matriks yg berukuran besar. 6lgoritma eigenface secara keseluruhan cukup sederhana. +mage atriks (I) direpresentasikan ke dlm sebuah himpunan matriks (647 687 9::6M. 1ari nilai rata-rata (;) pakai unt mengekstraksi eigenector (/) eigenalue (< ) dari himpunan matriks. pakai nilai eigenector unt menbisakan nilai eigenface dari image. 6pabila ada sebuah image baru atautest face (6ne5), proses yg sama juga dilakukan unt image (6ne5), unt mengekstraksi eigenector (/) eigenalue (< ), lalu cari nilai eigenface dari image test face (6ne5). Setelah itu barulah image baru (6ne5) memasuki tahap pengenalan dng memakai metode Euclidean distance.
*ntuk lebih jelasnya, 6lur prosesnya bisa dilihat pada gambar berikut :
igenface %pen15 Pengenalan $ajah 6lgoritma selengkapnya adl : 4: *angkah Perta"a )igenface
enyiapkan data dng membuat suatu himpunan ! yg terdiri dari seluruh training image (W7, W&, X..W). S M YW7, W&, X..WZ 8: *angakah #ed$a )igenface
6mbil nilai tengah atau mean (;)
=: *angkah #etiga )igenface
1ari selisih (>) antara #raining image (6i) dng nilai tengah (;), apabila ditemukan nilainya dibawah nol ganti nilainya dng nol
?: *angkah #ee"pat )igenface
itung nilai matriks koarian (C)
@: *angkah #eli"a )igenface
itung eigenalue (? eigenector (/ 15iM ?i5i
: *angkah #eena" )igenface
Setelah eigenector (/) diperoleh, maka eigenface () bisa dicari dng :
+ahapan Pengenalan 2
7. Sebuah image wajah baru atau test face (6ne5), akan dicoba unt dikenali, pertama terapkan cara pada tahapan pertama perhitungan eigenface unt menbisakan nilai eigenface dari image tsb.
&. pakai metode Euclidean distance unt mencari jarak (distance) terpendek antara nilai eigenface dari training image dlm database dng eigenface image test face.
OpenCV %pen15 adl singkatan dari ,pen !ource Computer Vision. %pen15 adl sebuah software library bebas (open source) yg dipakai unt operasi computer ision machine learning. %pen15 telah dibangun unt menyediakan sebuah infrastruktur umum unt beberapa aplikasi computer ision unt mempercepat penggunaan dari mesin persepsi dlm produk komersial. %pen15 mempermudah bisnis-bisnis unt memanfaatkan memodifikasi kode. /ibrary %pen15 mempunyai lebih dari &A99 algoritma yg telah dioptimalkan dimana meliputi sebuah himpunan menyeluruh dari keduanya yaitu klasik seni beberapa algoritma computer vision machine learning . 6lgoritma-algoritma tsb bisa dipakai unt mendeteksi mengenali wajah, mengidentifikasi obyek, mengklasifikasi tindakan manusia dlm ideo, mengikuti jejak perpindahan obyek, mengekstrak model-model =D obyek, menghasilkan titik awan =D dari kamera stereo, lain sebagainya. %pen15 (%pen 1omputer 5ision) adl sebuah API ( Application Programming +nterface) /ibrary yg sudah sangat familiar pada Pengolahan 1itra 1omputer 5ision. 1omputer 5ision itu sendiri adl salah satu cabang dari idang 'lmu Pengolahan 1itra (+mage Processing ) yg memungkinkan komputer bisa melihat seperti manusia. dng ision tsb komputer bisa mengambil keputusan, melakukan aksi, mengenali terhadap suatu objek. eberapa pengimplementasian dari Computer Vision adl : •
!ace 3ecognition
•
!ace Detection
•
!aceH%bject #racking
•
3oad #racking
•
dll.
%pen15 adl library %pen Source unt 1omputer 5ision unt 1H1, %pen15 didesain unt aplikasi real-time, memiliki fungsi-fungsi akuisisi yg baik unt imageHideo. %pen15 sendiri terdiri dari A library, yaitu : •
CV : untuk algoritma 'mage processing 5ision.
•
M* : unt machine learning library
•
,ighg$i : unt 4*', 'mage 5ideo 'H%.
•
CCOR) : unt struktur data, support Q/ fungsi-fungsi grafis.
•
C/A$3
Contoh Progra" )igenface di OpenCV erikut ini adl contoh penerapan igenface di %pen15 dng memakai bahasa pemrograman 1.
!o$rce Code C.. #include "opencv2/core/core.hpp" #include "opencv2/contrib/contrib.hpp" #include "opencv2/highgui/highgui.hpp" #include #include #include using namespace cv; using namespace std; static Mat norm_0_2!nputrra$ _src% & Mat src ' _src.getMat!%; // Memmbuat ( menormal)an )embali citra gambar Mat dst; s+itch!src.channels!%% & case ,* cv**normali-e!_src dst 0 2 1M_MM 34_563,%; brea); case 7* cv**normali-e!_src dst 0 2 1M_MM 34_5637%;
brea); default* src.cop$8o!dst%; brea); 9 return dst;
9 static void read_csv!const string( filename vector( images vector( labels char separator ' :;:% & std**ifstream file!filename.c_str!% ifstream**in%; if !file% & string error_message ' "nput file tida) valid silah)an ce) nama file $g dipa)ai."; 34_rror!34_=tsadrg error_message%; 9 string line path classlabel; +hile !getline!file line%% & stringstream liness!line%; getline!liness path separator%; getline!liness classlabel%; if!path.empt$!% (( classlabel.empt$!%% & images.push_bac)!imread!path 0%%; labels.push_bac)!atoi!classlabel.c_str!%%%; 9 9 9 int main!int argc const char ?argv@A% &
if !argc < 2% & cout << "usage* " << argv@0A << " " << endl; eDit!,%; 9 string output_folder ' "."; if !argc '' 7% & output_folder ' string!argv@2A%; 9 // Menbisa)an lo)asi 3=4. string fn_csv ' string!argv@,A%; // 4e)tor unt mengambil gambar ( label vector images; vector labels;
// aca gambar dari input file $g diberi)an tr$ & read_csv!fn_csv images labels%; 9 catch !cv**Dception( e% & cerr << "rror opening file G"" << fn_csv << "G". 1eason* " << e.msg << endl; eDit!,%; 9
// Heluar Ci)a tida) gambar unt di proses if!images.si-e!% <' ,% & string error_message ' "8his demo needs at least 2 images to +or). Blease add more images to $our data set"; 34_rror!34_=tsrror error_message%; 9
int height ' [email protected]+s; Mat test=ample ' [email protected]!% I ,A; int testJabel ' [email protected]!% I ,A; images.pop_bac)!%; labels.pop_bac)!%; Btr model ' createigenLace1ecogni-er!%; modelI>train!images labels%; // Mempredi)si / test gambar int predictedJabel ' modelI>predict!test=ample%; // unt menbisa)an model predi)si * int predictedJabel ' I,; double confidence ' 0.0; modelI>predict!test=ample predictedJabel confidence%;
string result_message ' format!"Bredicted class ' d / ctual class ' d." predictedJabel testJabel%; cout << result_message << endl; // eri)ut adl cara unt menbisa)an nilai eigen dari model igenfaces * Mat eigenvalues ' modelI>getMat!"eigenvalues"%; Mat N ' modelI>getMat!"eigenvectors"%; // mbil rata2 sample dari data training Mat mean ' modelI>getMat!"mean"%; if!argc '' 2% & imsho+!"mean" norm_0_2!mean.reshape!, [email protected]+s%%%; 9 else & im+rite!format!"s/mean.png" output_folder.c_str!%% norm_0_2!mean.reshape!, [email protected]+s%%%; 9 // Menampil)an atau men$impan igenfaces* for !int i ' 0; i < min!,0 N.cols%; iPP% & string msg ' format!"igenvalue #d ' .f" i eigenvalues.at!i%%; cout << msg << endl; // mbil eigenvector #i Mat ev ' N.col!i%.clone!%; // Membentu) )embali )e u)uran aslin$a ( menormal)an )e @0...2A. Mat gra$scale ' norm_0_2!ev.reshape!, height%%;
// 8ampil)an gambar ( memproses Ket colormap unt pengindraan $g lebih bai). Mat cgra$scale; appl$3olorMap!gra$scale cgra$scale 3J1MB_K8%; // 8ampil)an atau simpan if!argc '' 2% & imsho+!format!"eigenface_d" i% cgra$scale%; 9 else & im+rite!format!"s/eigenface_d.png" output_folder.c_str!% i% norm_0_2!cgra$scale%%; 9 9 // Menampil)an atau men$impan re)onstru)si gambar di beberapa lang)ah $g telah ditetap)an* for!int num_components ' min!N.cols ,0%; num_components < min!N.cols 700%; num_componentsP',% & // iris ve)tor eigen dari model Mat evs ' Mat!N 1ange**all!% 1ange!0 num_components%%; Mat proCection ' subspaceBroCect!evs mean [email protected]!,,%%; Mat reconstruction ' subspace1econstruct!evs mean proCection%; // menormal)an hasil reconstruction ' norm_0_2!reconstruction.reshape!, [email protected]+s%%; // 8ampil)an ( simpan if!argc '' 2% & imsho+!format!"eigenface_reconstruction_d" num_components% reconstruction%; 9 else & im+rite!format!"s/eigenface_reconstruction_d.png" output_folder.c_str!% num_components% reconstruction%; 9 9
// 8ampil)an Ci)a tida) menunggu folder )eluaran if!argc '' 2% & +aitHe$!0%; 9 return 0;
9
Penerapan Deteksi Wajah OpenCV OpenCV OpenCV ialah open source library computer ision, yg memudahkan pemrograman deteksi wajah, face tracking , face recognition, kalman filtering berbagai metode artificial intelligent.
OpenCV (Open !o$rce Co"p$ter Vision *i'rar adalah sebuah pustaka perangkat lunak yg ditujukan unt pengolahan citra dinamis scr real-time, yg dibuat oleh 'ntel, sekarang didukung oleh Willo5 %arage Itsee. Program ini bebas berada dlm naungan sumber terbuka dari lisensi SD. Pustaka ini merupakan pustaka lintas platform. Program ini didedikasikan sebagaian besar unt pengolahan citra scr real-time. 2ika pustaka ini menemukan pustaka +ntegrated Performance Primitives dari intel dlm sistem komputer, maka program ini akan menggunakan rutin ini unt mempercepat proses kerja program ini scr otomatis.
Penerapan Deteksi $ajah %pen15
OpenCV pertama kali diluncurkan scr resmi pada tahun 7FFF oleh +nter %esearch sbg lanjutan dari bagian proyek bertajuk aplikasi intensif berbasis 1P*, real-time ray tracing tembok penampil =D. Para kontributor utama dlm proyek ini termasuk mereka yg berkecimpung dlm bidang optimasi di 'ntel 3ussia, juga #im Pusataka Performansi +ntel .
Pada awalnya, tujuan utama dari proyek %pen15 ini dideskripsikan sbg berikut, 7. Penelitian penginderaan citra lanjutan tdk hanya melalui kode program terbuka, tetapi juga kode yg telah teroptimasi unt infrastruktur penginderaan citra. &. enyebarluarkan ilmu penginderaan citra dengan menyediakan infrastruktur bersama di mana para pengembang dapat menggunakannya scr bersama-sama, sehingga kode akan tampak lebih mudah dibaca ditransfer. =. embuat aplikasi komersial berbasiskan penginderaan citra, di mana kode yg telah teroptimasi tersedia scr bebas dengan lisensi yg tersedia scr bebas yg tdk mensyaratkan program itu harus terbuka atau gratis.
Fit$r Eta"a OpenCV •
engoptimalkan image processing secara realtime
•
6ntarmuka utama %pen15 adalah di 1
•
6da juga 1, Python dan 2aa
•
6plikasi %pen15 berjalan pada $indows, 6ndroid, /inu, ac dan i%S
•
Dioptimalkan untuk prosesor 'ntel
Mod$l OpenCV OpenCV memiliki struktur modular. odul utama dari %pen15 tercantum di bawah ini. Saya telah menyediakan beberapa link yang menunjuk ke beberapa pelajaran contoh di bawah setiap modul Core
'ni adalah modul dasar %pen15. 'ni mencakup struktur data dasar (misalnya-struktur data at) dan fungsi pengolahan gambar dasar. odul ini juga banyak digunakan oleh modul lain seperti highgui, dll ,igh%$i
odul ini menyediakan kemampuan pengguna yang sederhana antarmuka, beberapa gambar dan video codec, gambar dan ideo yang menangkap kemampuan, memanipulasi jendela gambar, penanganan track bar dan mouse acara dan lain-lain 2ika 6nda ingin kemampuan *' lebih maju, 6nda harus menggunakan kerangka *' seperti 3t , "in#orms, dll I"gProc
odul ini mencakup algoritma pengolahan gambar dasar termasuk gambar filtering, transformasi gambar, konersi ruang warna dan lain-lain Video
'ni adalah modul analisis ideo yang mencakup algoritma pelacakan objek, algoritma pengurangan latar belakang dan lain-lain O'jDetect
'ni termasuk deteksi dan pengenalan obyek algoritma untuk objek standar . %pen15 kin banyak digunakan untuk mengembangkan pengolahan citra dan isi komputer canggih aplikasi. 'ni telah menjadi alat bagi siswa, insinyur dan peneliti di setiap sudut dan sudut dunia.
#onsep Pendeteksian Wajah
OpenCV face detector menggunakan metode Paul Viola / ichael (ones,
etode mengkombinasikan : •
!itur rectangular sederhana yg disebut fitur aar
•
'ntegral imag unt deteksi fitur yg cepat
•
etode machine learning Ada&oost .
•
Sebuah pengklasifikasi cascade untkmengkombinasikan banyak fitur scr efisien.
!itur yg digunakan Viola / (ones menggunakan bentuk gelombang )aar . entuk gelombang aar ialah sebuah gelombang kotak. Pada & dimensi, gelombang kotak ialah pasangan persegi yg bersebelahan, 7 terang 7 gelap. aar ditentukan oleh pengurangan piel rata-rata daerah gelap dari piel rata-rata daerah terang. 2ika perbedeaan diatas threshol d (diset selama learning), fitur tersebut dikatakan ada.
Contoh Progra" OpenCV %pen15 menggunakan sebuah tipe face detector yg dsebut ,aar Cascade classifier . 4ambar menunjukkan face detector berhasil bekerja pada sebuah gambar. 2ika ada sebuah image (bias dari file Hlie ideo), face detector menguji tiap lokasi image mengklasifikasinya sbg wajahT atau bukan wajahT. "lasifikasi dimisalkan sebuah skala fi$ unt wajah, misal A9A9 piel. 2ika wajah pada image lebih besar atau lebih kecil dari piel tersebut, classifier terus menerus jalan beberapa kali, unt mencari wajah pada gambar tersebut.
Penerapan Deteksi $ajah %pen15 Classifier menggunakan data yg disimpan pada file 4* unt memutuskan bagaimana mengklasifikasi tiap lokasi image. %pen15 menggunakan > data Q/ unt deteksi wajah depan, 7 unt wajah profile. #ermasuk juga = file Q/ bukan wajah: 7 unt deteksi full body, 7 unt upper body, 7 unt lower body. 6nda harus memberitahukan classifier dimana menemukan file data yg akan anda gunakan. Salah satunya bernama haarcascadeLfrontalfaceLdefault.ml. Pada %pen15, terletak pada : Brogram_Liles/pen34/data/haarcasades/haarcascade_frontalfa
I"ple"entasi Deteksi Wajah2 4: 5ariable Cv)aarClassifierCascade [ pCascade menyimpan data dari file Q/. *ntuk meload data Q/ ke p1ascade, 6nda dapat menggunakan fungsi c/*oad( . c/oad ialah fungsi umum unt meload data dari file yg membutuhkan hingga = parameter input. 2'ka anda membuat kode pada 1, set parameter sisanya menjadi 9, jika menggunakan 1 hilangkan parameter yg tdk digunakan.
Sebelum mendeteksi wajah pada images, 6nda membutuhkan objek C/Me"!torage . 8: Detector akan mendaftar wajah yg terdeteki ke buffer. 0ang harus anda kerjakan ialah membuatnya !o$rce Code C.. p=torage'3v3reateMem=torage!0%;
dan mereleasenya ketika telah selesai. !o$rce Code C.. cv1eleaseMem=torage!(p=torage%;
6nda akan sering meload data dari file, tentu ada kemungkinan salah path, sebaiknya =: berikan pengecekan unt memastikan file diload dengan benar. !o$rce Code C.. if!pnpmg VV p=torage VV p3ascade% & printf !Ynisialisasi gagal GnZ%; 9 eDit !I,%; 9
?: *ntuk menjalankan detector, panggil objek c/,aarDetect . !ungsi ini membutuhkan C parameter, = pertama ialah pointer image, 4* data memory buffer , sisanya diset pada default 1. !o$rce Code C.. pLace1ect=eR 'cvFaarEetectbCects !pnpmg p3ascade p=torage ,., //ting)at)an s)ala pencarian dengan ,0 tiap passing 7 //drop group $g )urang dari 7 dete)si 34_F1_E_3W_B16S //s)ip region $g td) berisi +aCah cv=i-e!0%%; //guna)an MJ default unt s)ala pencarian ter)ecil.
@:
*ntuk membuat display $indow gunakan c/1a"edWindo5 seperti berikut:
!o$rce Code C.. cvamedNindo+ !YFaar Nindo+Z 34_NEN_68=]%;
*ntuk memasukkan image ke display, panggil fungsi c/!ho5I"age( dengan nama yg telah dibuat pada window nama image yg ingin ditampilkan.
!o$rce Code Open CV C.. erikut ini kode lengkap untuk Penerapan Deteksi Wajah OpenCV : !o$rce Code C..
EetectLace.cpp* // 3apturing.cpp * Mendefinisi)an entr$ point unt apli)asi )onsol. static 3vMem=torage? storage ' 0; static 3vFaar3lassifier3ascade? cascade ' 0; void detect_and_dra+! plmage? image %; const char? cascade_name ' "3*/Brogram Liles/pen34/data/haarcascades/haarcascade_frontalface_alt.Dml"; /?"haarcascade_profileface.Dml";?/ int main!int argc char?? argv% & 3v3apture? capture ' 0; plmage ?frame ?frame_cop$ ' 0; argc ' ,; argv ' 0; int optlen ' strlen!"IIcascade'"%; const char? input_name; input_name ' 0;
if! argc > , (( strncmp! argv@,A "IIcascade'" optlen % '' 0 % & cascade_name ' argv@,A P optlen; input_name ' argc > 2 U argv@2A * 0; 9 else & fprintf! stderr "6sage* facedetect IIcascade'G"G" @filenameVcamera_indeDAGn" %; //return I,; /?input_name ' argc > , U argv@,A * 0;?/ 9 cascade ' !3vFaar3lassifier3ascade?%cvJoad! cascade_name 0 0 0 %; if! cascade % & fprintf! stderr "111* 8ida) dapat memuat classifier cascadeGn" %; //return I,; 9 storage ' cv3reateMem=torage!0%;
if! input_name VV !isdigit!input_name@0A% (( input_name@,A '' :G0:% % capture ' cv3aptureLrom3M! input_name U 0 * input_name@0A I :0: %; else capture ' cv3aptureLrom4! input_name %; cvamedNindo+! "Lace Eetection" , %;
if! capture % & for!;;% & if! cvSrabLrame! capture %%
brea); frame ' cv1etrieveLrame! capture %; if! frame % brea); if! frame_cop$ % frame_cop$ ' cv3reatemage! cv=i-e!frameI>+idthframeI
>height% BJ_EB8F_56 7 %; if! frameI>origin '' BJ_1S_8J % cv3op$! frame frame_cop$ 0 %; else cvLlip! frame frame_cop$ 0 %;
detect_and_dra+! frame_cop$ %; if! cvNaitHe$! ,0 % >' 0 % brea);
9
cv1eleasemage! (frame_cop$ %; cv1elease3apture! (capture %;
9 else & const char? filename ' "lena.Cpg"; plmage? image ' cvJoadmage! filename , %;
if! image % & detect_and_dra+! image %; cvNaitHe$!0%; cv1eleasemage! (image %; 9 else & /? menganggap itu adalah file te)s $g berisi daftar nama file gambar $g a)an diproses I satu per baris ?/ LJ? f ' fopen! filename "rt" %; if! f % & char buf@,000P,A; +hile! fgets! buf ,000 f % % & int len ' !int%strlen!buf%; +hile! len > 0 (( isspace!buf@lenI,A% % lenII; buf@lenA ' :G0:; image ' cvJoadmage! buf , %; if! image % & detect_and_dra+! image %; cvNaitHe$!0%; cv1eleasemage! (image %; 9 9 fclose!f%;
9 9 9 cvEestro$Nindo+!"Lace Eetection"%; return 0; 9 void detect_and_dra+! plmage? img % & int scale ' ,; plmage? temp ' cv3reatemage! cv=i-e!imgI>+idth/scaleimgI >height/scale% 5 7 %; 3vBoint pt, pt2; int i; //cvB$rEo+n! img temp 34_S6==_D %; cv3learMem=torage! storage %; if! cascade % & 3v=eR? faces ' cvFaarEetectbCects! img cascade storage ,.2 2 34_F1_E_3W_B16S cv=i-e!Q0 Q0% %; for! i ' 0; i < !faces U facesI>total * 0%; iPP % & 3v1ect? r ' !3v1ect?%cvSet=eRlem! faces i %; pt,.D ' rI>D?scale; pt2.D ' !rI>DPrI>+idth%?scale; pt,.$ ' rI>$?scale; pt2.$ ' !rI>$PrI>height%?scale; cv1ectangle! img pt, pt2 34_1S!020% 7 5 0 %; plmage ? face=ave ' cv3reatemage!cvSet=i-e!img%imgI>depthimgI >n3hannels%; plmage ? face8o=ave ' 0; if! face8o=ave % face8o=ave ' cv3reatemage! cvSet=i-e!pmg% 5 7 %; cv3op$!pmg face8o=ave 0%; face8o=aveI>origin ' pmgI>origin; int point ' 0; int pointW ' 0; int lebar ' 0; if !rI>+idth > rI>height% & lebar ' rI>+idth; point ' rI>D I !!rI>+idth I rI>height%/2%; pointW ' rI>$ I !!rI>+idth I rI>height%/7%; 9 else if !rI>+idth < rI>height% & lebar ' rI>height; point ' rI>D I !!rI>height I rI>+idth%/2%; pointW ' rI>$ I !!rI>height I rI>+idth%/7%; 9 cv=etmage1!img cv1ect!pointpointWlebarlebar%%;
face=ave ' img; cvamedNindo+!"1esult" , %; cv=ho+mage!"1esult" img%; cv1esetmage1!img%;?/
9 9
cv=ho+mage! "Lace Eetection" img %; cv1eleasemage! (temp %; 9 #ifdef _i3 main!,"facedetect.c"%; #endifD
Pengenalan Wajah Android Open CV
OpenCV (Open !o$rce Co"p$ter Vision
OpenCV (Open !o$rce Co"p$ter Vision adalah library untuk menangkap, memproses dan menampilkan gambar, baik &D maupun =D. OpenCV digunakan untuk pengenalan wajah, pengenalan gesture, deteksi gerakan dan lain-lain yang berkaitan dengan computer ision. OpenCV telah dikembangkan cukup lama (dari 7FFF) dan tersedia untuk berbagai platform, termasuk 6ndroid. asalahnya, kebanyakan tulisan tentang instalasi open15 menggunakan clipse6D# dan belum menggunakan 6ndroid Studio. #ulisan ini menjadi pengantar memulai openCV di Android dengan menggunakan 6ndroid Studio. erikut langkah-langkahnya.O
7. Download library open15 dari http:HHopenc.orgHdownloads.html dan pilih platform 6ndroid lalu ekstrak. &. 'mpor library open15. 2alankan 6ndroid Studio, pilih 'mport project (clipse 6D#, gradle, 6D#)T, lalu pilih direktori \Iopenc sdkJ\sdk\jaa Pilih target direktori yang berbeda dengan library open15. 2ika gradle scyn gagal, klik tryT agar 6ndroidStudio menginstall komponen yang diperlukan. Pastikan anda terhubung dengan internet. =. Sekarang kita akan buat project yang menggunakan open15. "lik new project. >. Pilih !ile V] 'mport odule. Pilih direktori sesuai target direktori pada point no &. 1heck checbo imporT dan ganti nama module menjadi :app%pen15. A. Pada project strucutre, klik kanan, pilih %pen odule SettingT. "lik tab dependencyT. Pilih tanda plus hijau di kanan atas V] module dependency. Pilih app%pen15. B. Pada build.gradle, set targetSdk5ersion 7F (jika tidak akan menyebabkan error di 6ndroid A ke atas) Sekarang kita akan mencoba open15, contoh diambil dari \Iopenc sdkJ\samples\tutorial-7camerapreiew uka layout (acityLmain.ml), ganti isinya sebagai berikut: !o$rce Code -a/a
2angan lupa tambahkan camera pada 6ndroidanifest.ml !o$rce Code -a/a ;
#erakhir source code untuk ain6ctiity !o$rce Code -a/a import import import import import import import import
android.support.v\.app.ctionarctivit$; android.os.undle; android.util.Jog; android.vie+.Menu; android.vie+.Menutem; android.vie+.=urface4ie+; android.vie+.Nindo+Manager; android.+idget.8oast;
import import import import import
org.opencv.android.aseJoader3allbac); org.opencv.android.3ameraridge4ie+ase; org.opencv.android.Joader3allbac)nterface; org.opencv.android.pen34Joader; org.opencv.core.Mat;
public class Mainctivit$ eDtends ctionarctivit$ implements 3ameraridge4ie+ase.3v3amera4ie+Jistener2 & private static final =tring 8S ' "34=ample**ctivit$";
private 3ameraridge4ie+ase mpen3v3amera4ie+; private boolean msKava3amera ' true; private Menutem mtem=+itch3amera ' null; private aseJoader3allbac) mJoader3allbac) ' ne+ aseJoader3allbac)!this%
&
^verride public void onManager3onnected!int status% & s+itch !status% & case Joader3allbac)nterface.=633==* & Jog.i!8S "pen34 loaded successfull$"%; mpen3v3amera4ie+.enable4ie+!%; 9 brea); default* & super.onManager3onnected!status%; 9 brea); 9 9
9; public Mainctivit$!% & Jog.i!8S "nstantiated ne+ " P this.get3lass!%%; 9 / ?? Eipanggil )eti)a a)tivitas tersebut pertama )ali dicipta)an. ? /
^verride public void on3reate!undle savednstance=tate% & Jog.i!8S "called on3reate"%; super.on3reate!savednstance=tate%; getNindo+!%.addLlags!Nindo+Manager.Ja$outBarams.LJS_HB_=31_%; set3ontent4ie+!1.la$out.activit$_main%;
if !msKava3amera% mpen3v3amera4ie+ ' !3ameraridge4ie+ase% find4ie+$d!1.id.tutorial,_activit$_Cava_surface_vie+%; else mpen3v3amera4ie+ ' !3ameraridge4ie+ase% find4ie+$d!1.id.tutorial,_activit$_native_surface_vie+%; mpen3v3amera4ie+.set4isibilit$!=urface4ie+.4=J%; mpen3v3amera4ie+.set3v3amera4ie+Jistener!this%; 9
^verride public void onBause!% & super.onBause!%; if !mpen3v3amera4ie+ ' null% mpen3v3amera4ie+.disable4ie+!%; 9
^verride public void on1esume!% & super.on1esume!%; pen34Joader.inits$nc!pen34Joader.B34_41=_2_Q_7 this mJoader3allbac)%; 9
public void onEestro$!% & super.onEestro$!%; if !mpen3v3amera4ie+ ' null% mpen3v3amera4ie+.disable4ie+!%; 9
^verride public boolean on3reateptionsMenu!Menu menu% & // nflate the menu; this adds items to the action bar if it is present. Jog.i!8S "called on3reateptionsMenu"%; mtem=+itch3amera ' menu.add!"8oggle ative/Kava camera"%; return true; 9 ^verride public boolean onptionstem=elected!Menutem item% & =tring toastMesage ' ne+ =tring!%; Jog.i!8S "called onptionstem=elected; selected item* " P item%; if !item '' mtem=+itch3amera% & mpen3v3amera4ie+.set4isibilit$!=urface4ie+.S%; msKava3amera ' msKava3amera;
if !msKava3amera% & mpen3v3amera4ie+ ' !3ameraridge4ie+ase% find4ie+$d!1.id.tutorial,_activit$_Cava_surface_vie+%; toastMesage ' "Kava 3amera"; 9 else & mpen3v3amera4ie+ ' !3ameraridge4ie+ase% find4ie+$d!1.id.tutorial,_activit$_native_surface_vie+%; toastMesage ' "ative 3amera"; 9 mpen3v3amera4ie+.set4isibilit$!=urface4ie+.4=J%; mpen3v3amera4ie+.set3v3amera4ie+Jistener!this%; mpen3v3amera4ie+.enable4ie+!%; 8oast toast ' 8oast.ma)e8eDt!this toastMesage 8oast.JS8F_JS%; toast.sho+!%; 9 return true; 9