56
BAB 3 ANALISIS DAN PERANCANGAN SISTEM
3.1 Algoritma Prosedur Klasifikasi Dalam sistem Pengenalan Tulisan Tangan ini input berupa sebuah citra karakter, yang akan diproses menjadi fitur yang merupakan representasi dari citra karakter tersebut. Fitur tersebut akan menjadi input bagi SVM, yang kemudian akan mengklasifikasinya ke dalam kelas – kelasnya. Umumnya diagram alir untuk sebuah proses klasifikasi terdiri dari preprocessing, ekstraksi fitur, fitur matching, dll.
Gambar 3.1 Diagram Alir Klasifikasi Umum • Input Input untuk klasifikasi, bisa berupa citra dijital, suara, dll. • Preprocessing Proses untuk membersihkan noise dan mengkonsentrasikan input kepada fitur – fitur, untuk input citra, umumnya menggunakan image processing, dll. • Ekstraksi Fitur Salah satu proses terpenting di dalam klasifikasi, yaitu proses pengambilan fitur yang adalah ciri khas pola dalam input. Pemilihan ekstraksi fitur sangat penting agar dapat menghasilkan klasifikasi yang baik. • Fitur Input
57
Setelah diekstrak fitur dari inputnya, akan didapatkan fitur dari input. • Database Berisi rule – rule atau pola dari data hasil pelatihan. • Fitur Database Fitur yang digunakan untuk melatih database. • Matching Mencocokkan fitur input dengan fitur dari database. • Hasil Hasil dapat berupa, kelas, representasi dari kelas, dll. Sistem ini juga melakukan klasifikasi dengan proses – proses yang sama, tetapi dalam sistem ini posisi Database digantikan sebuah Model SVM yang menyimpan nilai – nilai hasil training dari proses training sebelumnya. Berikut adalah algoritma prosedur klasifikasi SVM. 3.1.1 Inisialisasi Tahap pertama adalah menginisialisasi objek – objek penting yang akan dipakai dalam seluruh sistem. Objek penting tersebut antara lain adalah Model SVM yang telah di simpan sebelumnya di dalam sebuah file dan seluruh data pelatihan yang pernah dilatih sebelumnya. PSEUDOCODE If ada file Model then load Model Else Create Model If ada file Data then load Data Else Create Data
58
3.1.2 Preprocessing
Gambar 3.2 Block Diagram Preprocessing Preprocessing yang dilakukan meliputi : 3.1.2.1 Citra Grayscale Citra yang di masukkan akan diproses menjadi citra grayscale, dengan cara, diambil nilai R, G, B dari masing – masing pixel dari citra. Perhitungan untuk mendapatkan nilai grayscale untuk masing – masing pixel adalah :
grayscale = R
1 1 1 +G + B 30 59 11
59
Gambar 3.3 Citra Grayscale PSEUDOCODE Inisialisasi Height Inisialisasi Width Inisialisasi GrayScaleImg [Height] [Width] Do i = 0 to Height - 1 Do j = 0 to Width - 1 GrayScaleImg [i] [j] = Image [i] [j].R * 0.30 + Image [i] [j].G * 0.59 + Image [i] [j].B * 0.11 EndDo EndDo
3.1.2.2 Mencari
nilai
threshold
yang
diperlukan
dalam
proses
selanjutnya dari citra grayscale Setelah diubah menjadi grayscale proses selanjutnya adalah mengubahnya menjadi citra biner, sebelumnya dicari dulu nilai threshold dari histogram nilai grayscale. Dengan cara mencari dari histogram di nilai grayscale mana terjadi perubahan intensitas yang cukup signifikan (kontras), maka diambil nilai tengah dari nilai grayscale tersebut sebagai nilai threshold. PSEUDOCODE
60 Inisialisasi Histogram Inisialisasi ContrastHistogram Inisialisasi Height Inisialisasi Width Inisialisasi variabel – variabel Do i = 0 to Height - 1 Do j = 0 to Width - 1 Pengisian Histogram Cek maksimum kontras EndDo EndDo Do i = 0 to Height - 1 Do j = 0 to Width - 1 Pengisian
ContrastHistogram
dengan
nilai
kontras
yang relevan EndDo EndDo Inisialisasi Sum, ContrastSum, ContrastMass, IMass Do i = 0 to 255 Sum = Sum + i * ContrastHistogram [i] ContrastMass = ContrastMass + ContrastHistogram [i] IMass = IMass + Histogram [i] EndDo Inisialisasi
MassKiri,
MassKanan,
MidKiri,
MidKanan,
Fmax, OtsuValue Do i = 0 to 255 MassKiri = MassKiri + ContrastHistogram [i] If MassKiri = 0 then Continue MassKanan = ContrastMass – MassKiri If MassKanan = 0 then Break ContrastMass = ContrastMass + i * ContrastHistogram [i]
61 MidKiri = ContrastMass / MassKiri MidKanan = (Sum – ContrastSum) / MassKanan OtsuValue = MassKiri * MassKanan * (MidKiri MidKanan) If OtsuValue > Fmax then Fmax = OtsuValue Threshold = i + 1 EndIf EndDo
3.1.2.3 Konversi citra menjadi citra biner (Thresholding) Setelah didapatkan nilai threshold selanjutnya adalah mengubah citra biner dengan kondisi jika nilai grayscale dari pixel dibawah nilai threshold, maka pixel menjadi pixel hitam, dan jika nilai grayscale dari pixel diatas atau sama dengan nilai threshold, maka pixel menjadi pixel putih.
Gambar 3.4 Citra Biner PSEUDOCODE Inisialisasi BWImage Inisialisasi Height Inisialisasi Width Inisialisasi Threshold = OtsuThreshold()
62 Do i = 0 to Height - 1 Do j = 0 to Width - 1 If Image [i] [j] >= Threshold then BWImage [i] [j] = 255 ElseIf Image [i] [j] < Threshold then BWImage [i] [j] = 0 EndIf EndDo EndDo
3.1.2.4 Cropping citra untuk mengambil informasi yang penting saja dari dalam citra. Setelah diubah menjadi citra biner, maka dari suatu citra, diambil informasi yang penting saja, dengan cara menghilangkan space kosong (berwarna putih) yang tidak terpakai di dalam citra.
Gambar 3.5 Citra biner sebelum di crop
63
Gambar 3.6 Citra biner setelah di crop PSEUDOCODE Inisialisasi CropImage Inisialisasi X, Y, Width, Height CropImage = Image.Clone(Rectangle(X, Y, Width, Height))
3.1.2.5 Segmentasi citra untuk membagi setiap karakter dalam citra Setelah dipastikan informasi pada citra adalah yang benar – benar penting saja, maka akan dilakukan proses segmentasi, untuk memotong dan membagi setiap karakter yang ada di dalam citra. Metode Segmentasi yang dilakukan dengan Histrogram-Based Method (Linda G. Shapiro and George C. Stockman (2001): “Computer Vision”, pp 279-325, New Jersey, PrenticeHall). Proses segmentasi ini dibagi menjadi 3 tahap : a. Segmentasi Baris Segmentasi Baris adalah proses mencari baris kalimat pada sebuah citra. Proses ini akan mencari posisi koordinat y dari suatu baris kalimat pada sebuah citra. Proses ini dilakukan dengan cara, didapatkan histogram horizontal (intensitas pixel hitam dalam tiap baris), lalu dicari dari atas ke bawah, di koordinat manakah terjadi perubahan intensitas pixel dari intensitas 0 (tidak ada pixel hitam
64
sama sekali dalam 1 baris) menjadi intensitas > 0 (minimal 1 pixel hitam dalam 1 baris), dan intensitas > 0 menjadi intensitas 0. Koordinat dimana terjadi perubahan intensitas dari intensitas 0 menjadi intensitas > 0, akan menjadi koordinat y awal dari suatu baris. Sedangkan koordinat dimana terjadi perubahan intensitas dari intensitas > 0 menjadi intensitas 0, akan menjadi koordinat y akhir dari suatu baris. Koordinat – koordinat tersebut akan disimpan untuk tahap selanjutnya. PSEUDOCODE Inisialisasi HistogramY Inisialisasi Height Inisialisasi Width Do i = 0 to Height Do j = 0 to Width Pengisian HistogramY EndDo EndDo Inisialisasi Flag Do i = 0 to Height - 1 Pencarian titik dimana terjadi perubahan pixel putih menjadi hitam dan disimpan sebagai koordinat y awal dari baris Pencarian titik dimana terjadi perubahan pixel hitam menjadi putih dan disimpan sebagai koordinat y akhir dari baris (pencarian koordinat y awal dilakukan lebih dulu) EndDo
b. Segmentasi Karakter
65
Segmentasi Karakter adalah proses mencari karakter dalam tiap baris kalimat yang telah dicari dalam tahap sebelumnya. Mirip seperti proses sebelumnya, proses kali ini akan mencari posisi koordinat x dari suatu karakter pada tiap baris dan posisi koordinat y dalam proses ini diasumsikan sama dengan posisi koordinat y barisnya. Proses ini dilakukan dengan cara, didapatkan histogram vertikal (intensitas pixel hitam dalam 1 kolom) dari tiap baris yang telah didapatkan posisinya di tahap sebelumnya, lalu dicari dari kiri ke kanan, di koordinat manakah terjadi perubahan intensitas pixel dari intensitas 0 menjadi intensitas > 0, dan intensitas > 0 menjadi intensitas 0. Koordinat dimana terjadi perubahan intensitas dari intensitas 0 menjadi intensitas > 0 akan menjadi koordinat x awal dari suatu karakter. Dan koordinat dimana terjadi perubahan intensitas dari intensitas > 0 menjadi intensitas 0 akan menjadi koordinat x akhir dari suatu karakter. Koordinat – koordinat ini akan disimpan untuk tahap selanjutnya. PSEUDOCODE Inisialisasi HistogramX Inisialisasi JumlahBaris Inisialisasi Width Inisialisasi AwalBaris Inisialisasi AkhirBaris Do i = 0 to JumlahBaris Do j = 0 to Width - 1 Do k = AwalBaris [i] to AkhirBaris [i] – 1 Pengisian HistogramX EndDo EndDo Do j = 0 to Width – 1
66 Pencarian pixel
titik
putih
dimana
menjadi
terjadi
hitam
dan
perubahan disimpan
sebagai koordinat x awal karakter Pencarian pixel
titik
hitam
dimana
menjadi
terjadi
putih
dan
perubahan disimpan
sebagai koordinat x akhir karakter (pencarian koordinat x awal dilakukan dulu) EndIf EndDo EndDo
c. Segmentasi Tinggi Karakter Segmentasi Tinggi Karakter adalah proses menghilangkan pixel yang tidak penting di dalam tiap segmen karakter yang telah didapatkan dari proses sebelumnya. Proses ini akan mencari posisi koordinat y dari tiap segmen karakter, koordinat y yang dicari adalah posisi dimana terdapat intensitas pixel hitam > 0. Proses ini dilakukan
dengan
cara,
menggunakan
histogram
horizontal
(intensitas pixel hitam dalam 1 baris) dari tiap karakter yang telah didapatkan posisinya di tahap sebelumnya, lalu dicari dari atas ke bawah, di koordinat manakah pertama kali dan terakhir kalinya intensitasnya > 0. Koordinat pertama kali terdeteksi intensitas > 0 akan menjadi koordinat y awal dari suatu karakter. Dan koordinat terakhir kali terdeteksi intensitas > 0 akan menjadi koordinat y akhir dari suatu karakter. Setelah proses ini, telah didapatkan posisi x, y, panjang dan lebar dari tiap karakter, dari info tersebut akan dilakukan cropping untuk tiap karakter, dan setiap hasil crop akan disimpan. PSEUDOCODE
67 Inisialisasi XawalKarakter Inisialisasi XakhirKarakter Inisialisasi YawalKarakter Inisialisasi YakhirKarakter Inisialisasi HistogramY Do i = 0 to XawalKarakter.Length – 1 Do j = XawalKarakter [i] to XakhirKarakter [i] – 1 Do k = YawalKarakter [i] to YakhirKarakter [i] – 1 Pengisian HistogramY EndDo EndDo Do j = YawalBaris [i] to YakhirBaris [i] – 1 Pencarian koordinat y dimana pixel hitam pertama kali muncul dan disimpan sebagai koordinat y awal dari karakter Pencarian koordinat y dimana pixel hitam terakhir muncul dan disimpan sebagai koordinat y akhir dari karakter (pencarian koordinat y awal dilakukan lebih dulu) EndDo EndDo
68
Gambar 3.7 Citra Biner hasil Crop
(a)
(b)
(c)
(d)
Gambar 3.8 (a) Citra a hasil Segmentasi dari Gambar 3.8 (b) Citra b hasil Segmentasi (c) Citra c hasil Segmentasi (d) Citra d hasil Segmentasi 3.1.2.6 Thinning
untuk
menghilangkan
ketebalan
dalam
setiap
karakter Setelah setiap karakter dibagi – bagi menjadi suatu citra sendiri, maka proses selanjutnya adalah proses Thinning. Proses Thinning adalah proses mengecilkan garis pada suatu karakter. Proses ini penting karena proporsi ketebalan garis pada tiap karakter bisa jadi berbeda, untuk memastikan konsistensi proporsi ketebalan garis, maka dilakukan thinning. Ada beberapa metode untuk proses Thinning, diantaranya ada metode Stentiford atau Zhang-Suen, kedua metode ini sama – sama
69
Template-Based Mark-and-Delete Thinning Algorithm, dari kedua metode ini, Zhang-Suen lebih cepat dan mudah untuk diimplementasikan, dan juga metode Zhang-Suen lebih baik dalam mengekstraksi garis lurus dalam raster, jadi hasil lebih berupa garis lurus (Martin and Tosunoglu, 2000) . Algoritma yang dipakai didalam proses Thinning di sistem ini adalah Algoritma Zhang-Suen. Algoritma ini adalah method yang paralel, itu berarti nilai yang baru diambil hanya bergantung pada nilai iterasi sebelumnya. Algoritma ini terbuat dari 2 sub-iterasi. Pertama, sebuah piksel I (i,j) terhapus jika syarat-syarat berikut dipenuhi [1]: a) Nilai konektifitasnya satu. b) Mempunyai sedikitnya 2 piksel tetangga yang hitam dan tidak lebih dari enam. c) Sedikitnya salah satu dari I(i,j+1), I(i-1,j), and I(i,j-1) adalah putih. d) Sedikitnya salah satu dari I(i-1,j), I(i+1,j), and I(i,j-1) adalah putih.
Pada sub-iterasi kedua [2] kondisi pada langkah c dan d berubah. a) Nilai konektifitasnya satu. b) Mempunyai sedikitnya 2 piksel tetangga yang hitam dan tidak lebih dari enam. c) Sedikitnya salah satu dari I(i-1,j), I(i,j+1), and I(i+1,j) adalah putih. d) Sedikitnya salah satu dari I(i,j+1), I(i+1,j), and I(i,j-1) adalah putih. Pada akhirnya, piksel-piksel yang memenuhi syarat-syarat di atas, akan dihapus. Jika diakhir salah satu sub-iterasi tidak ada piksel yang dihapus, maka algoritmanya berhenti.
70
Gambar 3.9 Citra sebelum di Thinning
Gambar 3.10 Citra sesudah di Thinning PSEUDOCODE Inisialisasi ThinBitmap Inisialisasi Height Inisialisasi Width
71 Inisialisasi Field [Width] [Height] Inisialisasi Mark [Width] [Height] Change = 0 Do Change = 0 Do i = 0 to Height – 1 Do j = 0 to Width – 1 If Field [i] [j] = 1 then Tandai
Posisi
i,
j
kedalam
Mark
jika
kedalam
Mark
jika
memenuhi syarat [1] EndIf EndDo EndDo Do i = 0 to Height – 1 Do j = 0 to Width – 1 If Mark [i] [j] = 1 then Change = 1 Field [i] [j] = 0 Else Field [i] [j] = 1 EndIf EndDo EndDo Do i = 0 to Height – 1 Do j = 0 to Width – 1 If Field [i] [j] = 1 then Tandai
Posisi
i,
memenuhi syarat [2] EndIf EndDo EndDo Do i = 0 to Height – 1
j
72 Do j = 0 to Width – 1 If Mark [i] [j] = 1 then Change = 1 Field [i] [j] = 0 Else Field [i] [j] = 1 EndIf EndDo EndDo While Change = 1
3.1.3 Ekstraksi Fitur (Feature Extraction) Setelah melalui tahap preprocessing maka data citra akan masuk dalam proses feature extraction, yang menggunakan metode zoning. Dalam proses zoning feature dibagi per segmen menjadi 100 segmen, yang masing – masing segmen besarnya M/10 x N/10 pixel (M adalah panjang citra, N adalah lebar citra), seperti berikut :
Gambar 3.11 Gambaran pembagian segmen
73
Dari setiap segmen itu akan didapatkan jumlah pixel hitam yang akan dibagi jumlah pixel di dalam segmen ( (M/10) * (N/10) ), nilai ini akan menjadi salah satu nilai untuk input vector. Jika nilai dari semua segmen dikumpulkan, maka akan didapatkan sebuah input vector [1, 100]. Hasil dari proses feature extraction ini adalah sebuah feature vector yang siap untuk dijadikan input ke dalam proses SVM. Berikut adalah contoh nilai feature vector dari sebuah citra yang telah melewati proses feature extraction, citra tersebut adalah karakter ‘2’.
Gambar 3.12 Citra karakter ‘2’
Table 3.1 Tabel Nilai Feature Vector untuk objek karakter ‘2’ 0
0
0
0.08
0.12
0.1
0.1
0.05
0
0
0
0
0
0.07
0
0
0
0.11
0
0
0
0
0
0
0
0
0
0.1
0
0
0
0
0
0
0
0
0
0.12
0
0
0
0
0
0
0
0
0
0.12
0
0
0
0
0
0
0
0
0.12
0.01
0
0
0
0
0
0
0.03
0.12
0.01
0
0
0
0
0.03
0.1
0.13
0.18
0.08
0
0
0
0
0.12
0.18
0.09
0
0
0.05
0.1
0.1
0
0
0
0
0
0
0
0
0
0
0.1
0.1
PSEUDOCODE
74 Inisialisasi ListNode [101] Inisialisasi Height Inisialisasi Width Do Index = 0 to 99 Inisialisasi SumBlackPixel Inisialisasi SegmentHeight = Height / 10 Inisialisasi SegmentWidth = Width / 10; Inisialisasi i, j Do i = 0 to SegmentHeight – 1 Do j = 0 to SegmentWidth – 1 Jumlahkan pixel hitam di dalam segmen EndDo Jika masih terdapat pixel walau segment width telah selesai ditelusuri, telusuri pixel sisa dan jumlahkan pixel hitamnya EndDo Jika masih terdapat pixel walau segment height telah selesai ditelusuri, telusuri pixel sisa dan jumlahkan pixel hitamnya ListNode [index] = SumBlackPixel / (SegmentWidth * SegmentHeight) EndDo ListNode [index + 1] = Width / Height
3.1.4 Klasifikasi SVM 3.1.5.1 Proses inisialisasi objek Parameter dan Problem (class untuk data training) Sebelum membuat objek model, terlebih dahulu harus ada objek dari class Problem dan objek dari class Parameter.
75
Objek Problem berisi semua nilai X dan Y yang telah terkumpul sebagai database yang berisi data training. X adalah matriks input dari citra – citra hasil pembelajaran yang sudah melalui proses training. Matriks X berukuran [N x D] dimana N adalah jumlah dimensi dari input vector dan D adalah banyaknya citra pembelajaran yang telah dimasukkan. Y adalah matriks output yang berisikan kelas – kelas output yang diharapkan dari sistem. Matriks Y berukuran [N x 1] adapun nilai – nilai dari kelas – kelas output ini :
76
Table 3.2 Tabel Kelas / Kategori Nilai Kelas 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Representasi Karakter ‘0’ ‘1’ ‘2’ ‘3’ ‘4’ ‘5’ ‘6’ ‘7’ ‘8’ ‘9’ ‘a’ ‘b’ ‘c’ ‘d’ ‘e’ ‘f’ ‘g’ ‘h’ ‘i’ ‘j’ ‘k’ ‘l’ ‘m’ ‘n’ ‘o’ ‘p’ ‘q’ ‘r’ ‘s’ ‘t’ ‘u’
Nilai Kelas 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
Representasi Karakter ‘v’ ‘w’ ‘x’ ‘y’ ‘z’ ‘A’ ‘B’ ‘C’ ‘D’ ‘E’ ‘F’ ‘G’ ‘H’ ‘I’ ‘J’ ‘K’ ‘L’ ‘M’ ‘N’ ‘O’ ‘P’ ‘Q’ ‘R’ ‘S’ ‘T’ ‘U’ ‘V’ ‘W’ ‘X’ ‘Y’ ‘Z’
77
Objek Parameter berisi parameter – parameter yang diperlukan dalam pembuatan objek, misalnya tipe SVM, tipe kernel, nilai C, nilai Gamma, nilai Nu, dsb. Setelah ada kedua objek tersebut maka objek model dapat dibuat. Objek Model inilah yang menjadi inti dari sistem, “otak” dari sistem pengenalan ini. PSEUDOCODE Inisialisasi objek Problem (berisi data yang akan dilatih) Inisialisasi objek Parameter Masukkan parameter – parameter pilihan user ke dalam objek Parameter
3.1.5.2 Proses Training dan buat Model Dengan objek dari class Problem dan objek dari class Parameter, maka objek Model dapat dibuat dengan cara langsung menggunakan fungsi static Training.train() dengan parameter objek Problem dan objek Parameter. Model inilah yang akan dipakai untuk proses pengenalan. Proses training akan menghasilkan Model yang lebih terlatih. Parameter – parameter untuk proses training diantaranya tipe SVM, tipe Kernel, nilai Gamma, nilai Nu dan nilai C dapat diubah. Parameter Tipe SVM mempengaruhi parameter nilai Nu dan nilai C, jika Tipe SVM yg dipilih adalah Nu-SVC maka parameter yang dapat diisi adalah nilai Nu, jika Tipe SVM yg dipilih adalah C-SVC maka parameter yang dapat diisi adalah nilai C. Untuk sistem ini, kernel yang digunakan defaultnya adalah RBF, karena kernel yang baik digunakan untuk permulaan adalah RBF (Chih, Jen-Lin; 2008), tapi kernel dapat dipilih sesuai keinginan. Gamma adalah parameter untuk kernel, jika kernel yang digunakan adalah linear, Gamma menjadi tidak terpakai. Nilai Nu dan C adalah parameter untuk SVM, nilai Nu dan C adalah konstanta yang dipakai dalam proses optimasi SVM.
78
Perancangan SVM dibantu dengan menggunakan pustaka LibSVM, LibSVM menawarkan fungsi untuk membuat Model SVM dengan berbagai macam formulasi, tipe kernel. a) Formulasi Formulasi – formulasi yang ada didalam LibSVM, diantaranya : o C-Support Vector Classifier (C-SVC) o v-Support Vector Classifier (v-SVC) o Distribution Estimation (One-Class SVM) o ε-Support Vector Regression (ε-SVR) o v-Support Vector Regression (v-SVR) b) Kernel Pilihan Kernel yang ada didalam LibSVM, diantaranya : o Linear o Polynomial o RBF o Sigmoid o Precomputed LibSVM juga menawarkan fungsi untuk melakukan skala pada fitur dengan menggunakan Class Scaling. Dalam formulasi SVM ada 2 parameter yang penting, yaitu C dan γ. LibSVM menawarkan fungsi untuk melakukan optimasi terhadap 2 parameter ini dengan menggunakan Class PrecomputedKernel. PSEUDOCODE Inisialisasi Model Model = Training.Train (Problem, Parameter)
79
3.1.5.3 Proses Simulasi Klasifikasi Dalam proses pengenalan (klasifikasi), user akan memasukkan citra yang ingin dikenali ke dalam program, lalu dilakukan juga preprocess terhadap citra tersebut lalu dibagi per segmen dan didapatkan input vector. Input vector tersebut akan dimasukkan ke dalam model SVM sebagai input di dalam proses pengenalan yang akan menghasilkan output berupa integer yang merepresentasikan suatu class output. Proses pengenalan ini dilakukan dengan menggunakan fungsi static Prediction.Predict() dengan parameter objek Model dan array dari Node input yang akan dimasukkan ke Model SVM. Di dalam sistem ini juga disediakan fitur untuk menyimpan output dari proses ini ke dalam text file. PSEUDOCODE Inisialisasi SegmentasiCitra Inisialisasi Output Inisialisasi Karakter yang berisi karakter dari 0-9 dan a-z dan A-Z Do i = 0 to SegmentasiCitra.Length – 1 Panggil fungsi ekstraksi fitur masukkan ke variabel Test kelas = Prediction.Predict(Model, Test) Output = Output & Karakter [kelas] EndDo Tampilkan variabel Output pada Textbox
3.2 Perancangan Sistem Pada perancangan sistem terdapat arsitektur sistem, diagram hierarki, state transition diagram, dan layout sistem.
80
3.2.1 Arsitektur Sistem
Gambar 3.13 Flowchart Sistem Pengenalan Karakter Tulis Tangan Online Arsitektur sistem ini dimulai dengan inisialisasi sistem yaitu menetapkan variabel – variabel awal dalam program, di sini juga dilakukan load model SVM yang pernah disimpan sebelumnya. Setelah itu sistem menunggu inputan berupa citra digital, inputan dapat ditulis langsung di tempat yang sudah disediakan atau dimasukkan dari file – file yang sudah ada. Setelah citra digital telah siap, citra akan di preprocessing, untuk menghilangkan noise, preprocessing terdiri dari : •
Grayscaling
•
Thresholding
•
Cropping
•
Segmentation
•
Thinning
81
Preprocessing akan menghasilkan citra yang telah bersih dari noise, setelah itu diproses dalam proses ekstraksi fitur, proses ini mengambil fitur – fitur yang merupakan representasi dari sebuah citra yaitu feature vector. Setelah didapatkan fitur, maka selanjutnya adalah proses SVM, dari fitur tersebut bisa langsung di test apakah dikenali atau tidak dengan proses recognize, atau dimasukkan sebagai objek yang akan dilatih dalam proses training. Proses training akan menghasilkan sebuah model SVM, model ini merupakan representasi dari seluruh metode SVM. Model ini juga dapat disimpan ke dalam file untuk dipakai lagi. Proses recognize menggunakan model SVM yang sudah ada, input dimasukkan ke dalam model SVM untuk diketahui kelasnya. Selanjutnya proses validasi juga termasuk di dalam simulasi, validasi sama seperti proses recognize memasukkan input baru ke dalam model SVM untuk diketahui kelasnya, tetapi dalam validasi, kelasnya sudah diketahui, maka dilakukan perbandingan hasil yang dikeluarkan SVM dengan kelas yang diharapkan.
82
3.2.2 Diagram Hierarki
Gambar 3.14 Diagram Hierarki Aplikasi Pengenalan Karakter Tulis Tangan Aplikasi pengenalan karakter tulis tangan dimulai dengan Menu yang terdiri dari 3, yaitu File, Input dan Output. File terdiri dari tiga Menu, yaitu Load Image, Save SVM, dan Exit. Load Image berfungsi untuk memasukkan citra dari file, Save SVM untuk menyimpan SVM yang telah dibuat ke dalam file, Exit untuk keluar dari aplikasi. Input terdiri dari satu Menu, yaitu Pen Mode yang berfungsi untuk memperbesar Canvas Original Image. Output terdiri dari satu Menu, yaitu Save Output to File yang berfungsi untuk menyimpan hasil dari Textbox Result ke dalam file.
83
Citra karakter dapat langsung dibuat di dalam Canvas Original Image, atau dimasukkan dari file dengan menu Load Image. Setelah ada citra, maka Preprocessing dapat dilakukan, hasil dari Preprocessing akan muncul di Picturebox Image Input. Setelah Image Input terisi, Segmentation dapat dilakukan, Segmentation akan membagi citra di dalam Image Input menjadi beberapa citra. Setelah Segmentation, selanjutnya bisa dipilih Menu untuk melakukan Validasi, Recognize, atau Training. Ketiga menu tersebut akan menghasilkan output di dalam Text Result. 3.2.3 State Transition Diagram 3.2.3.1 State Transition Diagram untuk proses Training
Gambar 3.15 STD untuk modul Training
84
Di dalam Main Menu terdapat File, Input, Output. Dari File, menu yang tersedia adalah Load Image, Save SVM, dan Exit. Dari Input, menu yang tersedia adalah Pen Mode, dari situ Main Menu dapat dipilih kembali. Menu Output, juga terdiri dari satu menu yaitu Save Output to File.. Citra dapat digambar langsung di dalam aplikasi, cara lain untuk memasukkan citra adalah dengan menu Load Image, setelah citra siap, maka menu Preprocessing
dapat
dilakukan,
setelah
Preprocessing,
baru
menu
Segmentation dapat dijalankan. Untuk melakukan Training, Expected Output harus diisi terlebih dulu, setelah dilakukan Training, hasilnya akan tampil dalam Result. Dari menu Preprocessing, Segmentation dan pengisian Expected Output, bisa langsung memilih kembali ke Main Menu. 3.2.3.2 State Transition Diagram untuk proses Simulasi
Gambar 3.16 STD untuk modul Simulasi
85
Modul Simulasi dan Training tidak jauh berbeda, yang berbeda adalah setelah dilakukan Segmentation, yang dilakukan selanjutnya adalah Recognize 3.2.3.3 State Transition Diagram untuk proses Validasi
Gambar 3.17 STD untuk modul Validasi Pada modul validasi, langkah – langkah sampai menu Segmentation masih sama dengan modul Training atau Simulasi. Setelah Segmentation,
86
Expected Output diharuskan untuk diisi, lalu setelah Validate dilakukan, maka hasilnya akan keluar di Result, dan di Validate Output. 3.2.4 Layout Sistem
Gambar 3.18 Layout Perancangan Sistem Pengenalan Karakter Tulis Tangan Pengguna akan diminta untuk memasukkan inputan. Salah satu caranya adalah dengan memilih file citra pada menu Load Image (nomor 1) yang selanjutnya akan menampilkan citra tersebut pada box Original Image. Box ini juga dapat langsung digambar dengan menggunakan pointer, dengan begitu inputan dapat langsung dibuat di dalam aplikasi. Tahap selanjutnya adalah dilakukan Preprocessing (nomor 4) yang akan menghasilkan gambar yang sudah di Preprocessing. Setelah dilakukan Preprocessing baru di Segmentation (nomor 5), Segmentation adalah pembagian gambar pada citra yang telah di Preprocessing, pembagian dilakukan per-karakter pada citra. Citra yang sudah di Segmentation
87
akan tampil pada bagian box Images,. Jika citra segmentasi yang akan dikenali terlalu banyak, layar hanya akan menampilkan lima citra segmentasi, button Prev (nomor 6) dan Next (nomor 7) sebagai tombol navigasi untuk mengatur citra mana yang akan ditampilkan. Tidak semua citra setelah di segmentation akan bersih dari noise, maka disediakan tombol Remove (nomor 9) untuk menghapus citra segmentasi tersebut jika pengguna tidak membutuhkan citra tersebut. Jika ingin menghapus seluruhnya disediakan tombol Clear (nomor 8). Sebelum di Training diharuskan mengisi box Training (nomor 13) yang berisi parameter yang akan digunakan untuk proses pelatihan. Button Recognize (nomor 10) digunakan untuk mengenali huruf yang sudah diproses sehingga keluar hasil output di Textbox Result (nomor 14). Validate (nomor 11) berfungsi untuk membandingkan data yang sudah di Recognize dengan Expected Output sehingga akan diketahui berapa error yang terjadi. Training (nomor 12) berfungsi untuk melatih data.