• Tidak ada hasil yang ditemukan

Face Recognition Menggunakan Metode Two Dimensional Principal Components Analysis (2DPCA).

N/A
N/A
Protected

Academic year: 2017

Membagikan "Face Recognition Menggunakan Metode Two Dimensional Principal Components Analysis (2DPCA)."

Copied!
41
0
0

Teks penuh

(1)

FACE RECOGNITION MENGGUNAKAN METODE

TWO-DIMENSIONAL PRINCIPAL COMPONENTS ANALYSIS (2DPCA)

Kurnia Novita Mutu (0722029)

Jurusan Teknik Elektro Universitas Kristen Maranatha email: mutunia@gmail.com

ABSTRAK

Perkembangan biometrik pada teknologi informasi saat ini sangat pesat. Salah satu bidang biometrik yang sedang dikembangkan adalah Face Recognition. Face

recognition merupakan sebuah teknik pengolahan citra yang dapat mengenali seseorang

berdasarkan wajahnya. Pada Tugas Akhir ini metode face recognition yang digunakan adalah metode Two-Dimensional Principal Components Analysis (2DPCA).

Pada 2DPCA matriks citra dua dimensi tidak perlu diubah dulu menjadi vektor satu dimensi untuk ektraksi ciri seperti pada Principal Components Analysis (PCA). Matriks kovarian citra diperoleh langsung menggunakan matriks citra dan vektor – vektor proyeksinya (eigenvector) dicari yang saling orthonormal untuk ektraksi ciri.

Dari hasil uji coba aplikasi face recognition menggunakan metode

Two-Dimensional Principal Components Analysis (2DPCA) diketahui bahwa persentase

keberhasilan pengenalan, yang berkisar pada 94% sampai 96%, dipengaruhi oleh jumlah

eigenvector yang digunakan pada algoritma. Sedangkan, faktor pose dan ekspresi

mempengaruhi nilai feature vector citra.

Kata kunci : Face recognition, 2DPCA, eigenvektor, fitur vektor

(2)

Universitas Kristen Maranatha ii

FACE RECOGNITION USING TWO-DIMENSIONAL PRINCIPAL

COMPONENTS ANALYSIS (2DPCA) METHOD

Kurnia Novita Mutu (0722029)

Department of Electrical Engineering Maranatha Christian University email: mutunia@gmail.com

ABSTRACT

Recently the progress of biometrics in information technology is very rapid. A field of biometric area that is being developed is Face Recognition. Face recognition is an image processing technique that can identify a person based on his or her face. The method for face recognition which is used in this final project is Two-Dimensional Principal Components Analysis (2DPCA).

In the 2DPCA a two-dimensional image matrix does not need to be converted first into a one-dimensional image vector for feature extraction such as in Principal Components Analysis (PCA). Covariance matrix of the image is obtained directly using the image matrices and projection vectors (eigenvectors) are mutually orthonormal searched for features extraction.

From the test results of face recognition application using the Two-Dimensional Principal Components Analysis (2DPCA) it is noted that the percentage of successful of face recognition is between 94% to 96%. Percentage of successful is affected by the eigenvector values used in the algorithm. Meanwhile, factors of pose and expression affect the value of the feature vector of image.

(3)

DAFTAR ISI

Halaman

ABSTRAK ... i

ABSTRACT ... ii

KATA PENGANTAR ... iii

DAFTAR ISI ... v

DAFTAR GAMBAR ... vii

DAFTAR TABEL ... x

DAFTAR LAMPIRAN ... xi

BAB I. PENDAHULUAN ... 1

1.1 Latar Belakang ... 1

1.2 Rumusan Masalah ... 2

1.3 Tujuan ... 2

1.4 Pembatasan Masalah ... 3

1.5 Metodologi Penelitian... 3

1.6 Sistematika Pembahasan ... 4

BAB II. LANDASAN TEORI ... 6

2.1 Dasar Pengolahan Citra ... 6

2.1.1 Citra Garyscale... 6

2.2 Format Bitmap ... 7

2.3 Deteksi wajah menggunakan OpenCV... 7

2.4 Bahasa Pemograman Java... 8

2.5 Matriks ... 8

2.5.1 Matriks Kovarian... 9

2.5.2 Eigenvalue dan Eigenvector... 9

2.6 Pengenalan Wajah... 10

2.6.1 Two-Dimensional Principal Components Analysis (2DPCA)…... 11

(4)

Universitas Kristen Maranatha vi

BAB III. PERANCANGAN DAN REALISASI PERANGKAT LUNAK ... 14

3.1 Perancangan aplikasi face recognition menggunakan metode 2DPCA... 14

