BAB II LANDASAN TEORI
2.1 Rekayasa Perangkat Lunak 2.1.1
Pengertian Rekayasa Perangkat Lunak Untuk mengartikan Rekayasa Perangkat Lunak, dimulai dengan kata
‘rekayasa / engineering’, yang berarti menjadikan ada sesuatu yang sebelumnya tidak ada. Sedangkan kata perangkat lunak / software adalah aplikasi yang dibangun dengan program komputer dengan fungsi utama untuk melakukan otomatisasi proses bisnis dengan performa dan kegunaan
yang telah
terdeskripsikan dalam suatu dokumentasi bagi para penggunanya (Rizky, 32). Perangkat lunak lebih merupakan elemen logika dan bukan merupakan elemen sistem fisik. Dengan demikian perangkat lunak memiliki ciri yang berbeda dengan perangkat keras, berikut ini adalah karakteristiknya (Pressman, 10). a. Perangkat lunak dibangun dan dikembangkan, tidak dibuat dalam bentuk klasik. b. Perangkat lunak tidak pernah usang. c. Sebagian besar perangkat lunak dibuat secara costum-built, serta tidak dapat dirakit dari komponen yang sudah ada. Rekayasa perangkat lunak (software engineering) adalah sebuah disiplin ilmu yang mencakup segala hal yang berhubungan dengan proses pengembangan perangkat lunak sejak dari tahap perancangan hingga tahapan implementasi serta pasca implementasi sehingga siklus hidup perangkat lunak dapat berlangsung secara efisien dan terukur (Rizky, 20)
2.1.2
Tujuan Rekayasa Perangkat Lunak Menurut Pressman (23) bahwa tujuan rekayasa perangkat lunak adalah
menyediakan sebuah kerangka kerja guna membangun perangkat lunak dengan kualitas yang lebih tinggi.
6
7
2.1.3
Metodologi Pengembangan Perangkat Lunak Metodologi pengembangan perangkat lunak atau disebut juga model
proses atau paradigma rekayasa perangkat lunak adalah suatu strategi pengembangan yang memadukan proses, metode dan perangkat. Dalam pengembangan perangkat lunak dikenal lapisan perangkat lunak (Pressman, 28) yaitu merupakan suatu teknologi berlapis yaitu proses, metode dan alat bantu. Fokus kualitas sebagai dasar utamanya. Lapisan rekayasa perangkat lunak dapat dilihat pada Gambar 2.1
Gambar 2.1 Lapisan rekayasa perangkat Lunak (Pressman, 28)
Dari gambar lapisan tersebut, terlihat sangat jelas bahwa pondasi utama rekayasa perangkat lunak adalah kualitas dari perangkat lunak itu sendiri. Dan untuk mencapai kualitas yang diinginkan tersebut dibutuhkan sebuah proses dari pengembangan perangkat lunak yang saling mendukung antar KPA (Key Process Area). KPA merupakan langkah-langkah kunci yang secara strategis menjadi langkah penting dalam pengembangan perangkat lunak. Sedangkan yang dimaksud metode dalam lapisan tersebut adalah langkahlangkah teknis yang merupakan implementasi dari lapisan proses. Dalam lapisan ini di dalamnya terdapat pelaksanaan analisa, perancangan, implementasi dan pengujian. Sehingga dapat dikatakan bahwa lapisan ini merupakan lapisan pengerjaan dari perangkat lunak itu sendiri. Tools / alat bantu adalah perangkat yang bersifat otomatis dan manual yang berfungsi mendukung tiap tahap pengembangan perangkat lunak. Alat bantu tersebut tidak terbatas pada bahasa pemrograman dan basis data, tetapi juga alat bantu untuk perangcangan perangkat lunak.
8
2.1.4
Tahapan Pengembangan Perangkat Lunak Pressman (30) menyatakan bahwa usaha yang berhubungan dengan
rekayasa perangkat lunak dikategorikan dalam tiga fase umum yaitu: 1. Fase definisi (Definition phase) berfokus pada “apa” (what), dimana pada definisi ini pengembang perangkat lunak harus mengidentifikasi informasi apa yang akan diproses , fungsi dan unjuk kerja apa yang dibutuhkan, tingkah laku sistem seperti apa yang diharapkan, interface apa yang akan dibangun, batasan desain apa yang ada, dan kriteria validasi apa yang dibutuhkan untuk mendefinisikan sistem yang sukses. Kebutuhan (requirement) kunci dari sistem dan perangkat lunak yang didefinisikan. Metode yang diaplikasikan selama fase definisi berbeda, tergantung pada paradigma rekayasa perangkat lunak yang diaplikasikan. Ada tiga tugas utama yang berbeda dalam bentuk yang sama: (a) sistem atau rekayasa informasi, (b) perencanaan proyek perangkat lunak, (c) analisis kebutuhan. 2. Fase pengembangan (Development phase) berfokus pada how (bagaimana), yaitu di mana selama masa pengembangan perangkat lunak, teknisi harus mendefinisikan bagaimana data dikonstruksikan, bagaimana fungsi-fungsi diimplementasikan sebagai sebuah arsitektur perangkat lunak, bagaimana detail prosedur akan diimplementasikan, bagaimana interface
ditandai
(dikarakterisasikan), bagaimana rencana akan diterjemahkan ke dalam bahasa pemrograman (atau bahasa non-prosedural), serta bagaimana pengujian dilakukan. Ada tiga tugas teknis khusus yang harus selalu ada pada fase ini yaitu: (a) rancangan perangkat lunak (b) pemunculan kode (c) dan pengujian perangkat lunak. 3. Fase pemeliharaan (Maintenace phase) berfokus pada perubahan (change) yang dihubungkan dengan koreksi kesalahan, penyesuaian yang dibutuhkan ketika lingkungan perangkat lunak berkembang, serta perubahan sehubungan yang disebabkan oleh perubahan kebutuhan pelanggan. Fase pemeliharaan mengaplikasikan lagi langkah-langkah pada fase definisi dan pengembangan, tetapi semuanya tetap tergantung pada konteks perangkat lunak yang ada. Ada
9
empat tipe perubahan yang terjadi selama masa fase pengembangan, yaitu: (1) koreksi (2) adaptasi (3) perkembangan dan (4) pencegahan
2.1.5
Model Proses Pengembangan Perangkat Lunak Waterfall Untuk menyelesaikan masalah aktual di dalam sebuah seting industri,
rekayasa perangkat lunak atau tim perekayasa harus menggabungkan strategi pengembangan yang melingkupi lapisan proses, model
dan alat-alat bantu.
Strategi ini sering diacukan sebagai model proses atau paradigma rekayasa perangkat lunak (Pressman, 35). Dalam tugas akhir ini pengembangan perangkat lunak menggunakan model sekuensial linier (waterfall) karena paradigma ini memberikan template dimana metode analisis, perancangan, pengkodean, pengujian dan pemeliharaan bisa dilakukan. Urutan proses tersebut sesuai dengan urutan yang dilakukan dalam tugas akhir ini. Sekuensial linier ( atau disebut juga “clasic life circle” atau “waterfall model”) mengusulkan sebuah pendekatan kepada perkembangan perangkat lunak yang sistematik dan sekuensial yang mulai pada tingkat dan kemajuan sistem pada seluruh analisis, desain, kode, pengujian dan pemeliharaan. Model sekuensial liner melingkupi aktivitas-aktivitas sebagai berikut (Pressman, 37): a. Rekayasa dan pemodelan sistem / informasi. Karena perangkat lunak selalu merupakan bagian dari sebuah sistem yang lebih besar, kerja dimulai dengan membangun syarat dari semua elemen sistem dan mengalokasikan beberapa subset dari kebutuhan ke perangkat lunak tersebut. Pandangan sistem ini penting ketika perangkat lunak harus berhubungan dengan elemen-elemen lain seperti perangkat lunak, manusia, dan database. Rekayasa informasi mencakup juga pengumpulan pada tingkat bisnis dan strategis dan tingkat area bisnis. b. Analisis kebutuhan perangkat lunak. Proses pengumpulan kebutuhan diintensifkan dan difokuskan, khususnya pada perangkat lunak. Untuk memahami sifat program yang dibangun, perekayasa perangkat lunak (analis) harus memahami domain informasi, tingkah laku,
10
unjuk kerja dan antarmuka (inteface) yang diperlukan. Kebutuhan baik untuk sistem maupun perangkat lunak didokumentasikan dan dilihat lagi dengan pelanggan. c. Desain Desain perangkat lunak adalah proses multi langkah yang berfokus pada empat atribut sebuah program yang berbeda, yaitu (1) struktur data (2) arsitektur perangkat lunak (3) representasi interface (4) detil (algoritma) prosedural. Proses desain menerjemahkan syarat / kebutuhan ke dalam sebuah representasi perangkat lunak yang dapat diperkirakan demi kualitas sebelum dimulai
pemunculan
kode.
Sebagaimana
persyaratan,
desain
didokumentasikan dan menjadi bagian dari konfigurasi perangkat lunak. d. Generasi kode. Desain harus diterjemahkan dalam bentuk mesin yang bisa dibaca. Langkah pembuatan kode melakukan tugas ini. Jika desain dilakukan dengan cara yang lengkap, pembuatan kode dapat diselesaikan secara mekanis. e. Pengujian Sekali kode dibuat pengujian program dimulai. Proses pengujian berfokus pada logika internal perangkat lunak, memastikan bahwa semua pernyataan sudah diuji, dan pada eksternal fungsional yaitu mengarahkan pengujian untuk menemukan kesalahan-kesalahan dan memastikan bahwa input yang dibatasi akan memberikan hasil aktual yang sesuai dengan hasil yang dibutuhkan. f. Pemeliharaan Perangkat lunak akan mengalami perubahan setelah disampaikan kepada pelanggan (perkecualian yang mungkin adalah perangkat lunak yang dilekatkan). Perubahan terjadi karena kesalahan-kesalahan ditentukan, karena perangkat lunak harus disesuaikan untuk mengakomodasi perubahanperubahan di dalam lingkungan eksternalnya.(contohnya perubahan yang dibutuhkan sebagai akibat dari perangkat peripheral atau sistem operasi yang baru), atau karena pelanggan membutuhkan perkembangan fungsional atau unjuk kerja. Pemeliharaan perangkat lunak mengaplikasikan lagi setiap fase program sebelumnya dan tidak membuatnya baru lagi. Gambar aktivitas atau tahapan Model Sekuensial Linear dapat dilihat pada gambar 2.2.
11
Gambar 2.2 Model Sekuensial Linear (Pressman, 37)
2.1.6
Pengujiaan .Pengujian perangkat lunak adalah sebuah proses yang diejawantahkan
sebagai siklus hidup dan merupakan bagan dari proses rekayasa perangkat lunak secara terintegrasi demi memastikan kualitas dari perangkat lunak serta memenuhi kebutuhan teknis yang telah disepakati dari awal (Rizky, 237) Secara teoritis, pengujian dapat dilakukan dengan berbagai tipe dan teknik. Namun secara garis besar, terdapat dua jenis tipe pengujian yang paling umum digunakan di dalam lingkup rekayasa perangkat lunak yaitu white box dan black box (Rizky, 259). 1. White box, secara umum merupakan jenis pengujian yang lebih berkonsentrasi terhadap “isi”.dari perangkat lunak itu sendiri. Jenis ini lebih berkonsentrasi kepada source code dari perangkat lunak yang dibuat sehingga membutuhkan proses pengujian yang lebih lama dan lebih “mahal” dikarenakan membutuhkan
ketelitian
dari
para
tester
serta
kemampuan
teknis
pemrograman dari para pengujinya (Rizky, 261). Beberapa teknik yang terdapat dalam pengujian jenis ini adalah: (1) Decision (branch) Coverage (2) Condition Coverage (3) Path Analysis (4) Execution Time (5) Algorithm Analysis. 2. Black box, adalah tipe pengujian yang memperlakukan perangkat lunak tidak diketahui kinerja internalnya. Sehingga para penguji memandang perangkat lunak layaknya sebuah “kotak hitam” yang tidak penting dilihat isinya, tapi cukup dikenai pengujian dari luar. Jenis ini hanya memandang perangkat
12
lunak dari sisi spesifikasi dan kebutuhan yang telah didefinisikan pada saat awal perancangan (Rizky, 264). Beberapa teknik pengujian yang tergolong dalam tipe ini adalah: a. Equivalence Partitioning. Pada teknik ini, tiap inputan data dikelompokan ke dalam grup tertentu, yang kemudian dibandingkan outputnya. b. Boundary Value Analysis. Teknik ini sangat umum digunakan pada saat sebuah perangkat lunak selesai dikerjakan. Pada teknik ini dilakukan inputan yang melebihi dari batasan sebuah data. Sebagai contoh, untuk sebuah inputan harga barang, maka diuji dengan menggunakan angka negatif. c. Case Effect Graph.
Dalam teknik ini, dilakukan pengujian yang
menghubungkan sebab dari sebuah inputan dan akibatnya pada output yang dihasilkan. d. Random Data Selection. Teknik ini berusaha melakukan proses inputan data dengan menggunakan nilai acak. Dari hasil inputan tersebut kemudian dibuat sebuah tabel yang menyatakan validitas dari output yang dihasilkan. e. Feature Test. Pengujian dilakukan terhadap spesifikasi dari perangkat lunak yang telah selesai dikerjakan. Misalkan pada perangkat lunak Sistem Informasi Akademik, dapat dicek apakah fitur untuk melakukan entri nilai telah tersedia. .
2.2 Unifield Modelling Language (UML) Unified Modeling Language selanjutnya disebut UML adalah sebuah “bahasa” yang telah menjadi standar dalam industri untuk visualisasi, merancang, dan mendokumentasikan sistem perangkat lunak. UML menawarkan sebuah standar untuk merancang sebuah model sistem (Dharwiyanti dan Wahono, 2). Dengan menggunakan UML kita dapat membuat model untuk semua jenis perangkat lunak, dimana aplikasi tersebut dapat berjalan pada perangkat keras, sistem operasi, dan jaringan apapun serta ditulis dalam bahasa pemrograman apapun. Tetapi karena UML juga menggunakan kelas dan operasi pada konsep dasarnya maka lebih cocok untuk pembuatan perangkat lunak dalam bahasa
13
berorientasi objek seperti C++, Java, C# atau VBNet. Walaupun demikian UML tetap dapat digunakan untuk modeling aplikasi prosedural dalam VB atau C. Seperti bahasa-bahasa lainnya, UML mendefinisikan notasi dan syntax / semantik.
Notasi
UML
merupakan
sekumpulan
bentuk
khusus
untuk
menggambarkan berbagai diagram perangkat lunak. Setiap bentuk memiliki makna tertentu dan syntax UML mendefinisikan bagaimana bentuk-bentuk tersebut dapat dikombinasikan. UML terdiri dari 13 jenis diagram seperti tertulis dalam Tabel 2.1. Tabel 2.1 Diagram UML 2.0 (Dennis et al, 31) No
Diagram
Kegunaan
1
Class
Menggambarkan struktur dan relasi antar kelas yang dimodelkan dalam sistem.
2
Object
Menggambarkan relasi antar objek yang dimodelkan dalam sistem.
3
Package
Gabungan antara elemen UML
4
Deployment
Menampilkan arsitektur fisik dari sistem
5
Component
Menggambarkan
relasi
fisik
antara komponen
software. 6
Composite Structure
Meggambarkan struktur internal kelas,
7
Activity
Menggambarkan aliran peoses bisnis.
8
Sequence
Memodelkan behavior objek dalam use case, fokus pada waktu melakukan kegiatan.
9
Communication
Memodelkan behavior objek dalam use case, fokus pada komunikasi yang dilakukan antar objek.
10
Interaction Overview Menggambarkan ikhtisan aliran kontrol proses.
11
Timing
Menggambarkan
interaksi
antar
objek,
lebih
menekankan pada waktu 12
State Machine
Memodelkan perilaku objek didalam sistem.
13
Use Case
Menangkap
kebutuhan
bisnis
sistem
dan
menggambarkan interaksi antara sistem dengan lingkungan
14
Pada laporan tugas akhir ini diagram UML yang akan dibahas adalah Diagram use case , activity diagram, class diagram.
2.2.1
Diagram Use Case Diagram use case menggambarkan fungsionalitas yang diharapkan dari
sebuah sistem. Yang ditekankan adalah “apa” yang diperbuat sistem, dan bukan “bagaimana”. Diagram use case dapat sangat membantu bila kita sedang menyusun requirement sebuah sistem, mengkomunikasikan rancangan kita dengan klien, dan merancang test case untuk semua feature yang ada pada sistem. Sebuah use case merepresentasikan sebuah interaksi antara aktor dengan sistem. Use case merupakan sebuah pekerjaan tertentu, misalnya login ke sistem, membuat sebuah daftar belanja, dan sebagainya. Seorang / sebuah aktor adalah sebuah entitas manusia atau mesin yang berinteraksi dengan sistem untuk melakukan pekerjaan tertentu. Sebuah use case dapat men-include fungsionalitas use case sebagai bagian dari proses dirinya. Sebuah use case juga dapat mengextend use case lain dengan behaviour-nya sendiri. Sementara hubugan generalisasi antar use case menunjukan bahwa use case yang satu merupakan spesialisasi dari yang lain. (Dharwiyanti dan Wahono, 4). Gambar 2.3 menampilkan contoh sebuah diagram use case.
15
Gambar 2.3 Contoh diagram Use Case (Dharwiyanti dan Wahono, 5).
2.2.2
Activity Diagram Activity diagram menggambarkan berbagai alir aktivitas dalam sistem
yang sedang dirancang, bagaimana masing-masing alir berawal, decision yang mungkin terjadi dan bagaimana mereka berakhir. Activity diagram juga dapat menggambarkan proses pararel yang mungkin terjadi pada beberapa eksekusi (Dharwiyanti dan Wahono, 7).Gambar 2.4 menampilkan contoh activity diagram
16
node awal Menerima Pesanan
fork
action
Mengisi Pesanan
Mengirim Invoice
keputusan [priority oe=rder]
Mengisi Pesanan
flow / edge
[else]
Menerima Pembayaran
Mengisi Pesanan
percabangan
join Menutup Pesanan
akhir kegiatan
Gambar 2.4 Contoh activity diagram sederhana (Fowler, 168).
2.2.3
Class Diagram Class adalah sebuah spesifikasi yang jika diinstansiasi akan menghasilkan
sebuah objek dan merupakan inti dari pengembangan dan desain berorientasi objek. Class menggambarkan keadaan (atribut / properti) suatu sistem, sekaligus menawarkan layanan untuk memanipulasi keadaan tersebut (metode / fungsi) Class diagram menggambarkan struktur dan deskripsi class, package, dan objek beserta hubungan satu sama lain seperti containment, pewarisan, asosiasi, dan lain-lain (Dharwiyanti dan Wahono, 5).
17
Gambar 2.5 Contoh class diagram (Dharwiyanti dan Wahono, 5).
2.3 Citra Secara harfiah citra (image) adalah gambar pada bidang dua dimensi. Ditinjau dari sudut pandang matematis, citra merupakan fungsi menerus (continue) dari intensitas cahaya pada bidang dua dimensi. Sumber cahaya menerangi objek, objek memantulkan kembali sebagian dari berkas cahaya tersebut. Pantulan cahaya ini ditangkap oleh alat-alat optik, misalnya mata pada manusia, kamera, pemindai (scanner), dan sebagainya, sehingga bayangan objek yang disebut citra tersebut terekam (Munir, 2). Citra dapat dikelompokan menjadi dua bagian yaitu citra diam (still images) dan citra bergerak (moving images). Citra diam adalah citra tunggal yang tidak bergerak. Gambar 2.1 adalah contoh citra diam. Sedangkan citra bergerak adalah rangkaian citra diam yang ditampilkan secara beruntun (sekuensial) sehingga memberi kesan mata kita sebagai gambar bergerak. Setiap citra di dalam rangkaian itu disebut frame (Munir, 2).
18
Gambar 2.1. Citra diam (Munir, 2)
2.3.1
Model Citra Secara matematis fungsi intensitas cahaya pada bidang dua dimensi
disimbolkan dengan f(x,y), yang dalam hal ini: (x,y)
: koordinat pada bidang dua dimensi.
f(x,y) : intensitas cahaya (brightness) pada titik (x,y). Karena cahaya merupakan bentuk energi, maka intensitas cahaya bernilai antara 0 sampai dengan tak terhingga. 0 ≤ f(x,y) < ∞
Gambar 2.2 Model Citra.
19
2.3.2
Digitalisasi Citra Agar dapat diolah dengan komputer digital, maka suatu citra harus
direpresentasikan secara numerik dengan nilai-nilai diskrit. Representasi citra dari fungsi menerus menjadi nilai-nilai diskrit disebut digitalisasi. Citra yang dihasilkan inilah yang disebut citra digital (digital image). Pada umumnya citra digital berbentuk empat persegi panjang, dan dimensi ukurannya dinyatakan sebagai tinggi x lebar (atau lebar x panjang) (Munir,18). Citra digital yang berukuran N x M lazim dinyatakan dengan matriks yang berukuran N baris dan M kolom sebagai berikut: f (0,0) f (1,0) f ( x, y ) = M. f ( N − 1,0)
f (0,1)
K
f (1,1)
K
M
M
f ( N − 1,1) K
f (1, M ) M f ( N − 1, M − 1) f (0, M )
Indeks baris (i) dan indeks kolom (j) menyatakan suatu koordinat titik pada citra, sedangkan f(i,j) merupakan intensitas (derajat keabuan) pada titik (i,j)(Munir,19).
2.3.3
Pengolahan Citra Pengolahan citra (image processing) adalah pemrosesan citra, khususnya
dengan menggunakan komputer, menjadi citra lain yang kualitasnya lebih baik. Hal ini bertujuan agar citra yang mengalami gangguan mudah diinterprestasi (baik oleh manusia maupun komputer) Umumnya, operasi-opersasi pada pengolahan citra diterapkan pada citra bila: 1. perbaikan atau modifikasi citra perlu dilakukan untuk meningkatkan kualitas penampakan atau untuk menonjolkan beberapa aspek informasi yang terkandung dalam citra. 2. elemen di dalam citra perlu dikelompokan, dicocokkan, atau diukur. 3. sebagian citra perlu digabung dengan bagian citra yang lain. Di dalam bidang komputer, sebenarnya ada tiga bidang studi yang berkaitan dengan data citra, namun tujuan ketiganya berbeda, yaitu:
20
1. Grafika Komputer (computer graphics). 2. Pengolahan Citra (image processing). 3. Pengenalan Pola (pattern recognition / image interpretation). Hubungan antar ketiganya ditunjukan pada Gambar 2.3
Gambar 2.3 Tiga bidang studi yang berkaitan dengan citra (Munir, 4).
2.4 Computer Vision Terminologi lain yang berkaitan erat dengan pengolahan citra adalah computer vision atau machine vision. Pada hakikatnya, computer vision mencoba meniru cara kerja sistem visual manusia (human vision). Human vision sesungguhnya sangat kompleks. Manusia melihat objek dengan indera penglihatan (mata), lalu citra objek diteruskan ke otak untuk diinterpretasi sehingga manusia mengerti objek apa yang tampak dalam pandangan matanya. Hasil intepretasi ini mungkin digunakan untuk pengambilan keputusan.(Munir, 7) Computer vision merupakan proses otomatis yang mengintegrasikan sejumlah besar proses untuk persepsi visual, seperti akuisisi citra, pengolahan citra, klasifikasi, pengenalan (recognition) dan membuat keputusan. Proses-proses didalam computer vision
dapat dibagi menjadi tiga
aktivitas: 1. Memperoleh atau mengakuisisi citra digital. 2. Melakukan teknik komputasi untuk memproses atau memodifikasi data citra (operasi-operasi pengolahan citra)
21
3. Menganalisis dan mengintepretasikan citra dan menggunakan hasil pemrosesan untuk tujuan tertentu, misalnya memandu robot, mengontrol peralatan, memantau proses manufaktur dan lain-lain.
2.5 Pengenalan Wajah Pengenalan wajah adalah suatu metode pengenalan yang berorientasi pada wajah. Pengenalan ini dapat dibagi menjadi dua bagian yaitu dikenali atau tidak dikenali, setelah dilakukan perbandingan dengan pola yang sebelumnya disimpan di dalam database.(Marti, 2). Secara garis besar pengenalan wajah terdiri dari tiga proses utama
(Saragih, 2007), yaitu: (a) Deteksi wajah (face detection) (b)
Ekstraksi ciri / wajah (face / feature extraction) (c) Pengenalan wajah (face recognition). Secara umum sistem pengenalan citra wajah dibagi menjadi dua jenis, yaitu sistem feature base dan sistem image based. Pada sistem pertama digunakan fitur yang diekstrasi dari komponen citra wajah (mata, hidung, mulut, dll) yang kemudian hubungan antara fitur-fitur tersebut dimodelkan secara geometris, contohnya Hidden Markov Model dan Dynamic Link Achitecture. Sedangkan sistem kedua menggunakan informasi mentah dari piksel citra yang kemudian direpresentasikan dalam metode tertentu, misalnya principal component analysis (PCA), transformasi wavelet yang kemudian digunakan untuk klasifikasi identitas citra (Al Fatta, 10). Penelitian tentang deteksi dan pengenalan wajah telah dilakukan sebelumnya, antara lain dengan menggunakan algoritma Eigenface (Turk dan Pentland, 1991), dengan distribusi Gaussian dan Clusterring (Sung dan Poggio, 1994), dengan Support Vektor Machine (Osuna dkk, 2007) dan dengan metode Statistic dan Wavelet (Schneiderman, 2000) (Marito, 17).
2.5.1
Deteksi Wajah Salah satu kunci sukses dalam pengenalan wajah adalah deteksi wajah
yang akurat karena gambar wajah yang terdeteksi akan sangat mempengaruhi
22
dalam proses pengenalannya. Langkah pertama dari pengenalan wajah secara otomatis adalah mendeteksi keberadaan
wajah dari gambar masukan. Ada
beberapa metode yang dapat digunakan untuk mendeteksi wajah misalnya segmentasi warna kulit dan metode Viola – Jones. Pada tugas akhir ini akan menggunakan metode yang terakhir.
2.5.1.1 Algoritma Viola - Jones Salah satu metode pendeteksian wajah yang paling banyak dipakai adalah metode yang dipublikasikan oleh Paul Viola dan Michael Jones tahun 2001. Umumnya disebut metode Viola-Jones. Pendekatan untuk mendeteksi objek dalam gambar menggabungkan empat konsep utama : •
Fitur segi empat sederhana yang disebut fitur Haar.
•
Integral image untuk pendeteksian fitur secara cepat.
•
Metoda machine learning AdaBoost.
•
Pengklasifikasi bertingkat (Cascade classifier) untuk menghubungkan banyak fitur secara efisien. (Viola-Jones dalam Arihutomo, Mukhlas: 2010)
Gambar 2.4 Contoh fitur Haar yang digunakan Viola-Jones
Fitur yang digunakan oleh Viola dan Jones didasarkan pada Wavelet Haar. Wavelet Haar adalah gelombang tunggal bujur sangkar (satu interval tinggi dan satu interval rendah ). Untuk dua dimensi, satu terang dan satu gelap. Selanjutnya kombinasi-kombinasi kotak yang digunakan untuk pendeteksian objek visual yang lebih baik disebut fitur Haar, atau fitur Haarlike, seperti pada Gambar 2.4 di atas menunjukkan fitur yang digunakan dalam pendektesian citra wajah oleh Viola dan Jones. Adanya fitur Haar ditentukan dengan cara mengurangi rata-rata piksel pada daerah gelap dari rata-rata piksel pada daerah terang. Jika nilai perbedaannya itu diatas nilai ambang atau treshold, maka dapat dikatakan bahwa fitur tersebut ada.
23
Untuk menentukan ada atau tidaknya dari ratusan fitur Haar pada sebuah gambar dan pada skala yang berbeda secara efisien, Viola dan Jones menggunakan satu teknik yang disebut Integral Image. Pada umumnya, pengintegrasian tersebut berarti menambahkan unit-unit kecil secara bersamaan. Dalam hal ini unit-unit kecil tersebut adalah nilai-nilai piksel. Nilai integral untuk masing-masing piksel adalah jumlah dari semua piksel-piksel dari atas sampai bawah. Dimulai dari kiri atas sampai kanan bawah, keseluruhan gambar itu dapat dijumlahkan dengan beberapa operasi bilangan bulat per piksel
(a)
(b)
Gambar 2.5 Integral image
Seperti yang ditunjukkan oleh Gambar 2.5(a) di atas setelah pengintegrasian, nilai pada lokasi piksel (x,y) berisi jumlah dari semua piksel di dalam daerah segi empat dari kiri atas sampai pada lokasi (x,y) atau daerah yang diarsir. Untuk menentukan nilai rata-rata piksel pada area segiempat (daerah yang diarsir) ini dapat dilakukan hanya dengan membagi nilai pada (x,y) oleh area segiempat. Untuk mengetahui nilai piksel untuk beberapa segiempat yang lain missal, seperti segiempat D pada gambar 2.5(b) di atas dapat dilakukan dengan cara menggabungkan jumlah piksel pada area segiempat A+B+C+D, dikurangi jumlah dalam segiempat A+B dan A+C, ditambah jumlah piksel di dalam A. Dengan, A+B+C+D adalah nilai dari integral image pada lokasi 4, A+B adalah nilai pada lokasi 2, A+C adalah nilai pada lokasi 3, dan A pada lokasi 1. Sehingga hasil dari D dapat dikomputasikan D = (A+B+C+D)-(A+B)-(A+C)+A. Untuk memilih fitur Haar yang spesifik yang akan digunakan dan untuk mengatur nilai ambangnya (threshold), Viola dan Jones menggunakan sebuah metode machine learning yang disebut AdaBoost. AdaBoost menggabungkan banyak classifier lemah untuk membuat sebuah classifier kuat. Lemah disini berarti urutan filter pada classifier hanya mendapatkan jawaban benar lebih sedikit. Jika keseluruhan classifier lemah digabungkan maka akan menjadi
24
classifier yang lebih kuat. AdaBoost memilih sejumlah classifier lemah untuk disatukan dan menambahkan bobot pada setiap classifier, sehingga akan menjadi classifier yang kuat. Viola Jones menggabungkan beberapa AdaBoost classifier sebagai rangkaian filter yang cukup efisien untuk menggolongkan daerah image. Masingmasing filter adalah satu AdaBoost classifier terpisah yang terdiri classifier lemah atau satu filter Haar.
Gambar 2.6 Cascade classifier
Threshold yang dapat diterima untuk masing-masing level filter di set rendah. Selama proses pemfilteran, bila ada salah satu filter gagal untuk melewatkan sebuah daerah gambar, maka daerah itu langsung digolongkan sebagai bukan wajah. Namun ketika filter melewatkan sebuah daerah gambar dan sampai melewati semua proses filter yang ada dalam rangkaian filter, maka daerah gambar tersebut digolongkan sebagai wajah. Viola dan Jones memberi sebutan cascade. Urutan filter pada cascade ditentukan oleh bobot yang diberikan AdaBoost. Filter dengan bobot paling besar diletakkan pada proses pertama kali, bertujuan untuk menghapus daerah gambar bukan wajah secepat mungkin.
2.5.2
Metode Eigenface Setelah wajah terdeteksi, tugas
feature extraction adalah untuk
memperoleh ciri-ciri dari wajah yang diperlukan pada klasifikasi wajah. Bergantung tipe pengenalan wajahnya, ciri-ciri yang diperlukan dapat berupa ciri lokal wajah seperti hidung, mata, mulut dan lainnya, maupun ciri-ciri global wajah (seluruh bagian wajah)(Saragih, 2007). Metode eigenface menggunakan seluruh bagian wajah sebagai data pengenalannya Eigenface adalah kumpulan dari eigenvector yang digunakan dalam bidang kecerdasan buatan untuk menangani problem dari pengenalan wajah manusia.
25
Pendekatan menggunakan eigenvector untuk pengenalan wajah telah digunakan oleh Sirovich dan Kirby (1987) dan digunakan kembali oleh Matthew Turk and Alland Pentland dalam pengkasifikasian wajah. Eigenvector ini berasal dari matriks kovarian dari distribusi data acak wajah manusia pada dimensi yang tinggi pada ruang vektor. Metode ini mentransformasikan citra wajah kedalam kumpulan
karakteristik
fitur
citra
yang
dinamakan
eigenface,
dengan
menggunakan Principal Componen Analisys untuk proses training citra (Piarsa dan Hisamuddin, 2010).
Gambar 2.7 Citra Eigenface (http://en.wikipedia.org/wiki/Eigenface)
2.5.2.1 Principal Component Analysis (PCA) Hotteling mengajukan sebuah teknik untuk mengurangi dimensi sebuah ruang yang direpresentasikan oleh variabel statistik x1, x2, ….,xn, dimana variabel tersebut biasanya saling berkolerasi satu dengan yang lain sehingga terdapat sebuah himpunan variabel baru yang memiliki sifat relatif sama dengan variabel sebelumnya, dimana dikehendaki himpunan variabel baru tersebut memiliki jumlah variabel (dimensi) lebih sedikit dari variabel sebelumnya. Hotteling menyebut metode tersebut sebagai Principal Component Analysis (PCA) atau Transformasi Hotteling dan Transformasi Karhunen-Loeve. Transformasi Karhunen-Loeve banyak digunakan untuk memproyeksikan atau mengubah suatu kumpulan data berukuran besar menjadi bentuk representasi
26
data lain dengan ukuran lebih kecil. Transformasi Karhunen-Loeve terhadap sebuah ruang data yang besar akan menghasilkan sejumlah vektor basis ortonormal ke dalam bentuk kumpulan vektor eigen dari suatu matriks kovarian tertentu , yang dapat secara optimal merepresentasikan distribusi data. Bentuk umum dari Principal Component Analysis dapat dilihat berikut ini: M
C = ∑ ( x k − w)( x k − w) T
(1)
k =1
dimana C merupakan matriks koovarian, x merupakan citra (x1,x2,...,xk) dan ψ adalah rata-rata citra yang dihasilkan dari merata-rata x (x1,x2,...,xk). Dengan dekomposisi eigen, matriks kovarian ini dapat didekomposisi menjadi:
C = Φ.Φ T
(2)
Dimana ϕ adalah selisih antar citra (x) dengan nilai tengah (ψ). Pilih sejumlah m kolom dari matriks Φ yang berasosiasi dengan eigenvalue terbesar. Pemilihan sejumlah m kolom dari matriks Φ ini menghasilkan matriks transformasi atau matriks proyeksi Φm . Berikutnya sebuah citra x (berdimensi n) dapat diekstraksi kedalam feature baru y (berdimensi m < n) dengan memproyeksikan x searah dengan Φm sebagai berikut:
µ = Φ m .x
(3)
Dengan kata lain metode PCA memproyeksikan ruang asal ℜn ke dalam ruang baru yang berdimensi lebih rendah ℜm , yang mana sebanyak mungkin kandungan informasi asal tetap dipertahankan untuk tidak hilang setelah dibawa ke dimensi feature yang lebih kecil. Disini terlihat reduksi feature yang signifikan dan n buah menjadi m buah yang tentunya akan sangat meringankan komputasi dalam proses pengenalan berikutnya.
27
2.5.2.2 Perhitungan Eigenface Tahapan perhitungan Eigenface: 1. Langkah pertama adalah menyiapkan data dengan membuat suatu himpunan S yang terdiri dari seluruh training image (Γ1,Γ2,…,ΓM). S = {Γ1,Γ2,…,ΓM }
(4)
2. Langkah ke-dua adalah ambil nilai tengah atau mean (Ψ)
ψ =
M
1 M
∑Γ
n
(5)
n =1
3. Langkah ke-tiga kemudian cari selisih (Φ) antara training image (Γ1 ) dengan nilai tengah (Ψ)
φi = Γi − ψ
(6)
4. Langkah ke-empat adalah menghitung nilai matriks kovarian (C) C=
1 M
M
∑Φ
n
Φ Tn = AAT (7)
n =1
L=ATA
L = Φ Tm Φ n
5. Langkah ke-lima menghitung eigenvalue (λ) dan eigenvector (v) dari matriks kovarian (C) C x vi =λ i x vi
(8)
6. Langkah ke-enam, setelah eigenvector (v) diperoleh , maka eigenface (µ) dapat dicari dengan M
µ i = ∑ vlk Φ k k =1
l = 1,..., M
(9)
28
2.5.3
Klasifikasi Wajah Pada metode eigenface, pengklasifikasian identitas yang digunakan adalah
dengan membandingkan bobot dari masing-masing eigenface pada citra wajah pelatihan dan citra wajah masukan dengan menghitung jarak Euclidiannya. Jarak Euclidian adalah jarak antara dua titik. Pada ruang dua dimensi jarak antara dua titik P1 dan P2 adalah :
d 12 = dx 2 + dy 2
(10)
Dimana dx=x2-x1 dan dy=y2-y1
Y
P2
y2
d12
y1
P1
X1
X2
X
Gambar 2.8 Jarak Euclidian d12 pada ruang 2 dimensi Sebuah citra dikatakan dikenali jika jarak minimumnya lebih kecil dari nilai batas yang ditetapkan / diberikan. Semakin kecil jarak minimum yang diperoleh semakin besar kesamaan (similarity) citra masukan dengan pasangan kumpulan citra pelatihan. Namun pada kenyataannya sulit untuk menentukan nilai ambang batas, Jika ambang batas terlalu kecil, semua wajah yang tidak diketahui akan dikenal (false positive). Jika ambang batas terlalu tinggi, wajah baru dari seseorang yang terdapat dalam database, bisa dianggap tidak dikenal (false negative).
29
2.5.3.1 Tahapan Pengenalan Eigenface Tahapan pengenalan wajah dengan eigenface (Sutojo dkk, 296), misalkan ada citra wajah yang akan dikelai (citra uji) Γ. 1. Hitung selisih (Φ ) antara citra uji Γ dengan citra rata-rata Ψ Φ = Γ-Ψ
(11)
2. Proyeksikan Φ ke dalam ruang wajah (eigenspace) M
Φ = ∑ wi vi
(12)
n =1
Dimana wi = Φvi
3. Representasikan Φ sebagai Ω
w1 ... Ω = ... ... wM
(13)
4. Tentukan jarak minimum (d) dan ambang batas (T)
d = min k Ω − Ω k
(14)
5. Jika d < T , maka citra uji Γ dikenali sebagai wajah ke-k dari sekumpulan citra pelatihan.
2.6 OpenCV OpenCV adalah sebuah library bebas yang awalnya dibangun oleh Intel. Lisensi yang menyertainya adalah BSD yang bebas untuk komersil dan riset . Library ini dapat digunakan pada platform mana saja termasuk Windows, Linux,
30
Mac OS dan lain-lain. OpenCV difokuskan untuk memproses gambar yang berjalan secara langsung (real-time)(Ricky dan Michael, 97)
2.6.1
Tipe Data Primitif OpenCV OpenCV memiliki tipe data primitif yang hanya dimiliki oleh dirinya. Tipe
data ini adalah struct yang didefinisikan dalam file header cxtypes.h yang diinstalasi bersamaan dengan OpenCV (Bradsky and Kaehler, 31). Tipe paling sederhana adalah CvPoint, yang berupa struct yang berisikan dua buah integer, x dan y. CvPoint mempunyai dua saudara CvPoint2D32f dan CvPoint3d32f. Yang pertama juga beranggotakan x dan y, tetapi tipe datanya berupa float, sedangkan yang berikutnya mempunyai anggota ketiga yaitu z Berikutnya adalah CvSize, sebuah struct yang mana anggotanya adalah width dan height yang bertipe integer. Jika ingin anggotanya bertipe float, maka
yang digunakan adalah CvSize2D32f Gabungan dari keduanya adalah CvRect, yang beranggotakan x, y, width dan height. Selain itu juga ada tipe data CvSkalar, yang adalah kumpulan dari 4 buah angka dengan ketepatan 2 angka dibelakang koma. Setiap tipe data ini memiliki konstruktor masing-masing dengan namanya sendiri, tetapi karakter pertama bukan huruf kapital. Dapat dipanggil dengan cara seperti ini: cvPoint, cvSize(), cvRect(), cvSkalar(). Tabel 2.2 menampilkan struktur tipe data primitif pada OpenCV.
Tabel 2.2. Struktur data primitif OpenCv. (Bradsky and Kaehler, 32) Structure
Contains
Represent
CvPoint
Int x, y
Point in image
CvPoint2D32f
Float x, y
Points in 2
CvPoint3D32f
Float x, y, z
Points in 3
CvSize
Int width, height
Size of image
CvRect
Int x, y, width, heigth
Portion of image
CvScalar
Double val[4]
RGBA value
31
2.6.2
Tipe Data Matrix Dan Image Matriks dalam OpenCV dikenal dengan tipe data CvMat. Matriks dalam
OpenCV dideklarasikan dalam 2-dimensi dan memiliki 1 tipe data. Untuk membuat matriks, digunakan bentuk umum seperti ini cvMat * cvCreateMat(int rows, int cols, int type); IplImage pada dasarnya
adalah CvMat tetapi dengan beberapa
penambahan feature yang digunakan untuk membuat matriks yang di intepretasikan dari sebuah citra. Stuktur ini pada awalnya didefinisikan sebagai bagian dari Intel’s Image Processing Library (IPL).
2.7 Qt Qt (dibaca: kiut) dibuat pada tahun 1996 oleh perusahaan dari Swedia bernama Trolltech. Qt memiliki sifat lintas platform maka developer dapat membuat aplikasi yang berjalan pada platform Windows, Linux, dan Mac. Dengan Qt kode yang sama dapat dijalankan pada target platform yang berbeda (Iqbal, 9). Qt dirancang untuk pengembangan aplikasi dengan C++. Oleh karenanya, Qt berisi sekumpulan kelas-kelas yang tinggal dimanfaatkan saja, mulai dari urusan antarmuka (user interface), operasi input output, networking, timer, template library dan lain-lain. Qt mendukung penuh Unicode (mulai versi 2.0)
sehingga urusan internationalization dan encoding teks bukan masalah. Walaupun merupakan free software, Qt terbukti stabil dan lengkap. Dibandingkan toolkit lain, Qt juga mudah dipelajari dan dipersenjatai dengan dokumentasi dan tutorial yang ekstensif dan rinci Pada tahun 2008, Nokia mengakuisisi Trolltech untuk memperlancar strategi pengembangan aplikasi lintas platform untuk perangkat mobile dan aplikasi desktop. Sejak awal Qt tersedia dalam dua buah lisensi yaitu komersial dan lisensi open source – GPL. Namun sejak versi 4.5, Qt open source tersedia dalam LGPL.
32
1. GNU General Public License (GPL) versi 3.0. Dengan lisensi ini mengharuskan source code aplikasi tersedia secara bebas dan gratis. 2. GNU Lesser General Public License (LGPL) versi 2.1. LGPL memungkinkan
pengembangan
aplikasi
closed
sourceI
(dibawah
pembatasan tertentu)
3. Qt Commercial. LGPL membawa beberapa pembatasan mengenai kemampuan
bagi
pengguna
untuk
relink
library
dan
pembatasan lain yang mungkin memberlakukan persyaratan arsitektur yang
membuat
beberapa
organisasi
mungkin
tidak nyaman dengan kondisi ini. Jika masalah ini penting bagi perusahaan, maka diharuskan membeli lisensi komersial pada saat memulai pengembangan aplikasi..