Deteksi wajah (face detection) menggunakan algoritma Viola-Jones
Deteksi wajah merupakan tahapan awal dalam sistem pengenalan wajah. Sistem pengenalan wajah banyak diaplikasikan dalam bidang biometrik untuk mengenali identitas pemilik wajah.
Berikut ini merupakan contoh aplikasi pemrograman matlab untuk mendeteksi wajah (face detection).
faceDetector = vision.CascadeObjectDetector; I = imread('visionteam.jpg'); bboxes = step(faceDetector, I); IFaces = insertObjectAnnotation(I, 'rectangle', bboxes, 'Face'); figure, imshow(IFaces), title('Detected faces');
I2 = imread('visionteam.jpg'); bodyDetector = vision.CascadeObjectDetector('UpperBody'); bodyDetector.MinSize = [60 60]; bodyDetector.MergeThreshold = 10; bboxBody = step(bodyDetector, I2); IBody = insertObjectAnnotation(I2, 'rectangle',bboxBody,'Upper Body'); figure, imshow(IBody), title('Detected upper bodies');
Koding tersebut menggunakan algoritma viola-jones yang dapat diaplikasikan pada wajah yang menghadap ke depan (frontal face) dan dalam posisi tegak. Proses deteksi wajah dapat ditampilkan dalam bentuk GUI melalui pemrograman berikut:
function varargout = facedetection(varargin) % FACEDETECTION MATLAB code for facedetection.fig % FACEDETECTION, by itself, creates a new FACEDETECTION or raises the existing % singleton*. % % H = FACEDETECTION returns the handle to a new FACEDETECTION or the handle to % the existing singleton*. % % FACEDETECTION('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in FACEDETECTION.M with the given input arguments. % % FACEDETECTION('Property','Value',...) creates a new FACEDETECTION or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before facedetection_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to facedetection_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help facedetection % Last Modified by GUIDE v2.5 02-Jan-2014 17:33:58 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @facedetection_OpeningFcn, ... 'gui_OutputFcn', @facedetection_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before facedetection is made visible. function facedetection_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to facedetection (see VARARGIN) % Choose default command line output for facedetection handles.output = hObject; % Update handles structure guidata(hObject, handles); movegui(hObject, 'center'); clc clear % UIWAIT makes facedetection wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = facedetection_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; reqToolboxes = {'Computer Vision System Toolbox', 'Image Processing Toolbox'}; info = ver; s=size(info); flg = zeros(size(reqToolboxes)); reqSize = size(reqToolboxes,2); for i=1:s(2) for j=1:reqSize if( strcmpi(info(1,i).Name,reqToolboxes{1,j}) ) flg(1,j)=1; end end end ret = prod(flg); if ~ret error('detectFaceParts requires: Computer Vision System Toolbox and Image Processing Toolbox. Please install these toolboxes.'); end % --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [filename,pathname]=uigetfile('*.*'); if ~isequal(filename,0) handles.data1 = imread(fullfile(pathname,filename)); guidata(hObject,handles); axes(handles.axes1) cla reset imshow(handles.data1); else return end % --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) tic X = handles.data1; thresholdFace = 1; thresholdParts = 1; stdsize = 176; nameDetector = {'LeftEye'; 'RightEye'; 'Mouth'; 'Nose'; }; mins = [[12 18]; [12 18]; [15 25]; [15 18]; ]; detector.stdsize = stdsize; detector.detector = cell(5,1); for k=1:4 minSize = int32([stdsize/5 stdsize/5]); minSize = [max(minSize(1),mins(k,1)), max(minSize(2),mins(k,2))]; detector.detector{k} = vision.CascadeObjectDetector(char(nameDetector(k)), 'MergeThreshold', thresholdParts, 'MinSize', minSize); end detector.detector{5} = vision.CascadeObjectDetector('FrontalFaceCART', 'MergeThreshold', thresholdFace); %%%%%%%%%%%%%%%%%%%%%%% detect face %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Detect faces bbox = step(detector.detector{5}, X); bbsize = size(bbox); partsNum = zeros(size(bbox,1),1); %%%%%%%%%%%%%%%%%%%%%%% detect parts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% stdsize = detector.stdsize; for k=1:4 if( k == 1 ) region = [1,int32(stdsize*2/3); 1, int32(stdsize*2/3)]; elseif( k == 2 ) region = [int32(stdsize/3),stdsize; 1, int32(stdsize*2/3)]; elseif( k == 3 ) region = [1,stdsize; int32(stdsize/3), stdsize]; elseif( k == 4 ) region = [int32(stdsize/5),int32(stdsize*4/5); int32(stdsize/3),stdsize]; else region = [1,stdsize;1,stdsize]; end bb = zeros(bbsize); for i=1:size(bbox,1) XX = X(bbox(i,2):bbox(i,2)+bbox(i,4)-1,bbox(i,1):bbox(i,1)+bbox(i,3)-1,:); XX = imresize(XX,[stdsize, stdsize]); XX = XX(region(2,1):region(2,2),region(1,1):region(1,2),:); b = step(detector.detector{k},XX); if( size(b,1) > 0 ) partsNum(i) = partsNum(i) + 1; if( k == 1 ) b = sortrows(b,1); elseif( k == 2 ) b = flipud(sortrows(b,1)); elseif( k == 3 ) b = flipud(sortrows(b,2)); elseif( k == 4 ) b = flipud(sortrows(b,3)); end ratio = double(bbox(i,3)) / double(stdsize); b(1,1) = int32( ( b(1,1)-1 + region(1,1)-1 ) * ratio + 0.5 ) + bbox(i,1); b(1,2) = int32( ( b(1,2)-1 + region(2,1)-1 ) * ratio + 0.5 ) + bbox(i,2); b(1,3) = int32( b(1,3) * ratio + 0.5 ); b(1,4) = int32( b(1,4) * ratio + 0.5 ); bb(i,:) = b(1,:); end end bbox = [bbox,bb]; end %%%%%%%%%%%%%%%%%%%%%%% draw faces %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% bbox = [bbox,partsNum]; bbox(partsNum<=2,:)=[]; face = bbox(:,1: 4); axes(handles.axes2) cla reset imshow(X); hold on [m, ~] = size(face); for j = 1:m rectangle('Position',[face(j,1),face(j,2),face(j,3),face(j,4)],'EdgeColor','y','LineWidth',2); end hold off toc % for k = 1:m % imcrop(X,[face(k,1),face(k,2),face(k,3),face(k,4)]); % end % --- Executes on button press in pushbutton3. function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) img = getframe(gca); [filename2,pathname2] = uiputfile(... {'*.bmp','bitmap image (*.bmp)'; '*.jpg','jpeg image(*.bmp)'; '*.*','All file(*.*)'},... 'Save Image'); if ~isequal(filename2,0) imwrite(img.cdata,fullfile(pathname2,filename2)); else return end
Sedangkan tampilan GUI nya adalah:
2. Melakukan deteksi wajah pada frontal face 1
3. Melakukan deteksi wajah pada frontal face 2
4. Melakukan deteksi wajah pada frontal face 3
5. Melakukan deteksi wajah pada frontal face 4
6. Melakukan deteksi wajah pada frontal face 5
File source code GUI lengkap beserta citra untuk deteksi wajah dengan algoritma viola-jones dapat diperoleh melalui halaman berikut ini: Source Code
Posted on November 5, 2013, in Pengolahan Citra and tagged algoritma viola jones matlab, aplikasi matlab deteksi wajah, aplikasi matlab pengenalan wajah, cara membuat koding deteksi wajah menggunakan matlab, citra wajah matlab, contoh matlab, contoh program matlab, contoh program matlab pengolahan citra, contoh program matlab sederhana, deteksi wajah matlab, deteksi wajah menggunakan matlab, face detection matlab, koding deteksi wajah matlab, koding face detection matlab, koding pengenalan wajah matlab, pengenalan matlab, pengenalan wajah menggunakan matlab, pengolahan citra dengan matlab, pengolahan citra digital dengan matlab, pengolahan citra digital menggunakan matlab. Bookmark the permalink. 46 Comments.
kelihatannya kita memiliki hobi yang mirip 🙂 kalau ada waktu berkunjung yah ke blog saya
http://visikomputer.wordpress.com/
itu maskudnya vision itu apa ya??? sy coba kok “tidak ditemukan variabel vision”
Harus pakai matlab terbaru mas seperti matlab r2013a atau di atasnya
kl mau dapatkan matlab r2013 selain beli dimana ya ?
heheheeee…. maklum mahasiswa.
via torrent mas,,
yg r2014b juga sdh ada kok
tutorialnya bagus mas !! semoga bermanfaat
Terima kasih mas ebushinoby
Amin
mas pengen nanya, biar pas pengecekan mata nya kiri dan kanan yg di kotakin gemana ya?
*mata kiri dan kanan terpisah
Dalam computer vision toolbox matlab sdh dilengkapi perintah right eye dan left eye
iya sih, cuma yg saya bingung itu cara penulisan biar langsung pengecekan terhadap ke 2 nya sekaligus dalam 1 baris gitu.
sementara sih penyelesaiannya dengan buat 2 iface 2 bbox dan 2 facedetector. ( jadi jatuhnya lebih panjang codingannya )
Assalamualaikum mas, bisa bantu saya dalam menjelaskan maksud baris yang berada pada bagian detect parts yang ada dalam source code GUI yang mas share ga? Soalnya saya ga ngerti maksud dari semua baris koding yang ada dalam bagian detect parts itu
koding di atas, merupakan pengembangan dari koding yang ada pada help matlab
informasi lebih detail bisa dipelajari pada help matlab dengan mengetikkan kata kunci “vision.CascadeObjectDetector”
Aslamualaikaum
mas mau tanya mengenai backpropagation mas
nilai output citra dikenali atau tidak dikenali akan menghasilkan 0.9999
dimana letak kesalahannya mas
Mohon bantuannya mas
Waalaikumsalam sandri
kemungkinan kesalahan bisa bermacam2
di antaranya penyusunan nilai masukan dan nilai target
jika penyusunan kedua nilai tsb sudah benar maka kesalahan bisa terjadi pada perancangan arsitektur jaringannya
Target saya 0 – 1
nilai masukan nya, untuk bobot awal dirandom secara acak dan untuk input saya menggunakan vektor hasil ekstraksu ciri
untuk aesitekturnya saya menggunakan neuron 9900
karena pada ekstraksi ciri minutiae sidik jari ada 1100 segmen x 9 = 9900
ubtuk hidden layer nya saya menggunakan 1 hidden mas
kira2 dimana kesalahannya mas
kesalahan bisa pada proses implementasi di koding
tetapi kalau semua sdh benar, kesalahan bisa pada pemilihan ciri yang diekstrak
Assalamualaikum mas, saya tau dari hasil membaca bahwa metode viola jones ini mempunyai 4 kunci utama yaitu fitur haar, integral image, adaboost learning dan cascade classifier, kalau untuk mengetahui nilai dari setiap 4 kunci utama itu gmn ya mas?
Waalaikumsalam
penjelasan mengenai algoritma viola-jones lebih detail bisa dilihat pada jurnal berikut https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiPrcyW3J3QAhXKqY8KHRLOCb4QFggcMAA&url=https%3A%2F%2Fwww.cs.cmu.edu%2F~efros%2Fcourses%2FLBMV07%2FPapers%2Fviola-cvpr-01.pdf&usg=AFQjCNH5-b9M78VDxR0nifMF-F9VZDVLug
Maaf mas saya masih belum paham..
Disini saya saya menggunakan metode viola jones dengan cara menggunakan vision.CascadeObjectDetector, hasil keluaran nya hanyalah citra dengan wajah yang terdeteksi akan diberikan kotak tanda dikenali, nah saya ingin bertanya bagaimana cara nya jika saya ingin mengetahui dan menampilkan nilai fitur haar, integral image, adaboost dan cascade classifier dari citra tersebut?
mas adi permisi saya mau nanya
caranya gimana ya detect mata kanan dan kiri secara langsung tapi terpisah.
jadi kaya lefteyecart + righteyecart di 1 gambar
secara garis besar, bisa menggunakan kode berikut
clc;clear;close all;
LefteyeDetector = vision.CascadeObjectDetector(‘LeftEye’);
RighteyeDetector = vision.CascadeObjectDetector(‘RightEye’);
I = imread(‘visionteam.jpg’);
Leftbboxes = step(LefteyeDetector, I);
Rightbboxes = step(RighteyeDetector, I);
Ieye = insertObjectAnnotation(I, ‘rectangle’, Leftbboxes, ‘Left eye’);
Ieye = insertObjectAnnotation(Ieye, ‘rectangle’, Rightbboxes, ‘Right eye’);
figure, imshow(Ieye), title(‘Detected faces’);
ok mas adi. makasih 🙂
mas boleh tau alur/penjelasan program yang mulai dari
tic
.
.
.
.
toc
masih belum paham, terimakasih
koding tersebut merupakan implementasi dari algoritma viola jones di mana pada function perintah yang digunakan sudah dilatihkan citra wajah dan non wajah
sistem deteksi wajah tsb kemudian di-include-kan dalam computer vision toolbox matlab
kalo saya mau nampilin berapa wajah yang terdeteksi gimana mas ?
bisa menggunakan perintah berikut
faceDetector = vision.CascadeObjectDetector;
I = imread(‘visionteam.jpg’);
bboxes = step(faceDetector, I);
IFaces = insertObjectAnnotation(I, ‘rectangle’, bboxes, ‘Face’);
figure, imshow(IFaces), title(‘Detected faces’);
[r,c] = size(bboxes);
for n = 1:r
cropped_face = imcrop(I,bboxes(n,:));
figure, imshow(cropped_face);
end
maksud saya jadi dibawah hasil citra yang sudah terdeteksi wajahnya tadi ada kolom yang menampilkan angka jumlah orang yg terdeteksi gitu mas, gimana ya ?
saya rasa jawaban saya sudah sesuai dengan pertanyaan
koding tersebut silakan dipelajari kembali
variabel r adalah banyaknya wajah yang terdeteksi
oke, trimakasih mas..
sama sama lisnofri
saya mau tanya mas untuk melakukan penyisipan source code, di matlab ini biasa di lakukan di instruksi bagian mana?
misal ingin menyisipkan sourcecode ini :
clc;clear;close all;
LefteyeDetector = vision.CascadeObjectDetector(‘LeftEye’);
RighteyeDetector = vision.CascadeObjectDetector(‘RightEye’);
I = imread(‘visionteam.jpg’);
Leftbboxes = step(LefteyeDetector, I);
Rightbboxes = step(RighteyeDetector, I);
Ieye = insertObjectAnnotation(I, ‘rectangle’, Leftbboxes, ‘Left eye’);
Ieye = insertObjectAnnotation(Ieye, ‘rectangle’, Rightbboxes, ‘Right eye’);
figure, imshow(Ieye), title(‘Detected faces’);
assalamualaikum…wr…wb…
mas @adi pamungkas saya Hartono asal sumatra kebetulan saya kuliah di denpasar dan sekarang sedang ngambil tugas akhir. saya mengambil tugas akhir sistem absensi dan dosen pembimbing saya menyarankan menggunakan matlab untuk sistem pengenalan wajah tapi berhubung saya sebelum nya belum pernah menggunakan program matlab saya mendapatkan kebingungan. saya benar-benar belum memahami sistem apa aja yang ada pada matlab. tapi alhamdulilah saya membaca postingan mas @adi pamungkas saya sedikit paham apa itu matlab.
klo boleh share ilmu saya lebih sering menggunakan programing berbasis php(web programming) dan saya juga membaca beberapa postingan mengenai koneksi matlab dengan database mysql dan koneksi php.
saya ingin minta bantuan untuk proses pengenalan sistem wajah yang ada pada matlab klo boleh share source coding nya mas.
terimakasih.
wasalammualaikum….
Waalaikumsalam hartono
Mudah2an ke depan terdapat materi mengenai sistem pengenalan wajah pada matlab
Semoga sukses untuk penelitiannya
mas mau tanya ii eror gui_mainfcn itu kenapa ya ?
Reference to non-existent field ‘axes1’.
Error in facedetection>pushbutton1_Callback (line 111)
axes(handles.axes1)
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in facedetection (line 46)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)facedetection(‘pushbutton1_Callback’,hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback
mas kalau mendeteksi mata, hidung, dan mulut gmana mas?. mohon bantuannya mas
bisa dilihat pada halaman berikut ini
https://pemrogramanmatlab.com/2018/05/31/ekstraksi-ciri-wajah-menggunakan-algoritma-viola-jones/
mas, kalau hasil dari source code tersebut mendeteksi object non wajah bagaimana cara meng-eliminasi-nya?
Source code di atas bisa dicoba diintegrasikan dengan source code yang ada pada halaman berikut
https://pemrogramanmatlab.com/2016/10/10/pengolahan-citra-untuk-deteksi-warna-kulit-skin-detection/
Bagaimana cara mencari nilai akurasi pada deteksi viola jones? Dan bisa berikan referensi papernya? Terima kasih sebelumnya.
mas mau tanya, gimana caranya mendeteksi wajah yang miring tidak frontal?
mas gimana cara mendeteksi ekspresi wajah ?
mas punya saya kodingannya error pada kode “function”
Source code lengkap bisa diperoleh melalui tokopedia sehingga bisa langsung dirunning dan dikembangkan
bang ko Error in facedetection (line 42)
gui_mainfcn(gui_State, varargin{:}); maksundnya apa yha maaf pemula
Source code lengkap bisa dibeli melalui tokopedia sehingga bisa langsung dijalankan tanpa error dan bisa dikembangkan