Tutorial Advanced MATLAB : Face Detection, Face Recognition (Bagian 1)

Setelah sebelumnya kita membahas, tentang GUI MATLAB, maka berikutnya kita akan lebih dalam menggunakan MATLAB untuk aplikasi MATLAB Lanjut, yaitu Aplikasi MATLAB untuk melakukan Face Detection dan Face Recognition. Untuk Keperluan hal ini, maka pastikan MATLAB yang anda gunakan sudah support dengan Hardware Webcam. Jika belum anda dapat melihat cara pemasangan support Hardware dengan MATLAB dengan link berikut : Support Hardware MATLAB

Agar lebih fokus pembahasannya, kita akan mulai Tutorial Advanced MATLAB kali ini dengan Proyek seperti gambar berikut :

Seperti yang anda lihat pada gambar diatas, dimana tampilan GUI MATLAB tersebut terdapat beberapa komponen :

  1. Uimenu untuk membuat menu-menu diatas,
  2. UiControl untuk membuat tombol-tombol (Push button)
  3. Axes untuk menampilkan gambar Background

Cara membuat GUI dengan komponen diatas, sudah pernah dibahas pada Tutorial sebelumnya, seperti pada link berikut : MATLAB GUI. Sehingga tutorial kali ini kita fokus pada script program yang kita butuhkan untuk mengakses Webcam, membuat video, memutar video dan menganalisa video khususnya untuk keperluan face detection, maupun face recognition.

  1. Mengakses atau menjalankan Webcam :
    idcam=1;
    camlis=webcamlist();
    zed = webcam(camlis{idcam})
    
  2. Merekam Video dan mengambil frame dari video :
    [height width channels] = size(snapshot(zed))
    % Create Figure and wait for keyboard interrupt to quit
    f = figure('name','Web Camera','keypressfcn','close','windowstyle','modal');
    ok = 1;
    aviObject = VideoWriter('contoh.avi');  % Create a new AVI file
    open(aviObject);
    % Start loop
    figure,
    while ok
          % Capture the current image
          img = snapshot(zed);
          writeVideo(aviObject, img);  % Add the image to the AVI file  
          % Split the side by side image image into two images 
          image(img);
          axis off;
          title('Image from Camera');
          drawnow;
          % Check for interrupts
          ok = ishandle(f);
    end  
    close(aviObject);  % Close the AVI file
    % close the camera instance
    clear zed
    
  3. Membuat dataset :
    load parameter
    if ~exist(nama, 'dir')
        mkdir(sprintf(nama));
    end
    
    faceDetector = vision.CascadeObjectDetector();
    videoReader = VideoReader(nama_file);
    videoReader.CurrentTime = 0.5;
    currAxes = axes;
    i=1;
    
    while hasFrame(videoReader)
        videoFrame = readFrame(videoReader);
        bbox       = step(faceDetector, videoFrame);
        videoFrame = insertShape(videoFrame, 'Rectangle', bbox);
        
        if (i<=10)
            nama_ = strcat(nama,num2str(i),'.jpg');
            fname=strcat(nama,'/',nama_);
            x=imcrop(videoFrame,bbox);
            imwrite(x,fname,'jpg');
            figure(2),image(x, 'Parent', currAxes);
            currAxes.Visible = 'off';
        else
            break;
        end
        
        %imshow(videoFrame); title('Detected face');
        %pause(1/videoReader.FrameRate);
        i=i+1;
    end
    
    
  4. Ekstraksi ciri : Deteksi Wajah, Deteksi Mata, Deteksi Hidung :
    Program MATLAB untuk Deteksi Wajah :

    load parameter
    faceDetector = vision.CascadeObjectDetector();
    videoReader = VideoReader(nama_file);
    videoReader.CurrentTime = 0.5;
    currAxes = axes;
    videoFrame      = readFrame(videoReader);
    bbox            = step(faceDetector, videoFrame);
    videoFrame = insertShape(videoFrame, 'Rectangle', bbox);
    IFaces = insertObjectAnnotation(videoFrame, 'rectangle', bbox, nama);
    image(IFaces), title('Detected faces');
    %image(videoFrame, 'Parent', currAxes);
    currAxes.Visible = 'off';
    title('Face Detection');
    Face=imcrop(videoFrame,bbox);
    figure,imshow(Face);
    

    Deteksi Mata :

    load parameter
    EyeDetect = vision.CascadeObjectDetector('EyePairBig'); 
    videoReader = VideoReader(nama_file);
    videoReader.CurrentTime = 0.5;
    currAxes = axes;
    videoFrame      = readFrame(videoReader);
    bbox2           = step(EyeDetect, videoFrame);
    videoFrame_2 = insertShape(videoFrame, 'Rectangle', bbox2);
    image(videoFrame_2, 'Parent', currAxes);
    currAxes.Visible = 'off';
    title('Eyes Detection');
    Eyes=imcrop(videoFrame,bbox2);
    figure,imshow(Eyes);
    

    Deteksi Hidung :

    load parameter
    videoReader = VideoReader(nama_file);
    videoReader.CurrentTime = 0.5;
    currAxes = axes;
    NoseDetect = vision.CascadeObjectDetector('Nose','MergeThreshold',16);
    videoFrame      = readFrame(videoReader);
    bbox2           = step(NoseDetect, videoFrame);
    videoFrame_2 = insertShape(videoFrame, 'Rectangle', bbox2);
    image(videoFrame_2, 'Parent', currAxes);
    currAxes.Visible = 'off';
    title('Nose Detection');
    Nose=imcrop(videoFrame,bbox2);
    figure,imshow(Nose);
    

    Deteksi Mulut :

    load parameter
    videoReader = VideoReader(nama_file);
    videoReader.CurrentTime = 0.5;
    currAxes = axes;
    MouthDetect = vision.CascadeObjectDetector('Mouth','MergeThreshold',20); 
    videoFramex      = readFrame(videoReader);
    bbox2x           = step(MouthDetect, videoFramex)
    videoFrame_2x = insertShape(videoFramex, 'Rectangle', bbox2x);
    image(videoFrame_2x, 'Parent', currAxes);
    currAxes.Visible = 'off';
    title('Mouth Detection');
    
    Bersambung
    
Suyatno Budiharjo

Suyatno Budiharjo

IKatlah Ilmu dengan Menuliskannya...

Leave a Reply

Your email address will not be published. Required fields are marked *