3.2 Penerapan Algoritma 2DPCA... 19

3.3 Perancangan Perangkat Lunak ... 20

3.3.1 Perangkat Lunak Aplikasi Face Recognition... 20

3.3.2 Realisasi Perangkat Lunak Aplikasi Face Recognition... 20

3.3.3 Cara Penggunaan Perangkat Lunak Aplikasi Face Recognition... 23

BAB IV. PENGUJIAN DAN ANALISIS DATA ... 27

4.1 Pengujian ... 27

4.1.1 Pengumpulan citra... 27

4.1.2 Pengolahan Citra... 40

4.1.3 Hasil Pengenalan Wajah... 41

4.2 Analisis Data... 52

4.2.1 Persentase Keberhasilan Pengenalan... 52

4.2.2 Citra Gagal Dikenali... 53

4.2.3 Analisa Pengaruh Pose dan Ekspresi Pada Nilai Feature Vector... 53

4.2.4 Contoh Kasus Citra Tidak Terdeteksi oleh Aplikasi Face Recognition... 56

BAB V. KESIMPULAN DAN SARAN ... 57

5.1 Kesimpulan ... 57

5.2 Saran ... 57

(5)

DAFTAR GAMBAR

Halaman

Gambar 2.1 Contoh matriks dengan 2 baris dan 3 kolom... 9

Gambar 3.1 Gambar Diagram blok aplikasi face recognition menggunakan metode 2DPCA... 14

Gambar 3.2 Diagram Alir Proses Pengumpulan Citra Acuan... 15

Gambar 3.3 Diagram Alir Proses Pengektraksian Citra Acuan... 16

Gambar 3.4 Diagram Alir Subrutin Ektraksi fitur 2DPCA... 16

Gambar 3.5 Diagram Alir Proses Face Recognition menggunakan metode 2DPCA... 18

Gambar 3.6 Gambar tampilan GUI aplikasi face recognition... 21

Gambar 3.7 Gambar bagian “source image” dan bagian ”face image”... 21

Gambar 3.8 Gambar menubar... 22

Gambar 3.9 Gambar button “Browse”, “Add”, dan “recognize”... 23

Gambar 3.10 Gambar tampilan saat browse gambar citra acuan... 23

Gambar 3.11 Gambar tampilan setelah gambar citra acuan... 24

Gambar 3.12 Gambar tampilan cara menambahkan wajah dari citra acuan ke folder... 25

Gambar 3.13 Gambar tampilan “Invalid Input”... 25

Gambar 3.14 Gambar tampilan “Input” saat memilih tool “Set Number of Selected Eigen Vector (d)”... 26

Gambar 3.13 Gambar tampilan “Result Dialog”... 26

Gambar 4.1 Gambar Citra Acuan Alfian 1-5... 28

Gambar 4.2 Gambar Citra Acuan Budiman 1-5... 28

Gambar 4.3 Gambar Citra Acuan Febryan 1-5... 29

Gambar 4.4 Gambar Citra Acuan Imelda 1-5... 29

Gambar 4.5 Gambar Citra Acuan Kurnia 1-5... 30

(6)

Universitas Kristen Maranatha viii

Gambar 4.7 Gambar Citra Acuan Pak Ade 1-5... 31

Gambar 4.8 Gambar Citra Acuan Thari 1-5... 31

Gambar 4.9 Gambar Citra Acuan Yanimi 1-5... 32

Gambar 4.10 Gambar Citra Acuan Yosua 1-5... 32

Gambar 4.11 Gambar Citra Acuan Alfian 1-5 setelah diolah... 32

Gambar 4.12 Gambar Citra Acuan Budiman 1-5 setelah diolah... 33

Gambar 4.13 Gambar Citra Acuan Febryan 1-5 setelah diolah... 33

Gambar 4.14 Gambar Citra Acuan Imelda 1-5 setelah diolah... 33

Gambar 4.15 Gambar Citra Acuan Kurnia1-5 setelah diolah... 33

Gambar 4.16 Gambar Citra Acuan Nelson 1-5 setelah diolah... 34

Gambar 4.17 Gambar Citra Acuan Pak Ade 1-5 setelah diolah... 34

Gambar 4.18 Gambar Citra Acuan Thari 1-5 setelah diolah... 34

Gambar 4.19 Gambar Citra Acuan Yanimi setelah diolah... 34

Gambar 4.20 Gambar Citra Acuan Yosua 1-5 setelah diolah... 35

Gambar 4.21 Gambar Citra Uji Alfian A-E…... 35

Gambar 4.22 Gambar Citra Uji Budiman A-E... 36

