BAB III
PERANCANGAN PERANGKAT LUNAK
3.1. Sistem Pendeteksi Senyum
Sistem pendeteksi senyum dalam skripsi ini dibuat dengan membandingkan tiga buah metode, yaitu Harris Corner Detection, Edge Based Corner Detection, dan FAST Corner Detection. Sistem pendeteksi senyum ini bertujuan untuk mendeteksi citra masukan merupakan ekspresi tersenyum atau bukan.
Perancangan perangkat lunak sistem pendeteksi senyum ini dibuat dengan menggunakan Matlab 2012b. Source code pemrograman ditulis dengan Matlab dan telah dibuat untuk sistem pendeteksi senyum ini mencakup source code pra proses color segmentation, ketiga metode pendeteksi senyum, yaitu Harris Corner Detection, Edge Based Corner Detection, dan FAST Corner Detection.
3.2. Pemrosesan Data
Dalam skripsi ini, pada bagian pemrosesan data akan dilakukan proses konversi citra RGB ke grayscale, serta pra proses color segmentation.
3.2.1. Konversi Citra RGB ke Grayscale
Dalam skripsi ini, citra masukan yang masih berupa citra RGB seperti ditunjukkan pada Gambar 3.1, yang akan di konversi ke citra grayscale seperti ditunjukkan pada Gambar 3.2.
Gambar 3.1. Contoh Citra RGB Bibir yang Digunakan Dalam Skripsi
3.2.2. Color Segmentation
Pada skripsi ini, metode pra proses color segmentation menjadi kombinasi untuk membandingkan hasil akurasinya terhadap metode lain yang tidak di pra proses dengan color segmentation terlebih dahulu. Untuk mengekstraksi warna merah pada daerah bibir, digunakan metode thresholding pada citra RGB. Sistem akan mempertahankan warna asli pada citra yang memiliki nilai Red yang lebih dari 80, nilai Green yang kurang dari 80 dan nilai Blue yang kurang dari 100. Selain batas nilai ini, sistem akan mengubahnya menjadi warna hitam atau mengubah nilainya menjadi 0. Diagram alir color segmentation dapat dilihat pada Gambar 3.3. Source code pra proses color segmentation dapat dilihat pada Lampiran A.1.
Gambar 3.3. Diagram Alir Pra Proses Color Segmentation
Masukan dir = citra bibir yang
dideteksi dengan metode Viola Jones
y=imread(dir) pic(mm,nn,:)=[0,0,0] nn=nn+1 pic(mm,nn,1)<80 pic(mm,nn,2)>80 pic(mm,nn,3)>100 nn=size(pic,2)? Selesai Mulai Ya pic=y mm=1 nn=1 Tidak Tidak mm=size(pic,1)? Ya Tidak mm=mm+1 Ya
3.3. Harris Corner Detection
Pada metode Harris Corner Detection, citra masukan yang tidak di pra proses maupun yang sudah di pra proses akan dihitung nilai kesudutannya menggunakan parameter sigma dan konstanta sensitivitas yang diubah-ubah. Diagram alir metode Harris Corner Detection dapat dilihat pada Gambar 3.4. Source code metode Harris Corner Detection dapat dilihat pada Lampiran A.2.
Mulai
Masukan dir= citra bibir
pic=imread(dir) level=graythresh(pic) bw=im2bw(pic,level) im=double(bw(:,:,1)) sigma=1 k=0.09 dx=[-1 0 1; -1 0 1; -1 0 1] dy=dx’ Ix=conv2(im,dx,’same’) Iy=conv2(im,dy,’same’) g=fspecial(‘gaussian’,max (1,fix(6*sigma+1)),sigma) Ix2=conv2(Ix.^2,g,’same’) Iy2=conv2(Iy.^2,g,’same’) Ixy=conv2(Ix.*Iy,g,’same’) 1 1 cim=(Ix2.*Iy2-Ixy.^2)-k*(Ix2+Iy2).^2 [r,c,max_local]=findLocalMaximum(cim,3*sigma) thres=0.01*max(max_local(:)) [r,c]=find(max_local>=thres) points=[r,c] Selesai
3.4. Edge Based Corner Detection
Pada metode ini, citra masukan akan dideteksi tepiannya terlebih dahulu menggunakan Sobel edge detection terlebih dahulu sebelum citra dideteksi sudutnya menggunakan Harris Corner Detection. Diagram alir metode Edge Based Corner Detection dapat dilihat pada Gambar 3.5. Source code metode Edge Based Corner Detection dapat dilihat pada Lampiran A.3.
Mulai
Masukan dir=direktori citra
bibir yang telah diekstrak pic=imread(dir) level=graythresh(pic) bw=im2bw(pic,level) bw3=edge(bw,’sobel’) im=double(bw3(:,:,1)) sigma=1 k=0.09 dx=[-1 0 1; -1 0 1; -1 0 1] dy=dx’ Ix=conv2(im,dx,’same’) Iy=conv2(im,dy,’same’) g=fspecial(‘gaussian’,max (1,fix(6*sigma+1)),sigma) Ix2=conv2(Ix.^2,g,’same’) Iy2=conv2(Iy.^2,g,’same’) Ixy=conv2(Ix.*Iy,g,’same’) 2 2 cim=(Ix2.*Iy2-Ixy.^2)-k*(Ix2+Iy2).^2 [r,c,max_local]=findLocalMaximum(cim,3*sigma) thres=0.01*max(max_local(:)) [r,c]=find(max_local>=thres) points=[r,c] Selesai
3.5. FAST Corner Detection
Metode FAST Corner Detection terkenal dengan waktu komputasinya yang sangat cepat karena “hanya” membandingkan nilai satu titik terhadap empat titik di sekitarnya. Jika tidak ada minimal tiga buah titik yang memenuhi syarat, maka titik tersebut bukanlah titik sudut. Kemudian sistem akan bergeser ke titik baru untuk dibandingkan lagi nilainya. Kecepatan deteksi FAST Corner Detection jauh diatas Harris Corner Detection dan Edge Based Corner Detection. Diagram alir metode FAST Corner Detection dapat dilihat pada Gambar 3.6. Source code metode FAST Corner Detection dapat dilihat pada Lampiran A.4.
Mulai Masukan dir=citra bibir pic=imread(dir) pic=rgb2gray(pic) thres=11 ctr=0 kk=0 [yy xx]=size(pic) i=4 j=4 pic(j-3,i)>bts1 bts1=pic(j,i)+thres bts2=pic(j,i)-thres Tidak pic(j-3,i)<bts2 ctr=ctr+1 Ya ctr=ctr+1 Ya pic(j+3,i)>bts1 pic(j+3,i)<bts2 Tidak Tidak ctr=ctr+1 Ya ctr=ctr+1 Ya pic(j,i-3)<bts2 pic(j,i-3)>bts1 ctr=ctr+1 ctr=ctr+1 pic(j,i+3)>bts1 pic(j,i+3)<bts2 ctr=ctr+1 ctr=ctr+1 Ctr>=4? kk=kk+1 j=yy-3? j=j+1 i=xx-3? i=i+1 Selesai 3 Ya Ya 3 Tidak Tidak Ya 4 4
3.6. Deteksi Senyum
Metode-metode pendeteksi sudut yang sudah disebutkan sebelumnya akan berusaha menemukan titik sudut pada citra dengan ekspresi tersenyum. Titik sudut ini akan dirata-rata koordinat sumbu y nya untuk mendapatkan satu koordinat rata-rata ekspresi tersenyum. Proses diulang untuk kesemua dataset pelatihan untuk kemudian diperoleh koordinat rata-rata seluruh ekspresi tersenyum.
Proses pendeteksian dilakukan dengan melakukan rata-rata koordinat citra uji. Jika koordinat rata-rata citra uji lebih besar daripada koordinat rata-rata ekspresi tersenyum, maka citra tersebut bukan ekspresi tersenyum. Sebaliknya, jika koordinat rata-rata citra uji lebih kecil atau sama dengan koordinat rata-rata ekspresi tersenyum, maka citra merupakan ekspresi tersenyum. Diagram alir proses pendeteksian senyum dapat dilihat pada gambar 3.7.
Mulai
load nilai rata-rata ekspresi tersenyum
Deteksi titik sudut citra bibir
points = seluruh titik sudut yang terdeteksi oleh
sistem [xkiri, k] = max(points(:,2)); [i, j] = ind2sub(size(points), k); ykiri = points(i,1); [xkanan, k] = min(points(:,2)); [ii, jj] = ind2sub(size(points), k); ykanan = points(ii,1); rata=(ykiri+ykanan)/2;
rata < tengah? Tidak
Ya
Bukan Tersenyum
Ekspresi Tersenyum
Selesai
3.7. Perhitungan Akurasi
Perhitungan akurasi dilakukan dengan menghitung jumlah citra uji dengan ekspresi tersenyum yang dideteksi tersenyum oleh sistem dan menghitung jumlah citra uji dengan ekspresi bukan tersenyum yang dideteksi bukan tersenyum oleh sistem. Citra dengan ekspresi tersenyum yang dideteksi benar oleh sistem disebut True Positive (TP) dan citra dengan ekspresi bukan tersenyum yang dideteksi benar oleh sistem disebut True Negative (TN). Kedua parameter ini yang digunakan untuk menghitung. Tabel hasil TN dan TP dari setiap metode serta kombinasi parameternya dapat dilihat pada Lampiran B.
3.8. Pembuatan Dataset Skripsi
Dataset yang digunakan pada skripsi berupa citra bibir dengan ekspresi tersenyum dan ekspresi bukan tersenyum. Dataset diperoleh dengan menggunakan kamera digital dengan image quality small dan diambil dalam kondisi pencahayaan yang cukup dengan warna latar belakang yang rata seragam. Jarak antara kamera dengan subyek disesuaikan agar seluruh bagian wajah dapat tertangkap oleh kamera. Posisi kamera akan berada tegak lurus dari wajah subyek. Dataset ini kemudian akan diekstraksi bagian bibirnya saja dengan menggunakan bantuan metode Viola Jones dan diresize menjadi berukuran 260×100 piksel.
Dataset yang telah diperoleh dapat digunakan dalam proses pendeteksian senyum, baik sebagai dataset pelatihan maupun sebagai dataset pengujian. Dataset pelatihan akan terdiri dari 125 citra dengan ekspresi tersenyum lebar dan 125 citra dengan ekspresi tersenyum tipis.
Dataset pengujian True Positive terdiri dari 100 ekspresi tersenyum; 50 ekspresi tersenyum tipis dan 50 ekspresi tersenyum lebar, dan dataset pengujian True Negative terdiri dari 100 ekspresi selain tersenyum. Gambar 3.8 adalah dataset untuk ekspresi tersenyum lebar, Gambar 3.9 adalah dataset untuk ekspresi tersenyum tipis, dan Gambar 3.10 adalah dataset untuk ekspresi bukan tersenyum.
Gambar 3.8. Contoh Dataset dengan Ekspresi Tersenyum Lebar
Gambar 3.9. Contoh Dataset dengan Ekspresi Tersenyum Tipis
Gambar 3.10. Contoh Dataset dengan Ekspresi Bukan Tersenyum
3.9. Graphical User Interface
Pada skripsi ini juga dibuat fasilitas Graphical User Interface (GUI) pada Matlab untuk mendemokan sistem pendeteksi senyum. Fasilitas GUI dibuat agar pengguna lebih mudah mengoperasikan program yang telah dibuat pada skripsi ini. Selain itu, GUI juga dibuat untuk melakukan pengujian kualitas sistem pada sebuah citra. Fasilitas GUI ini meliputi tombol browse untuk memilih citra yang akan diuji, text untuk menampilkan direktori dari citra yang dipilih, dan sebuah axes untuk menampilkan citra yang dipilih. Terdapat sebuah popup menu yang berisi pilihan ketiga metode pendeteksi senyum yang akan digunakan dan radio button untuk pilihan penggunaan pra proses color segmentation.
Sebelum citra dideteksi, pengguna diwajibkan menekan tombol “DETECT” terlebih dahulu. Hasil pendeteksian senyum akan ditampilkan di sebuah kolom, dan sebuah kolom lainnya untuk menampilkan waktu komputasi dari metode yang dipilih. Gambar 3.11 adalah contoh GUI yang akan digunakan pada skripsi ini. Gambar 3.12 adalah contoh GUI yang menampilkan hasil pendeteksian ekspresi wajah dan waktu komputasinya. Source code Graphical User Interface dapat dilihat pada Lampiran A.6.
Gambar 3.11. Graphical User Interface Skripsi