Pengenalan Wajah dengan Eigenface 6


Pengenalan Pola adalah cabang kecerdasan yang menitik-beratkan pada metode pengklasifikasian objek ke dalam kelas – kelas tertentu untuk menyelesaikan masalah tertentu. Contoh yang dibahas kali ini adalah mengenai penentuan pola wajah baru berdasarkan pola wajah yang sudah ada sebelumnya dengan menggunakan metode Eigenface.
Algoritma Eigenface adalah salah satu algoritma yang cukup populer dalam menyelesaikan masalah pengenalan wajah manusia, keunggulannya adalah dari segi implementasi rumus yang mudah dipahami, dan waktu eksekusi yang cukup cepat dibandingkan algoritma lainnya. Hasil yang didapatkan juga cukup baik, tetapi tidak sebaik algoritma lain yang lebih sulit untuk diimplementasikan.



Diasumsikan ada 10 wajah manusia yang sudah diketahui sebelumnya, dengan data sebagai berikut:
ef contoh data

Selanjutnya ada pola wajah baru yang ingin diketahui hasilnya
Maka tentukan pola wajah baru ini cocok dengan pola wajah yang mana
Diasumsikan pola wajah yang baru adalah sebagai berikut:
ef data baru


Langkah-langkah penggunaan algoritma ini adalah

* Lakukan proses pembelajaran pada masing-masing contoh gambar wajah yang tersedia
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini (poin 1a – 1i)

[daftarGambar,H,W,M,m,U,omega]=PerhitunganContohData('ContohData');

Memasuki perhitungan pada fungsi PerhitunganContohData (poin 1a – 1i)

1a. Ambil semua gambar contoh wajah yang tersedia

bmpContohData=dir(sprintf('%s/*.bmp',pathContohData));

1b. Tentukan tinggi (H) dan lebar (W) dari masing-masing gambar
Kemudian hitung jumlah gambar yang tersedia (M)

H=size(im,1); %Tinggi gambar
W=size(im,2); %Lebar gambar
M=size(bmpContohData,1); %Jumlah gambar

1c. Baca masing-masing gambar yang tersedia,
kemudian lakukan konversi gambar tersebut menjadi vektor gambar (vec)

for i=1:M
	str=strcat(pathContohData,'\',bmpContohData(i).name);
	daftarGambar(:,:,i)=imread(str);
	vec(:,i)=reshape(daftarGambar(:,:,i),H*W,1);
end

1d. Hitung rata-rata (m) dari masing-masing gambar dengan rumus:
m = (1/M) * E(vec)

m=sum(vec,2)/M;

1e. Hitung selisih antara gambar dengan rata-rata gambar dengan rumus:
A(i) = vec(i) – M

A=vec-repmat(m,1,M);

1f. Hitung matriks kovarian (C) dengan rumus:
C = AT * A

C=A'*A;

1g. Hitung vektor eigen (V) dan nilai eigen (lambda) dengan rumus:
Fungsi eig akan melakukan dekomposisi matriks kovarian menjadi matriks V dan lambda

[V,lambda]=eig(C);

1h. Hitung nilai eigenface dari masing-masing contoh gambar dengan rumus:
U = A * V

U=A*V;

1i. Setelah menemukan nilai eigenface,
Hitung nilai bobot (W) untuk masing-masing gambar dengan rumus:
W(i) = U(i)T * A
Kemudian masukkan semua nilai bobot pada masing-masing gambar sebagai nilai omega

omega=U'*A;

* Lakukan proses perhitungan pada data baru menggunakan nilai eigenface yang sudah ditemukan sebelumnya
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini (poin 2a – 2e)

PerhitunganDataBaru('ContohData','Databaru',daftarGambar,H,W,M,m,U,omega)

Memasuki perhitungan pada fungsi PerhitunganDataBaru

2a. Cari gambar contoh wajah yang tersedia untuk ditampilkan

bmpContohData=dir(sprintf('%s/*.bmp',pathContohData));    

2b. Cari gambar data wajah baru yang tersedia

bmpDataBaru=dir(sprintf('%s/*.bmp',pathDataBaru));

2c. Hitung jumlah gambar data baru yang tersedia

jumlahDataBaru=size(bmpDataBaru,1);

2d. Tampilkan data contoh gambar yang tersedia

for i=1:M
	str=strcat(pathContohData,'\',bmpContohData(i).name);    
	bmp=imread(str);
	
	subplot(1+jumlahDataBaru,M,i)
	imshow(bmp)
	if i==1
		title('Contoh gambar wajah: ','Position',[105,0])
	end
end

2e. Lakukan perhitungan pada masing-masing data baru (poin 2e1 – 2e6)

for i=1:jumlahDataBaru
	str=strcat(pathDataBaru,'\',bmpDataBaru(i).name);    
	tmpBmp=imread(str);
	
	bmp=reshape(tmpBmp,H*W,1);
	testBmp=double(bmp);
	. . .

2e1. Hitung selisih antara gambar dengan rata-rata gambar (A)

selisihBmp=testBmp-m;

2e2. Hitung nilai bobot (om) pada gambar yang baru dengan rumus:
om = UT * A

om=U'*selisihBmp;

* Tentukan gambar contoh yang paling baik dalam mendeskripsikan data baru
dengan cara mencari minimal dari jarak Euclidean

2e3. Hitung nilai E(k) dengan rumus:
E(k) = om(k) – omega

d=repmat(om,1,M)-omega;

2e4. Hitung jarak euclidean dari nilai E(k) yang sudah ditentukan sebelumnya

for j=1:M
	dist(j,1)=norm(d(:,j));
end

2e5. Tentukan jawaban gambar, yaitu gambar yang memiliki jarak Euclidean terendah dari semua gambar

idx=MinimalIndeks(dist);

2e6. Tampilkan pada layar

subplot(1+jumlahDataBaru,M,(i*M)+1)
imshow(str)
title(strcat('Data ',int2str(i)),'Position',[25,0])

subplot(1+jumlahDataBaru,M,(i*M)+2)
imshow(uint8(daftarGambar(:,:,idx)))
title('Dikenali sebagai','Position',[75,0])


Hasil akhir adalah: (klik untuk perbesar gambar)

ef hasil akhir


Contoh modul / source code menggunakan Matlab dapat didownload disini:



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.


Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

6 pemikiran di “Pengenalan Wajah dengan Eigenface

    • pip Penulis

      Secara teori hal tersebut seharusnya dapat dilakukan. Pelatihan dilakukan pada dataset wajah dengan cara pengucapan masing-masing abjad, kemudian data input dibandingkan dengan masing-masing dataset tersebut sebagai proses klasifikasi.

        • pip Penulis

          Eigenface sudah mengandung metode PCA yang dapat dianggap sebagai metode untuk melakukan ekstraksi fitur, tetapi tentu saja dapat dimodifikasi / ditambahkan metode lain apabila diperlukan

    • pip Penulis

      Modul dapat diambil dengan mengklik tombol yang terdapat di akhir pos setelah memberikan centang pada bagian captcha. Jika captcha tidak muncul maka silahkan melakukan refresh untuk memunculkan captcha tersebut. Terima kasih.