Gambar 4.23 Gambar Citra Uji Febryan A-E... 36

Gambar 4.24 Gambar Citra Uji Imelda A-E... 37

Gambar 4.25 Gambar Citra Uji Kurnia A-E... 37

Gambar 4.26 Gambar Citra Uji Nelson A-E... 38

Gambar 4.27 Gambar Citra Uji Pak Ade A-E... 38

Gambar 4.28 Gambar Citra Uji Thari A-E... 39

Gambar 4.29 Gambar Citra Uji Yanimi A-E... 39

Gambar 4.30 Gambar Citra Uji Yosua A-E... 40

Gambar 4.31 Gambar citra wajah Alfian yang gagal dikenali …... 52

Gambar 4.32 Gambar citra wajah Pak Ade yang gagal dikenali... 53

Gambar 4.33 Gambar persegi penanda wajah yang terdeteksi dan hasil pemotongan... 53

Gambar 4.34 Gambar contoh perbandingan citra wajah Febryan 1 terhadap citra wajah Febryan 1 – 5.. ... 55

(7)
(8)

Universitas Kristen Maranatha x

DAFTAR TABEL

Halaman Tabel 4.1 Tabel J(X) dan eigenvalue dari 10 buah vektor proyeksi yang

memaksimalkan ... 41

Tabel 4.2 Tabel pengujian menggunakan 10 buah eigenvector... 42

Tabel 4.3 Tabel pengujian menggunakan 8 buah eigenvector... 43

Tabel 4.4 Tabel pengujian menggunakan 6 buah eigenvector... 45

Tabel 4.5 Tabel pengujian menggunakan 4 buah eigenvector... 46

Tabel 4.6 Tabel pengujian menggunakan 2 buah eigenvector... 48

Tabel 4.7 Tabel pengujian menggunakan 1 buah eigenvector... 50

Tabel 4.8 Tabel Persentase Keberhasilan Pengenalan... 52

(9)

DAFTAR LAMPIRAN

Halaman

(10)

LAMPIRAN

(11)

package com.fr.core;

* @author Kurnia Novita Mutu */

