Anda di halaman 1dari 11

Face Recognition Berbasis PCA di Matlab

January 5, 2013 12 Comments Berikut ini adalah step-step dalam pengenalan wajah berbasis PCA

1im_rgb = imread(link_im); 2im_gray_buff = im_rgb(:,:,2);

1im_vector_latih(:,i) = double(reshape(im_gray,[],1));

1m = mean(im_vector_latih,2);

1for i=1:jum_data 2A(:,i) = im_vector_latih(:,i) - m; 3end

1L = A'*A;

1 [V D] = eig(L);</pre> 2L_eigen_vector = []; 3for i = 1 : size(V,2) 4 if( D(i,i)>1 ) 5 L_eigen_vector = [L_eigen_vector V(:,i)]; end 6end 7

1Eigenface = A * L_eigen_vector;</pre>

1 for i=1:jum_data 2 im_proyeksi_latih(:,i) = Eigenface'*A(:,i); 3end 4im_proyeksi_test = Eigenface' * A_test; 5for i=1:jum_data Euc_distance(:,i) = norm( im_proyeksi_test - im_proyeksi_latih(:,i) ); 6 end 7[Euc_dist_min , Recognized_index] = min(Euc_distance); 8 Berikut file lengkapnya terdiri dari file create database dan recognition eigen_database.mat 1 2 clc 3 clear all 4 close all 5 %buat data base image training 6 jum_data = 30; baris = 180; 7 kolom = 180; 8 im_gray_buff = []; 9 for i=1:jum_data link_im = ['TrainDatabase\',num2str(i),'.jpg']; 10 ukuran_gbr = size(imread(link_im)); 11 if numel(ukuran_gbr)>2 12 im_rgb = imread(link_im); 13 im_gray_buff = im_rgb(:,:,2); else 14 im_gray_buff = imread(link_im); 15 end 16 im_gray = imresize(im_gray_buff,[baris kolom]);
function [ output_args ] = Untitled2( input_args )

im_vector_latih(:,i) = double(reshape(im_gray,[],1)); 17 end 18 m = mean(im_vector_latih,2); 19for i=1:jum_data 20 A(:,i) = im_vector_latih(:,i) - m; 21end 22L = A'*A; D] = eig(L); 23[V L_eigen_vector = []; 24for i = 1 : size(V,2) 25 if( D(i,i)>1 ) L_eigen_vector = [L_eigen_vector V(:,i)]; 26 end 27 end 28Eigenface = A * L_eigen_vector; 29for i=1:jum_data im_proyeksi_latih(:,i) = Eigenface'*A(:,i); 30 end 31 Eigenface_data.mat Eigenface A m jum_data baris kolom 32save im_proyeksi_latih 33 34 35 36 37 38 39

realtime_webcam_recognition.m 1 2 clc 3 clear all 4 close all 5 imaqreset Eigenface_data.mat 6 load vid = videoinput('winvideo',1,'YUY2_160x120'); 7 set(vid,'ReturnedColorSpace','rgb'); 8 set(vid,'TriggerRepeat',Inf); 9 set(vid,'FramesPerTrigger',15); 10figure; set(gcf,'doublebuffer','on'); 11start(vid) 12threshold = 0; 13while(vid.FramesAcquired<=500) data = getdata(vid,1); 14 x = data(:,:,2); 15 imshow(x); 16 s = fdmex(x', threshold); 17 if size(s,1)>0 i=1; 18 h = rectangle('Position',[s(i,1)-s(i,3)/2,s(i,2)19 s(i,3)/2,s(i,3),s(i,3)], ... 20 'EdgeColor', [1,0,0], 'linewidth', 2);
function [ output_args ] = Untitled2( input_args )

im_crop = imcrop(x,[s(i,1)-s(i,3)/2,s(i,2)21 s(i,3)/2,s(i,3),s(i,3)]); 22 %recognition 23 im_test = im_crop; 24 im_test = imresize(im_test, [baris kolom]); im_vector_test = double(reshape(im_test,[],1)); 25 26 A_test = im_vector_test - m; 27 im_proyeksi_test = Eigenface' * A_test; 28 29 for i=1:jum_data 30 Euc_distance(:,i) = norm( im_proyeksi_test 31im_proyeksi_latih(:,i) ); end 32 [Euc_dist_min , Recognized_index] = min(Euc_distance); 33 switch Recognized_index 34 case {1,2,3,4,5,6,7,8,9,10} 35 label = ['endang']; case {11,12,13,14,15,16,17,18,19,20} 36% label = ['bona']; 37% otherwise 38 %label = [num2str(Recognized_index)]; 39 label = ['tidak dikenal']; 40 end xlabel(label); 41 end 42 end 43stop(vid) 44delete(vid) 45clear 46close(gcf) 47 48 49 50 51 52 53

Face recognition yang saya lakukan menggunakan webcam secara langsung untuk mengambil gambar uji. Berikut link mengenai akuisisi gambar dengan webcam http://wangready.wordpress.com/2012/12/30/akuisisi-gambar-dari-webcam-di-matlab/ Untuk mengambil data latih, bisa digunakan kode berikut. 1 2 3 4 5
function [ output_args ] = Untitled1( input_args ) %UNTITLED1 Summary of this function goes here % Detailed explanation goes here clc clear all close all imaqreset

6 load Eigenface_data.mat 7 vid = videoinput('winvideo',1,'YUY2_160x120'); set(vid,'ReturnedColorSpace','rgb'); 8 set(vid,'TriggerRepeat',Inf); 9 set(vid,'FramesPerTrigger',15); 10figure; 11set(gcf,'doublebuffer','on'); 12start(vid) threshold = 0; 13index_gambar_low = 31; 14index_gambar_high = 40; 15hitung_jum_gambar = index_gambar_low; 16%========init sound============= t1=1/10000:1/10000:0.5; 17si=(sin(2*pi*246.94*t1)); 18%++++++++++++++++++++++++++++++++++++ 19sound(si,5000); 20pause(0.5); 21sound(si,5000); while((vid.FramesAcquired<=500)&(hitung_jum_gambar<=index_gambar_high)) 22 sound(si,10000);%tanda siap mengambil gambar, 2 detik setelah nada 23biiiip pause(2); 24 data = getdata(vid,1); 25 x = data(:,:,1); 26 imshow(x); 27 s = fdmex(x', threshold); 28 if size(s,1)>0 i=1; 29 h = rectangle('Position',[s(i,1)-s(i,3)/2,s(i,2)30 s(i,3)/2,s(i,3),s(i,3)], ... 31 'EdgeColor', [1,0,0], 'linewidth', 2); 32 im_crop = imcrop(x,[s(i,1)-s(i,3)/2,s(i,2)33s(i,3)/2,s(i,3),s(i,3)]); nama_gambar = ['TrainDatabase\',num2str(hitung_jum_gambar),'.jpg']; 34 im_act_size = imresize(im_crop,[baris kolom]); 35 imwrite(im_act_size, nama_gambar); 36 hitung_jum_gambar = hitung_jum_gambar + 1; 37 end 38end 39stop(vid) delete(vid) 40clear 41close(gcf) 42 43 44 45 46 47 48 Jika data latih mempunyai ukuran yang berbeda, maka kode berikut bisa digunakan untuk meresize data latih.

1 2 function [ output_args ] = Untitled1( input_args ) 3 %UNTITLED1 Summary of this function goes here 4 % Detailed explanation goes here clc 5 clear all 6 close all 7 load Eigenface_data.mat 8 for i=1:jum_data nama_gambar = ['TrainDatabase\',num2str(i),'.jpg']; 9 baca_gambar = imread(nama_gambar); 10 hasil_resize = imresize(baca_gambar,[baris kolom]); 11 imwrite(hasil_resize,nama_gambar); 12end 13 _____________________________________________ DAFTAR PUSTAKA umiacs.umd.edu/~knkim/KG_VISA/PCA/FaceRecog_PCA_Kim.pdf youtube.com/watch?v=SaEmG4wcFfg people.kyb.tuebingen.mpg.de/kienzle/fdlib/fdlib.htm mathworks.com/matlabcentral/fileexchange/17032-pca-based-face-recognition-system

Anda mungkin juga menyukai