public class FaceDetector {

private static final String CASCADE_FILE =

"C:\\opencv\\data\\haarcascades\\haarcascade_frontalface_alt_tree.xml"; //"haarcascade_frontalface_alt.xml";

private static final int SCALE = 2;

private static final opencv_objdetect.CvHaarClassifierCascade cascade = new opencv_objdetect.CvHaarClassifierCascade(opencv_core.cvLoad(CASCADE_FI LE)); // instantiate a classifier cascade for face detection

public static BufferedImage detectFace(opencv_core.IplImage origImg) {

opencv_imgproc.cvCvtColor(origImg, grayImg, opencv_imgproc.CV_BGR2GRAY);

// scale the grayscale (to speed up face detection) opencv_core.IplImage smallImg =

opencv_core.IplImage.create(grayImg.width()/SCALE, grayImg.height()/SCALE, opencv_core.IPL_DEPTH_8U, 1);

opencv_imgproc.cvResize(grayImg, smallImg, opencv_imgproc.CV_INTER_LINEAR);

// equalize the small grayscale opencv_core.IplImage equImg =

opencv_core.IplImage.create(smallImg.width(), smallImg.height(), opencv_core.IPL_DEPTH_8U, 1);

opencv_imgproc.cvEqualizeHist(smallImg, equImg); // create temp storage, used during object detection opencv_core.CvMemStorage storage =

opencv_core.CvMemStorage.create();

opencv_core.CvSeq faces = opencv_objdetect.cvHaarDetectObjects(equImg, cascade, storage, 1.1, 3,

(12)

A-2 opencv_core.cvClearMemStorage(storage);

// iterate over the faces and draw yellow rectangles around them

faceBufferedImage = origImg.getBufferedImage().getSubimage(x1, y1, width, height);

opencv_core.cvRectangle(origImg, opencv_core.cvPoint(x1,y1), opencv_core.cvPoint(x2,y2), opencv_core.CvScalar.YELLOW, 1, opencv_core.CV_AA, 0); // undo the scaling

}

//Deallocate grayImg, smallImg, equImg because it's not used anymore. grayImg.release();

* @author Kurnia Novita Mutu */

@XmlRootElement

public class MapOfFeatureVector {

(13)

LinkedHashMap<>();

public LinkedHashMap<String, double[][]> getMapOfFeatureVector() {

return mapOfFeatureVector; }

public void setMapOfFeatureVector(LinkedHashMap<String, double[][]> mapOfFeatureVector)

{

this.mapOfFeatureVector = mapOfFeatureVector; }

public double[][] put(String key, double[][] value) {

return mapOfFeatureVector.put(key, value); }

public Set<Map.Entry<String,double[][]>> entrySet() {

* @author Kurnia Novita Mutu */

public class Matrix2D {

(14)

A-4

public static double[][] sub(double[][] a, double[][] b, double[][] result) {

public static double[][] multiply(double[][] a, double[][] b) {

(15)

int rows = a.length;

public static double[][] transpose(double[][] a) {

(16)

A-6

(17)

import com.fr.file.FileUtils;

* @author Kurnia Novita Mutu */

public class MyEigenSelector implements Comparable<MyEigenSelector> {

private int index; private double j;

private static double[][] convertMatrix64F(Matrix64F matrix64F) {

int eigenVectorRows = matrix64F.numRows; int eigenVectorCols = matrix64F.numCols;

double[][] eigenVector = new double[eigenVectorRows][eigenVectorCols]; for(int i=0; i<eigenVectorRows; i++)

public static List<Integer> getListOfOrthonormalIndex(EigenDecomposition ed)

{

char sep = MyProperties.PCA_2D_LOG_SEPARATOR;

StringBuilder log = new StringBuilder();

log.append("sep=").append(sep).append("\r\n"); log.append("List of Eigen Value & Eigen Vector\r\n"); log.append("Index").append(sep).append("Eigen Value").append(sep).append("Eigen Vector\r\n");

List<Integer> listOfOrthonormalIndex = new LinkedList<>(); List<double[][]> temp = new ArrayList<>();

(18)

A-8

log.append("List of Orthonormal Matrices's Index\r\n"); log.append("No.").append(sep).append("Index Matrix I").append(sep).append("Index Matrix II\r\n");

(19)

listOfEigenVector) {

char sep = MyProperties.PCA_2D_LOG_SEPARATOR;

StringBuilder log = new StringBuilder(); log.append("\r\n");

log.append("List of selected Eigen Value & Eigen Vector\r\n"); log.append("Index").append(sep).append("Eigen

Value").append(sep).append("J(Sx)").append(sep).append("Eigen Vector\r\n");

StringBuilder orthonormalInfo = new StringBuilder();

List<Integer> listOfSelectedIndex = getListOfOrthonormalIndex(ed);

List<MyEigenSelector> listOfEigenSelectors = new LinkedList<>();

for(int i=0; i<listOfSelectedIndex.size(); i++) {

int selectedIndex = listOfSelectedIndex.get(i);

double[][] t = convertMatrix64F(ed.getEigenVector(selectedIndex)); double[][] xt = Matrix2D.transpose(t);

(20)

A-10

(21)

* @author Kurnia Novita Mutu */

public class Pca2dAlgorithm {

public static double[][] getMean(ArrayList<double[][]> listOfArrayData) {

int size = listOfArrayData.size();

double[][] result = Matrix2D.copy(listOfArrayData.get(0));

public static Pca2dResult trainingData() {

File rootOfFaceRecognitionDatabase = new File(MyProperties.PARENT_FILE_PATH);

File[] listOfDatabaseFolder = rootOfFaceRecognitionDatabase.listFiles(new FileFilter()

(22)

A-12

Pca2dResult pca2dResult = calculatedPca2d(mapOfOriginalImageData); return pca2dResult;

}

public static Pca2dResult calculatedPca2d(LinkedHashMap<String,double[][]> mapOfOriginalImageData)

{

//Calculate the mean of image matrix. ArrayList<double[][]> listOfData = new ArrayList<>(mapOfOriginalImageData.values());

double[][] mean = Pca2dAlgorithm.getMean(listOfData);

//Normalize all image matrix.

(23)

Matrix2D.scale(c, 1D/mapOfNormalizedImageData.size(), c);

//Calculate the EigenVector.

DenseMatrix64F dm = new DenseMatrix64F(c);

EigenDecomposition ed = DecompositionFactory.eig(100, true); //Matrix size = 100 is not used, but must use to create an instance of EigenDecomposition. I used 100 because the picture is 100x100.

ed.decompose(dm);

//Get eigen value & eigen vector

LinkedList<Double> listOfEigenValue = new LinkedList<>(); LinkedList<double[][]> listOfEigenVector = new LinkedList<>(); MyEigenSelector.selectEigenVector(ed, c, listOfEigenValue, listOfEigenVector);

LinkedList<MapOfFeatureVector> listOfMapOfFeatureVector = new LinkedList<>();

listOfMapOfFeatureVector.add(mapOfOneImageFeatureVector); }

Pca2dResult pca2dResult = new Pca2dResult(); pca2dResult.setListOfEigenValue(listOfEigenValue); pca2dResult.setListOfEigenVector(listOfEigenVector);

pca2dResult.setListOfMapOfFeatureVector(listOfMapOfFeatureVector);

return pca2dResult; }

public static String recognized(Pca2dResult pca2dResult, double[][] testImage, Map<String,Double> mapOfResultInfo)

{

List<Double> listOfEigenValue = pca2dResult.getListOfEigenValue(); List<double[][]> listOfEigenVector = pca2dResult.getListOfEigenVector(); List<MapOfFeatureVector> listOfMapOfFeatureVector =

(24)

A-14

List<double[][]> listOfFeatureVectorOfTestImage = new LinkedList<>();

for(int i=0; i<listOfEigenValue.size(); i++) {

double[][] featureVectorOfTestImage = Matrix2D.multiply(testImage, listOfEigenVector.get(i));

listOfFeatureVectorOfTestImage.add(featureVectorOfTestImage); }

double minRange = Double.POSITIVE_INFINITY; String result = "";

for(MapOfFeatureVector mapOfFeatureVector : listOfMapOfFeatureVector) {

int i = 0;

double range = 0; String key = "";

(25)

return result; }

}

package com.fr.core; import java.io.Serializable; import java.util.LinkedList;

import javax.xml.bind.annotation.XmlRootElement; /**

*

* @author Kurnia Novita Mutu */

@XmlRootElement

public class Pca2dResult implements Serializable {

private LinkedList<Double> listOfEigenValue; private LinkedList<double[][]> listOfEigenVector;

private LinkedList<MapOfFeatureVector> listOfMapOfFeatureVector;

public Pca2dResult() {

}

public LinkedList<Double> getListOfEigenValue() {

return listOfEigenValue; }

public void setListOfEigenValue(LinkedList<Double> listOfEigenValue) {

this.listOfEigenValue = listOfEigenValue; }

public LinkedList<double[][]> getListOfEigenVector() {

return listOfEigenVector; }

public void setListOfEigenVector(LinkedList<double[][]> listOfEigenVector) {

this.listOfEigenVector = listOfEigenVector; }

public LinkedList<MapOfFeatureVector> getListOfMapOfFeatureVector() {

return listOfMapOfFeatureVector; }

(26)

A-16 {

this.listOfMapOfFeatureVector = listOfMapOfFeatureVector; }

}

package com.fr.core; /**

*

* @author Kurnia Novita Mutu */

public class Preference {

private static Preference instance;

private int numberOfSelectedEigenVector = 10; private Preference()

{ }

public int getNumberOfSelectedEigenVector() {

return numberOfSelectedEigenVector; }

public void setNumberOfSelectedEigenVector(int numberOfSelectedEigenVector)

{

this.numberOfSelectedEigenVector = numberOfSelectedEigenVector; }

public static Preference getInstance() {

if(instance==null) {

instance = new Preference(); }

return instance; }

}

package com.fr.file;

import com.fr.core.Pca2dResult; import com.fr.properties.MyProperties; import java.awt.image.BufferedImage; import java.io.BufferedReader;

import java.io.BufferedWriter; import java.io.File;

(27)

import java.io.FileReader;

* @author Kurnia Novita Mutu */

public class FileUtils {

public static void writePca2dResult(Pca2dResult pca2dResult, String path) {

try {

JAXBContext context = JAXBContext.newInstance(Pca2dResult.class); Marshaller marshaller = context.createMarshaller();

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

marshaller.marshal(pca2dResult, new BufferedWriter(new FileWriter(path)));

public static Pca2dResult readPca2dResult(String path) {

Pca2dResult pca2dResult = null; try

{

(28)

A-18 return pca2dResult;

}

public static boolean addSampleImage(String name, BufferedImage image) {

(29)

} }

package com.fr.file; import java.io.File;

import java.io.Serializable;

import javax.swing.filechooser.FileFilter; /**

*

* @author Kurnia Novita Mutu */

public class MyFileFilter extends FileFilter implements Serializable {

private String filter; private String name;

public MyFileFilter(String filter, String name) {

this.filter = filter.toLowerCase(); this.name = name;

}

@Override

public boolean accept(File f) {

if(f.isDirectory()) {

return true; }

String fileName = f.getName().toLowerCase(); return fileName.endsWith(filter);

}

@Override

public String getDescription() {

return name; }

}

package com.fr.image.util;

import java.awt.image.BufferedImage; import java.awt.image.WritableRaster; import java.io.File;

(30)

A-20 }

public void refreshImageViewer(opencv_core.IplImage img) {

BufferedImage faceBufferedImage = FaceDetector.detectFace(img); imageViewer1.setBufferedImage(img.getBufferedImage());

scaleFaceBufferedImage.getGraphics().drawImage(scaleFaceImage, 0, 0, null);

imageViewer2.setBufferedImage(scaleFaceBufferedImage); } // Proses Rescale dan Grayscale

public static void main(String args[]) {

/*

* Create and display the form */

java.awt.EventQueue.invokeLater(new Runnable() { private javax.swing.JButton addBtn;

private javax.swing.JButton browseSourceImageBtn; private com.fr.image.viewer.ImageViewer imageViewer1; private com.fr.image.viewer.ImageViewer imageViewer2; private javax.swing.JMenu jMenu1;

private javax.swing.JMenu jMenu2;

private javax.swing.JMenuBar jMenuBar1; private javax.swing.JMenuItem jMenuItem1; private javax.swing.JMenuItem jMenuItem2; private javax.swing.JMenuItem jMenuItem4; private javax.swing.JPanel jPanel1;

(31)

private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4;

private javax.swing.JSplitPane jSplitPane1; private javax.swing.JButton recognizeBtn; // End of variables declaration

* @author Kurnia Novita Mutu */

public class ResultDialog extends javax.swing.JDialog {

public ResultDialog(java.awt.Frame parent, boolean modal) {

super(parent, modal); initComponents();

tableResult.setAutoCreateRowSorter(true);

DefaultRowSorter sorter = ((DefaultRowSorter)tableResult.getRowSorter()); ArrayList list = new ArrayList();

list.add(new RowSorter.SortKey(1, SortOrder.ASCENDING)); sorter.setSortKeys(list);

(32)

A-22

lblResultName.setText(name);

DefaultTableModel dtm = (DefaultTableModel)tableResult.getModel();

for(Map.Entry<String,Double> entry : mapOfResultInfo.entrySet()) {

* This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always

* regenerated by the Form Editor. */

@SuppressWarnings("unchecked")

// <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents()

{ lblResultName.setText("Result Name");

(33)

{

jScrollPane1.setViewportView(tableResult);

imageFrame.setBorder(javax.swing.BorderFactory.createTitledBorder("")); javax.swing.GroupLayout layout = new .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,

(34)

A-24 .addContainerGap()

.addComponent(imageFrame,

javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lblResultName)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jScrollPane1,

javax.swing.GroupLayout.DEFAULT_SIZE, 202, Short.MAX_VALUE) .addContainerGap())

); pack();

}// </editor-fold>

// Variables declaration - do not modify private javax.swing.JLabel imageFrame;

private javax.swing.JScrollPane jScrollPane1; private javax.swing.JLabel lblResultName; private javax.swing.JTable tableResult; // End of variables declaration }

package com.fr.properties; /**

*

* @author Kurnia Novita Mutu */

public class MyProperties {

public static final String PARENT_FILE_PATH = "D:\\FR2"; public static final String PCA_2D_RESULT_PATH =

PARENT_FILE_PATH+"\\Pca2dResult.xml"; public static final String PCA_2D_LOG = PARENT_FILE_PATH+"\\Pca2dLog.csv";

public static final char PCA_2D_LOG_SEPARATOR = '\t';

(35)

1 Universitas Kristen Maranatha

BAB I

PENDAHULUAN

1.1 Latar Belakang Masalah

Setiap manusia diciptakan dengan bentuk fisik dan rupa yang berbeda sehingga manusia tersebut dapat dibedakan satu dengan yang lainnya. Pada teknologi informasi keunikan bentuk fisik manusia ini dapat dijadikan sebagai masukan pada sebuah sistem identifikasi, otentifikasi ataupun sistem keamanan. Masukan tersebut layaknya sebuah PIN (personal identification number) atau

password. Contoh masukan sistem identifikasi, otentifikasi ataupun sistem

keamanan yang sering digunakan adalah sidik jari, suara, retina, iris mata dan wajah. Masukan-masukan sistem tersebut disebut biometrik.

Biometrik yang sekarang ini sering digunakan adalah biometrik wajah. Contohnya pada beberapa smartphone dapat dijumpai aplikasi face recognition

lock screen (pengenalan wajah untuk penguncian layar). Face recognition

(pengenalan wajah) sendiri adalah proses pengenalan manusia berdasarkan pada pola wajah.

Pada tugas akhir ini penulis membuat aplikasi face recognition untuk mengidentifikasi manusia berdasarkan pola wajahnya. Telah banyak metode-metode face recognition yang dikembangkan. Salah satu metode-metode yang terkenal adalah metode Principal Components Analysis (PCA) yang awalnya diusulkan oleh Sirovich dan Kirby dan kemudian dikembangkan oleh Turki dan Pentland. PCA merepresentasikan sebuah matriks citra sebagai vektor sehingga ukuran vektor bisa sangat besar. Sebagai contoh, citra wajah yang berukuran 195x231 memiliki ukuran vektor 195x231=45045. Ukuran vektor yang besar menjadi masalah saat implementasi PCA ketika menghitung eigenvector dari matriks kovarians kumpulan citra - citra pada sampel data. Untuk menghindari masalah tersebut, Yang dkk mengusulkan metode Two-Dimensional Principal Components

(36)

BAB I Pendahuluan

2 Universitas Kristen Maranatha Metode 2DPCA dikembangkan untuk representasi citra wajah yang didasarkan pada matriks citra 2D. Metode ini menggunakan teknik proyeksi langsung sehingga matriks citra sebelum tahap ekstraksi fitur tidak perlu ditransformasikan ke dalam sebuah bentuk vektor citra terlebih dulu, melainkan matriks kovarian citranya dapat dibentuk langsung dari matriks citra aslinya.

Berdasarkan uraian tersebut diatas penulis akan mencoba untuk membuat aplikasi face recognition menggunakan metode 2DPCA.

1.2 Rumusan Masalah

Rumusan masalah pada tugas akhir ini adalah sebagai berikut,

1. Bagaimana proses face recognition menggunakan algoritma metode 2DPCA.

2. Bagaimana kinerja dari face recognition menggunakan metode 2DPCA.

3. Bagaimana merancang perangkat lunak untuk aplikasi face recognition dengan metode 2DPCA menggunakan bahasa pemograman Java.

1.3 Tujuan

Tujuan yang ingin dicapai pada tugas akhir ini adalah sebagai berikut, 1. Memahami proses face recognition menggunakan metode 2DPCA. 2. Menganalisa kinerja dari face recognition menggunakan metode

2DPCA.

(37)

BAB I Pendahuluan

3 1.4 Pembatasan Masalah

Dalam pembuatan tugas akhir ini diperlukan adanya batasan-batasan agar tidak menyimpang dari yang telah direncanakan sehingga tujuan yang sebenarnya dapat tercapai. Adapun batasan-batasan tersebut adalah

1. Citra wajah yang akan diolah diambil dengan menggunakan webcam. 2. Ukuran citra yang digunakan adalah 100 x 100 piksel.

3. Hanya 1 (satu) objek wajah pada 1 (satu) citra. 4. Citra wajah diambil dari 10 individu yang berbeda

5. Jumlah citra wajah yang akan diolah sebagai citra acuan maupun citra uji masing – masing 5 (lima) buah.

6. Perancangan aplikasi menggunakan library computer vision OpenCV. 7. Kondisi cahaya dianggap normal untuk setiap citra

8. Perancangan aplikasi menggunakan bahasa pemograman Java.

1.5 Metodologi Penelitian

Dalam penyelesaian tugas akhir ini dibutuhkan metode penelitian, antara lain

1. Studi Literatur

Pada tahap ini dilakukan pengumpulan informasi – informasi dan referensi yang terkait dengan metode dan perangkat lunak yang akan digunakan pada tugas akhir ini. Informasi-informasi tersebut dapat diperoleh dari paper, buku, artikel dan lain lain yang berkaitan dengan pengenalan wajah, Two-Dimensional Principal Components Analysis,

library computer vision OpenCV dan bahasa pemograman Java.

2. Perancanngan Perangkat Lunak

(38)

BAB I Pendahuluan

4 Universitas Kristen Maranatha 3. Pengumpulan Data

Dilakukan pengumpulan data berupa gambar citra yang diambil menggunakan webcam dari 10 individu yang berbeda dengan 10 gambar citra yang bervariasi per masing – masing individu.

4. Pengujian Sistem Perangkat Lunak

Realisasi sistem perangkat lunak yang telah didesain akan diuji kinerjanya menggunakan data pengamatan yang telah dikumpulkan sebelumnya.

1.6 Sistematika Penulisan

Untuk memberikan gambaran yang jelas mengenai penulisan tugas akhir ini, maka ditentukan sistematika penulisan sebagai berikut

BAB I PENDAHULUAN

Bab ini membahas latar belakang penulisan tugas akhir, perumusan masalah, tujuan, pembatasan masalah serta metodologi penelitian.

BAB II LANDASAN TEORI

Bab ini membahas dasar-dasar teori yang berkaitan dengan topik dan perangkat lunak yang dibutuhkan pada penulisan tugas akhir ini.

BAB III PERANCANGAN DAN REALISASI PERANGKAT LUNAK

(39)

BAB I Pendahuluan

5 BAB IV PENGUJIAN DAN ANALISIS DATA

Bab ini berisi hasil data pengamatan saat pengujian dan analisa data pengamatan yang diperoleh pada tahap pengujian.

BAB V KESIMPULAN DAN SARAN

(40)

57 Universitas Kristen Maranatha

BAB V

KESIMPULAN DAN SARAN

Bab ini berisi kesimpulan dari hasil uji coba yang telah dilakukan serta saran untuk pengembangan aplikasi selanjutnya.

5.1 Kesimpulan

Berikut penulis akan memaparkan beberapa kesimpulan dari hasil uji coba yang telah dilakukan.

1. Perancangan perangkat lunak untuk aplikasi face recognition dengan metode 2DPCA menggunakan bahasa pemograman Java telah berhasil direalisasikan

2. Pengenalan wajah menghasilkan tingkat persentase keberhasilan berkisar pada 94 % sampai 96% untuk jumlah eigenvector 1-10.

3. Persentase keberhasilan dipengaruhi oleh jumlah eigenvector yang digunakan pada tahap pengenalan.

4. Faktor pose dan ekspresi pada citra wajah mempengaruhi nilai feature

vector untuk pengenalan pada aplikasi face recognition.

5.2Saran

Berikut merupakan saran untuk pengembangan aplikasi face recognition menggunakan metode 2DPCA lebih lanjut.

1. Untuk mendapatkan tingkat keberhasilan pengenalan yang lebih tinggi bisa dicoba penambahan sample data dan sample data yang lebih variatif 2. Untuk pengembangan lebih lanjut disarankan untuk menggunakan pose

(41)

58

DAFTAR PUSTAKA

[1].J. Yang, J.Y. Yang, “From Image Vector to Matrix: A Straightforward Image Projection Technique—IMPCA vs. PCA” Pattern Recognition, vol. 35, no. 9, pp. 1997-1999, 2002

[2].Yang, J., Zhang, D., Frangi, A.F., Yang, J.Y., (2004), “Two-Dimensional PCA : A New Approach to Appearance-Based Face Representation and Recognition”,

IEEE Trans. Pattern Anal. Amch. Intell. Vol.26, No.1, hal. 131-137.

[3].Liwei Wang, Xiao Wang, Xuerong Zhang, Jufu Feng. “The Equivalence of Two-Dimensional PCA to Line-Based PCA”. Peking, China : Center for Information Sciences, Peking University.

[4].Darma Putra. (2010). Pengolahan Citra Digital. Yogyakarta : Andi Offset [5].http://id.wikipedia.org/wiki/KNN

[6].http://maseadi.wordpress.com/2013/01/08/perbedaan-vektor-dan-bitmap/ [7].http://id.wikipedia.org/wiki/Java

[8]. http://gofat.wordpress.com/2012/04/12/face-detection-dengan-metoda-haar-cascade/

Referensi

Dokumen terkait

Lalu ada juga anggota Poltabes Medan Iptu Oloan Hutasoit yang pada 24 Januari 2007 menembak sepasang pengantin dan menghabisi nyawanya sendiri (Regina, 2007). Berdasarkan hal

Hasil pengujian tambahan variasi variabel independent terhadap variabel dependent menunjukkan bahwa tingkat pengungkapan modal intelektual berpengaruh signifikan negatif

 Stoplist atau stopword adalah kata-kata yang tidak deskriptif (tidak penting ) yang dapat dibuang dengan pendekatan bag-of-words ... Stopword Removal :

Data yang diperoleh di dalam penelitian berjumlah 76 data, dari hasil penelitian yang penulis temukan di dalam penelitian ini adalah bentuk dan skala kesantunan

Sedangkan pada penelitian yang dilakukan oleh Suhaidi (2003) mengenai pengaruh lama perendaman kedelai dan jenis penggumpal terhadap mutu tahu menunjukan bahwa

Penelitian yang berjudul ” Sistem Informasi Penjadwalan Kuliah Program Studi Sistem Informasi Universitas Muria Kudus” ini pada dasarnya disusun untuk memenuhi persyaratan

area teduh dapat digunakan untuk makan siang di area tersebut), tetapi juga harus. fleksibel untuk mengakomodir aktivitas lain yang terpikirkan

Pada penelitian ini tidak terdapat hubungan antara postur pergelangan tangan dengan Carpal Tunnel Syndrome pada Violinis Chamberstring Orkestra baik pada tangan