Anda di halaman 1dari 33

BAB III

ANALISIS DAN IMPLEMENTASI

Pada bab ini dibahas analisis dan perancangan sistem yang dibuat. Pada

Tugas Akhir ini digunakan algoritma YOLO (You Only Look Once) dengan model

pelatihan Tunisian License Plate untuk pendeteksian plat nomor hitam pada

kendaraan mobil Indonesia dan dianalisis serta diterapkan algoritma Support Vector

Machine untuk pengenalan karakter pada plat nomor hitam mobil Indonesia yang

sudah terdeteksi.

3.1 Analisis Masalah

Permasalahan yang ada adalah bagaimana sebuah sistem dapat mengenali

dan memprediksi karakter pada plat nomor hitam mobil Indonesia dengan masukan

gambar.

Pendeteksian plat nomor hitam pada kendaraan mobil Indonesia

memerlukan teknik deteksi objek dengan model yang mampu mendeteksi objek plat

nomor hitam sebuah gambar masukan mobil Indonesia. Model terbentuk sebagai

hasil proses pembelajaran machine learning atau deep learning. Algoritma deep

learning yang digunakan adalah YOLO (You Only Look Once) untuk deteksi objek

plat nomor pada gambar dan algoritma machine learning yang digunakan adalah

Support Vector Machine untuk pengenalan dan prediksi karakter pada plat nomor

yang sudah terdeteksi.

3.2 Analisis Data Set Pendeteksian Plat Nomor Mobil

Data set pada penelitian ini bersumber dari Kaggle yang berisikan gambar

mobil dengan plat nomor Tunisia berlatar warna hitam dan warna putih untuk warna

karakternya, serta data anotasi untuk mendapatkan informasi ukuran panjang dan

15
lebar pada gambar dan titik-titik koordinat plat nomor pada gambar. Data set ini

digunakan sebagai data latih dengan tahapan persiapan sebagai berikut:

1. Disiapkan data yang akan digunakan berupa gambar mobil dengan plat

Tunisia berlatar warna hitam dan warna putih untuk karakternya.

Gambar 3.1 Dataset Gambar Mobil Plat Tunisia Untuk Data Latih

2. Membuat data anotasi dari setiap gambar untuk mendapatkan informasi

ukuran panjang dan lebar pada gambar dan titik-titik koordinat plat nomor

pada gambar. Data anotasi dibuat menggunakan LabelImg dan disimpan

dalam bentuk .xml. Berikut contoh isi dari data anotasi:

<annotation>
<folder>images</folder>
<filename>147.jpg</filename>
<path>C:\Users\achraf_k\Desktop\achraf\ANPR\images\147.jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>1000</width>
<height>747</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>LP</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>255</xmin>
<ymin>540</ymin>
<xmax>512</xmax>
<ymax>601</ymax>
</bndbox>
</object>
</annotation>
3. Data latih sebanyak 567 gambar dan 567 data anotasi berbentuk .xml.

16
Semua data latih tersebut sudah diproses pelatihan menggunakan algoritma

YOLO (You Only Look Once) dan menghasilkan model berupa data dengan nama

lapi.weights yang akan dipakai untuk proses pengujian pendeteksian plat nomor

hitam pada gambar mobil Indonesia.

3.3 Analisis Algoritma YOLO (You Only Look Once)

Pada bagian ini dijelaskan analisis algoritma YOLO (You Only Look Once)

untuk pendeteksian lokasi plat nomor pada gambar. YOLO merupakan metode

pendeteksian objek yang bisa diterapkan pada sebuah gambar ataupun video secara

real-time. Terdapat 3 versi algoritma YOLO, yaitu YOLOv1, YOLOv2, dan

YOLOv3. Pada Tugas Akhir ini, algoritma yang digunakan untuk pendeteksian

objek plat nomor pada gambar adalah YOLOv3.

YOLOv3 merupakan pengembangan dari YOLOv2 dan YOLOv1. YOLOv3

pada dasarnya digunakan untuk mendeteksi banyak objek dalam satu gambar, tetapi

dalam Tugas Akhir ini, YOLOv3 digunakan untuk mendeteksi satu objek saja, yaitu

plat nomor hitam pada kendaraan mobil.

Berikut langkah-langkah pendeteksian objek menggunakan YOLOv3:

1. Ukuran gambar masukan diubah menjadi 416x416 piksel.

2. Setelah gambar masukan diubah ukurannya, lalu sistem membagi

gambar masukan menjadi 13x13 sel grid, dengan ukuran tiap sel grid

yaitu 32x32 piksel.

17
Gambar 3.2 Gambar Masukan Dengan 13x13 Sel Grid

3. Sistem akan menjalankan proses pendeteksian objek di setiap sel grid

yang ada. Setiap sel grid memprediksi bounding box (B) dan confidence

score. Jika tidak ada objek dalam suatu sel grid, maka sel grid tersebut

memiliki confidence score = 0.

4. Jika pusat objek terdeteksi dalam suatu sel grid, maka sel grid tersebut

bertanggung jawab untuk mendeteksi objek secara keseluruhan.

5. Setelah pusat objek terdeteksi, selanjutnya sistem memprediksi

bounding box (B) dan confidence score untuk bounding box tersebut.

 Setiap bounding box berisikan 5 komponen: x, y, w, h, dan juga

confidence score.

 (x,y) merupakan koordinat pusat dari bounding box (B).

18
 w merupakan nilai lebar.

 h merupakan nilai tinggi.

 confidence score merupakan nilai IOU antara predicted box

dengan ground truth box.

Gambar 3.3 Prediksi Pusat Objek Dan Bounding Box

6. Setiap sel grid juga memprediksi conditional class probabilities (C),

Pr(Classi|Object). C ini bertujuan untuk memprediksi objek apa yang

ada dalam suatu sel grid. Dalam kasus ini, sistem hanya memprediksi 1

class saja, yaitu LP.

19
3.4 Segmentasi Karakter

Pada bagian ini, dijelaskan proses segmentasi karakter pada gambar plat

nomor yang sudah terdeteksi. Segmentasi karakter diperlukan sebelum proses

prediksi karakter dijalankan, karena hasil dari proses segmentasi merupakan

gambar karakter tunggal.

Proses segmentasi karakter dimulai dengan mengubah gambar plat nomor

menjadi mode grayscale, seperti ditunjukkan pada Gambar 3.4.

Gambar 3.4 Plat Nomor Mode Grayscale

Setelah gambar plat nomor diubah menjadi mode grayscale, kemudian

gambar diubah lagi menjadi mode hitam putih dengan cara mengubah nilai pada

setiap piksel gambar. Untuk piksel yang bernilai 0-120 diset menjadi 0 (hitam), dan

untuk piksel yang bernilai 121-255 diset menjadi 255 (putih).

Gambar 3.5 Plat Nomor Mode Hitam Putih

Selanjutnya, dilakukan segmentasi gambar secara vertikal dan horizontal

untuk mendapatkan titik-titik koordinat dari gambar karakter berwarna putih yang

20
kemudian disimpan ke dalam suatu variabel list untuk selanjutnya dilakukan proses

seleksi. Proses seleksi gambar karakter dilakukan dengan cara mencari gambar

karakter yang tertinggi (dengan minimal tinggi 20 piksel) untuk dijadikan ukuran

tetap dari tinggi gambar karakter yang dibutuhkan, kemudian gambar karakter yang

memiliki ukuran lebar kurang dari 15 piksel tidak akan diekstraksi. Hasil dari proses

segmentasi ditunjukkan pada Gambar 3.6.

Gambar 3.6 Hasil Segmentasi Karakter

Setelah didapati gambar-gambar karakter tunggal dari proses segmentasi,

kemudian masing-masing gambar dibuat menjadi ukuran persegi dengan cara

menambahkan latar belakang warna hitam pada setiap gambar karakter. Ukuran

latar belakang warna hitam (persegi) bergantung pada ukuran gambar hasil

segmentasi. Misal: gambar hasil segmentasi karakter ‘B’ memiliki ukuran 38x85

piksel, maka latar belakang warna hitam berukuran 85x85 piksel.

Gambar 3.7 Hasil Segmentasi Karakter Ukuran Persegi

21
Supaya dapat dimasukan ke dalam proses prediksi karakter, gambar hasil

segmentasi karakter harus di-resize menjadi 20x20 piksel. Seperti yang ditunjukkan

pada Gambar 3.8.

Gambar 3.8 Hasil Segmentasi Karakter 20x20 piksel

3.5 Analisis Data Set Pengenalan Karakter Plat Nomor

Data set penelitian ini bersumber dari Kaggle dan Google image. Data set

ini merupakan gambar karakter berwarna hitam pada latar dan warna putih pada

karakter yang sudah siap untuk dilakukan proses pelatihan. Data set gambar ini

memiliki ukuran 20x20 piksel.

Gambar 3.9 Dataset Gambar Karakter

Setiap gambar karakter disimpan dalam folder yang berisikan gambar

karakter yang serupa. Nama folder dibuat sesuai dengan gambar karakter yang ada

di dalam folder tersebut. Folder ‘0’ berisikan sekumpulan gambar karakter 0 hingga

folder ‘Z’ yang berisikan gambar karakter Z.

Total data set untuk proses pengenalan karakter ini berjumlah sebanyak

1100 gambar dengan rincian sebagai berikut:

 Karakter ‘0’ sebanyak 33 gambar.

 Karakter ‘1’ sebanyak 47 gambar.

 Karakter ‘2’ sebanyak 36 gambar.

 Karakter ‘3’ sebanyak 36 gambar.

 Karakter ‘4’ sebanyak 35 gambar.

22
 Karakter ‘5’ sebanyak 33 gambar.

 Karakter ‘6’ sebanyak 32 gambar.

 Karakter ‘7’ sebanyak 43 gambar.

 Karakter ‘8’ sebanyak 26 gambar.

 Karakter ‘9’ sebanyak 39 gambar.

 Karakter ‘A’ sebanyak 28 gambar.

 Karakter ‘B’ sebanyak 28 gambar.

 Karakter ‘C’ sebanyak 32 gambar.

 Karakter ‘D’ sebanyak 28 gambar.

 Karakter ‘E’ sebanyak 28 gambar.

 Karakter ‘F’ sebanyak 28 gambar.

 Karakter ‘G’ sebanyak 28 gambar.

 Karakter ‘H’ sebanyak 28 gambar.

 Karakter ‘I’ sebanyak 27 gambar.

 Karakter ‘J’ sebanyak 28 gambar.

 Karakter ‘K’ sebanyak 28 gambar.

 Karakter ‘L’ sebanyak 28 gambar.

 Karakter ‘M’ sebanyak 28 gambar.

 Karakter ‘N’ sebanyak 32 gambar.

 Karakter ‘O’ sebanyak 28 gambar.

 Karakter ‘P’ sebanyak 28 gambar.

 Karakter ‘Q’ sebanyak 28 gambar.

 Karakter ‘R’ sebanyak 33 gambar.

 Karakter ‘S’ sebanyak 28 gambar.

23
 Karakter ‘T’ sebanyak 28 gambar.

 Karakter ‘U’ sebanyak 28 gambar.

 Karakter ‘V’ sebanyak 28 gambar.

 Karakter ‘W’ sebanyak 29 gambar.

 Karakter ‘X’ sebanyak 28 gambar.

 Karakter ‘Y’ sebanyak 28 gambar.

 Karakter ‘Z’ sebanyak 27 gambar.

3.6 Analisis Algoritma Support Vector Machine (SVM)

Pada bagian ini dijelaskan analisis algoritma Support Vector Machine untuk

pengenalan dan klasifikasi karakter pada gambar plat nomor hitam. Sebelum

dilakukan analisis algoritma SVM, data set gambar terlebih dahulu diubah ke

bentuk matriks dengan cara konversi ke mode grayscale.

3.6.1 Pengolahan Data Set ke Mode Grayscale

Analisis meliputi percobaan perhitungan SVM dengan data berupa gambar

berukuran 20x20 piksel yang setiap pikselnya dikonversi ke nilai grayscale,

sehingga data gambar tersebut memiliki 400 atribut nilai dengan rentang nilai 0-

255 untuk setiap atribut nilainya.

Misal, data yang digunakan sebagai sampel dalam perhitungan ini sebanyak

4 gambar berbentuk huruf ‘A’ dan ‘B’, masing-masing 2 gambar.

Gambar 3.10 Sampel Data Gambar Berukuran 20x20 Piksel

24
Kemudian, dilakukan konversi gambar menjadi nilai grayscale, sehingga

menghasilkan nilai-nilai pada tabel berikut.

Tabel 3.1 Hasil Konversi Grayscale dari Sampel Data Gambar A1

Tabel 3.2 Hasil Konversi Grayscale dari Sampel Data Gambar A2

25
Tabel 3.3 Hasil Konversi Grayscale dari Sampel Data Gambar B1

Tabel 3.4 Hasil Konversi Grayscale dari Sampel Data Gambar B2

Lalu, ubah data sampel pada Tabel 3.1, Tabel 3.2, Tabel 3.3, dan Tabel 3.4

menjadi matriks 20x20 yang dipaparkan pada matriks A1, A2, B1, dan B2.

26
51 42 42 42 42 42 42 … … 51
32 27 27 27 28 27 28 … … 33
37 28 27 28 27 28 26 … … 37
37 27 28 28 25 29 26 … … 38
37 27 27 26 26 27 23 … … 27
A1=
38 28 27 28 26 27 15 … … 38
37 28 27 28 26 27 13 … … 37
… … … … … … … … … …
… … … … … … … … … …
[53 46 44 38 35 34 40 … … 51]

35 18 18 18 18 18 18 … … 35
12 0 0 1 0 0 0 … … 13
18 1 0 0 1 0 0 … … 18
18 0 0 1 0 0 0 … … 18
19 0 0 0 0 0 0 … … 18
A2=
18 0 0 0 0 0 5 … … 18
18 0 0 1 0 1 55 … … 18
… … … … … … … … … …
… … … … … … … … … …
[35 18 18 18 18 18 17 … … 35]

1 0 1 0 0 55 159 … … 0
0 1 0 0 0 190 250 … … 0
0 0 0 1 1 210 254 … … 0
0 0 0 0 0 208 255 … … 0
0 0 0 1 0 210 254 … … 0
B1=
1 0 1 0 0 209 254 … … 0
0 0 0 0 0 209 254 … … 0
… … … … … … … … … …
… … … … … … … … … …
[0 0 0 0 0 164 225 … … 0]

0 0 0 0 77 253 247 … … 0
0 0 0 0 78 255 254 … … 0
0 0 0 0 77 255 254 … … 0
0 0 0 0 78 254 255 … … 0
0 0 1 0 77 255 255 … … 0
B2=
0 1 0 0 77 254 255 … … 0
1 0 0 0 77 255 255 … … 0
… … … … … … … … … …
… … … … … … … … … …
[0 0 0 0 0 164 225 … … 0]

Setelah itu, matriks A diubah menjadi vektor baris yang dinyatakan pada

vektor a1, a2, b1, dan b2.

27
a1=[51, 42, 42, 42, 42, 42, 42, 42, 42, 41, 41, 41, 43, 41, 42, 42, 42, 42, 43, 51, 32,
27, 27, 27, 28, 27, 28, 26, 26, 36, 39, 33, 22, 28, 27, 27, 27, 27, 26, 33, 37, 28, 27,
28, 27, 28, 26, 19, 61, 201, 222, 182, 30, 27, 26, 27, 27, 27, 28, 37, 37, 27, 28, 28,
25, 29, 26, 13, 123, 248, 235, 237, 78, 17, 29, 27, 27, 27, 27, 38, 37, 27, 27, 26, 26,
27, 23, 26, 184, 238, 226, 239, 146, 13, 24, 27, 27, 28, 27, 37, 38, 28, 27, 28, 26,
27, 15, 71, 227, 229, 231, 233, 203, 37, 20, 25, 25, 26, 27, 38, 37, 28, 27, 28, 26,
27, 13, 130, 246, 214, 152, 232, 240, 83, 21, 26, 27, 27, 27, 37, 38, 27, 27, 27, 28,
23, 30, 193, 248, 176, 46, 214, 246, 153, 13, 30, 28, 28, 28, 36, 37, 26, 27, 26, 29,
16, 74, 230, 244, 116, 4, 163, 245, 211, 38, 26, 24, 32, 25, 37, 38, 26, 27, 27, 26,
13, 141, 246, 220, 55, 8, 96, 241, 240, 95, 17, 28, 30, 28, 39, 37, 27, 27, 28, 25, 33,
198, 246, 177, 21, 18, 42, 208, 248, 164, 15, 28, 29, 28, 34, 39, 28, 28, 29, 14, 86,
235, 244, 109, 14, 31, 15, 152, 251, 214, 45, 23, 26, 26, 39, 38, 28, 28, 29, 17, 147,
251, 218, 48, 22, 28, 17, 86, 235, 241, 103, 16, 26, 30, 33, 38, 29, 29, 19, 42, 206,
250, 159, 17, 23, 29, 17, 36, 199, 248, 170, 19, 31, 26, 35, 34, 26, 27, 16, 91, 235,
231, 214, 194, 197, 202, 195, 199, 221, 232, 223, 53, 20, 24, 38, 39, 22, 31, 19, 161,
243, 216, 174, 170, 174, 173, 173, 169, 177, 231, 238, 116, 15, 30,36, 36, 27, 23,
45, 218, 248, 157, 11, 16, 18, 19, 21, 14, 28, 196, 247, 178, 25, 26, 36, 36, 27, 15,
109, 244, 238, 93, 15, 26, 26, 28, 23, 26, 12, 133, 252, 230, 66, 21, 37, 34, 26, 25,
55, 81, 74, 31, 24, 28, 27, 25, 25, 28, 22, 42, 77, 81, 48, 21, 33, 53, 46, 44, 38, 35,
34, 40, 44, 43, 45, 39, 44, 40, 46, 38, 35, 33, 38, 47, 51]
a2=[35, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 35, 12,
0, 0, 1, 0, 0, 0, 1, 0, 3, 2, 0, 1, 0, 1, 0, 0, 0, 0, 13, 18, 1, 0, 0, 1, 0, 0, 1, 170, 209, 210,
190, 14, 0, 0, 0, 0, 0, 0, 18, 18, 0, 0, 1, 0, 0, 0, 48, 255, 255, 254, 255, 82, 0, 1, 0, 0,
0, 0, 18, 19, 0, 0, 0, 0, 0, 0, 129, 255, 254, 254, 255, 167, 1, 0, 0, 0, 0, 0, 18, 18, 0,
0, 0, 0, 0, 5, 210, 254, 255, 255, 255, 235, 20, 0, 0, 0, 0, 0, 18, 18, 0, 0, 1, 0, 1, 55,
253, 255, 254, 255, 254, 255, 89, 1, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 138, 255, 254,
252, 250, 254, 255, 177, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 7, 216, 255, 255, 195, 166,
254, 255, 242, 26, 0, 0, 0, 0, 18, 18, 0, 1, 0, 1, 63, 255, 255, 255, 111, 65, 255, 255,
255, 101, 1, 0, 0, 0, 18, 18, 0, 0, 0, 1, 149, 255, 255, 249, 43, 6, 227, 254, 255, 185,
0, 0, 0, 0, 18, 18, 0, 0, 1, 11, 224, 255, 255, 195, 0, 0, 152, 255, 255, 243, 33, 0, 1,
0, 18, 18, 1, 0, 0, 71, 254, 255, 255, 105, 1, 0, 59, 252, 254, 255, 109, 0, 0, 0, 18,
18, 0, 1, 0, 158, 255, 255, 253, 198, 183, 184, 189, 250, 254, 255, 194, 2, 0, 0, 18,
18, 1, 0, 16, 229, 255, 255, 255, 255, 254, 255, 255, 255, 255, 255, 249, 40, 0, 0,
18, 18, 0, 0, 82, 254, 255, 255, 138, 92, 93, 92, 94, 115, 249, 255, 255, 121, 0, 0,
18, 18, 0, 1, 180, 255, 255, 239, 10, 0, 0, 0, 0, 0, 201, 255, 255, 214, 6, 0, 18, 18, 0,
12, 166, 184, 187, 124, 0, 0, 0, 0, 0, 0, 92, 186, 185, 179, 29, 0, 18, 13, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 35, 18, 18, 18, 18, 18, 17, 18, 17, 19, 17, 18,
18, 18, 18, 18, 18, 18, 18, 35]
b1=[1, 0, 1, 0, 0, 55, 159, 144, 145, 149, 138, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
190, 250, 247, 253, 253, 249, 240, 189, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 210, 254,
217, 181, 186, 203, 245, 255, 180, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 255, 132, 27,
42, 41, 96, 231, 254, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 210, 254, 111, 0, 0, 0, 4, 156, 254,
141, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 209, 254, 115, 1, 0, 0, 0, 118, 255, 203, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 209, 254, 113, 0, 0, 0, 0, 121, 254, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206,

28
254, 119, 0, 0, 0, 7, 154, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 255, 144, 15, 29,
22, 127, 253, 252, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 201, 255, 255, 255, 255, 255, 255,
253, 145, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 255, 252, 252, 252, 251, 255, 255, 111,
0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 205, 254, 131, 15, 23, 62, 201, 255, 229, 59, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 208, 254, 111, 0, 0, 0, 48, 205, 255, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
205, 254, 112, 0, 0, 1, 0, 135, 255, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 255, 111, 0,
1, 0, 0, 118, 255, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 253, 113, 0, 0, 1, 0, 142, 255,
181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 254, 116, 0, 0, 3, 68, 214, 254, 130, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 208, 255, 151, 45, 52, 93, 219, 255, 217, 48, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
207, 255, 254, 253, 253, 253, 251, 226, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 225,
220, 217, 218, 217, 137, 2, 0, 0, 0, 0, 0, 0, 0]
b2=[0, 0, 0, 0, 77, 253, 247, 248, 253, 255, 254, 240, 232, 160, 18, 1, 0, 0, 0, 0, 0,
0, 0, 0, 78, 255, 254, 255, 243, 211, 225, 254, 255, 252, 95, 2, 0, 0, 0, 0, 0, 0, 0, 0,
77, 255, 254, 207, 98, 71, 80, 133, 254, 255, 216, 29, 0, 0, 0, 0, 0, 0, 0, 0, 78, 254,
255, 139, 0, 0, 0, 29, 255, 254, 255, 97, 0, 0, 0, 0, 0, 0, 1, 0, 77, 255, 255, 118, 0, 1,
0, 16, 255, 255, 254, 160, 0, 0, 0, 0, 0, 1, 0, 0, 77, 254, 255, 125, 1, 0, 1, 22, 255,
255, 255, 139, 0, 0, 0, 0, 1, 0, 0, 0, 77, 255, 255, 131, 2, 0, 0, 28, 255, 254, 253, 62,
0, 0, 0, 0, 0, 1, 0, 0, 77, 255, 255, 222, 60, 17, 24, 135, 255, 235, 66, 4, 0, 0, 0, 0, 0,
0, 0, 1, 77, 255, 254, 255, 205, 174, 179, 240, 255, 189, 7, 1, 0, 0, 0, 0, 0, 0, 1, 0,
78, 255, 254, 255, 255, 255, 255, 255, 255, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 77, 254,
255, 255, 233, 210, 217, 254, 255, 191, 12, 0, 0, 0, 0, 0, 0, 1, 0, 0, 77, 255, 253, 217,
116, 87, 95, 153, 255, 240, 95, 6, 0, 0, 0, 0, 0, 0, 0, 1, 77, 254, 255, 139, 0, 0, 0, 33,
255, 254, 254, 60, 0, 0, 0, 0, 1, 0, 0, 0, 77, 255, 255, 122, 1, 0, 0, 19, 254, 253, 255,
117, 0, 0, 0, 0, 0, 1, 0, 0, 77, 255, 255, 123, 1, 0, 0, 19, 254, 255, 255, 133, 0, 0, 0,
0, 1, 0, 0, 0, 77, 254, 255, 124, 0, 0, 0, 21, 255, 254, 255, 122, 0, 0, 0, 0, 0, 0, 0, 0,
77, 255, 255, 198, 58, 23, 33, 113, 255, 255, 255, 56, 0, 0, 0, 0, 0, 0, 0, 0, 84, 255,
254, 255, 196, 148, 162, 252, 255, 255, 180, 9, 0, 0, 0, 0, 0, 0, 0, 0, 62, 224, 221,
224, 235, 240, 239, 225, 221, 163, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 99, 101, 99, 99,
99, 100, 86, 80, 31, 0, 0, 0, 0, 0, 0]
Vektor a1, a2, b1, dan b2 masing-masing memiliki 400 nilai grayscale range

0 sampai 255 yang didapat dari Gambar 3.7.

3.6.2 Percobaan Perhitungan Support Vector Machine

Pada subbab ini dijelaskan percobaan perhitungan Support Vector Machine

menggunakan ke-empat sampel data vektor a1, a2, b1, b2. Ke-empat sampel data

masing-masing diambil 10 nilai pertama dan akan dijadikan satu matriks, maka

didapat matriks A sebagai berikut:

29
51 42 42 42 42 42 42 42 42 41
35 18 18 18 18 18 18 18 18 18
A=[ ]
1 0 1 0 0 55 159 144 145 149
0 0 0 0 77 253 247 248 253 255

Matriks A dipetakan ke dalam fungsi kernel yang digunakan dalam

pelatihan SVM yaitu linear. Fungsi kernel linear seperti pada Rumus 1.

𝑲(𝒙𝒋 , 𝒙𝒌 ) = 𝒙𝒋 ′. 𝒙𝒌 (1)

Dari perhitungan Rumus 1 dengan xj,xk ∈ A, diperoleh hasil seperti pada

Matriks B.

3827 2772 2773 2772 2772 2827 2931 2916 2917 2870
2772 2088 2088 2088 2088 2088 2088 2088 2088 2046
2773 2088 2089 2088 2088 2143 2247 2232 2233 2195
2772 2088 2088 2088 2088 2088 2088 2088 2088 2046
B= 2772
2827
2088
2088
2088
2143
2088
2088
8017
21569
21569
69122
21107
73324
21184
72752
21569
74072
21681
74756
2931 2088 2247 2088 21107 73324 88378 86240 87634 88722
2916 2088 2232 2088 21184 72752 86240 84328 85712 86742
2917 2088 2233 2088 21569 74072 87634 85712 87122 88166
[2870 2046 2195 2046 21681 74756 88722 86742 88166 89231]

Tujuan dari proses pelatihan SVM adalah mencari support vector yang

menghasilkan hyperplane dengan margin terbesar antara support vector anggota

kelas dengan yang bukan. Proses pelatihan SVM dilakukan dengan Rumus 2.

𝒘. 𝒙𝒊 + 𝒃 = 𝟎 (2)

Vektor w merupakan vektor bobot, dan b adalah nilai bias yang merupakan

parameter model klasifikasi SVM, xi = {xi1, xi2, ..., xi10} ∈ A merupakan atribut

set untuk data latih ke-i. Misal w = (0.25, 0.25, 0.25, 0.25), dengan nilai b = -1.3190.

Dari perhitungan Rumus 2 diperoleh hasil support vector seperti pada

matriks C.

51 42 42 42 42 42 42 42 42 41
C=[ ]
1 0 1 0 0 55 159 144 145 149

30
3.7 Analisis Sistem

Pada subbab ini akan dijelaskan hasil analisa untuk perancangan perangkat

lunak menggunakan flowchart. Ada 4 flowchart yang dijelaskan dalam subbab ini,

diantaranya flowchart secara keseluruhan sistem, flowchart deteksi plat, flowchart

segmentasi karakter, dan flowchart pengenalan karakter.

3.7.1 Flowchart Keseluruhan Sistem

Pada flowchart ini, dijelaskan seluruh cara kerja sistem serta proses-proses

yang terjadi secara keseluruhan. Berikut flowchart sistem pengenalan karakter plat

nomor hitam mobil Indonesia secara keseluruhan ditunjukkan pada Gambar 3.10.

Gambar 3.11 Flowchart Sistem Pengenalan Karakter Plat Nomor Hitam Mobil

Dimulai dari meng-input gambar mobil plat hitam, setelah itu dilakukan

proses deteksi lokasi plat nomor menggunakan algoritma YOLO. Setelah

mendapatkan lokasi plat nomor mobil, lalu plat nomor yang terdeteksi dipotong

31
untuk kemudian disimpan sebagai output dari proses deteksi plat nomor dan

dijadikan input untuk proses segmentasi karakter.

Proses segmentasi karakter bertujuan untuk menemukan dan mengekstraksi

karakter yang ada di plat nomor menjadi beberapa karakter tunggal. Setiap karakter

tunggal dijadikan input untuk proses prediksi karakter menggunakan SVM

menggunakan model SVM yang sudah dilatih. Output dari proses prediksi karakter

menggunakan SVM ini adalah karakter adjad dan juga angka yang didapat dari

label nama folder.

3.7.2 Flowchart Deteksi Plat Nomor

Pada flowchart ini, dijelaskan alur kerja sistem dalam mendeteksi lokasi plat

nomor hitam mobil melalui masukan gambar. Berikut flowchart sistem Deteksi Plat

Nomor Hitam ditunjukkan pada Gambar 3.11.

Gambar 3.12 Flowchart Deteksi Plat Nomor

32
Dimulai dari meng-input gambar mobil, kemudian ukuran gambar diubah

menjadi 416x416, setelah itu dibuat 13x13 sel grid untuk memulai proses

pendeteksian tiap sel grid. Jika pusat objek target (plat nomor) terletak pada suatu

sel grid, maka sel grid tersebut bertugas untuk mencari tinggi dan lebar objek

melalui sel grid di sekitarnya, hingga objek plat nomor hitam terdeteksi.

3.7.3 Flowchart Segmentasi Karakter Plat Nomor

Pada flowchart ini, dijelaskan alur kerja sistem dalam mensegmentasi

karakter pada plat nomor hitam mobil melalui masukan plat nomor yang didapat

dari output sistem deteksi plat nomor. Berikut flowchart sistem Segmentasi

Karakter Plat Nomor Hitam ditunjukkan pada Gambar 3.12.

Gambar 3.13 Flowchart Segementasi Karakter Plat Nomor

33
Dimulai dari meng-input gambar plat nomor mobil yang didapat dari sistem

deteksi plat nomor, gambar plat diubah menjadi mode grayscale. Selanjutnya, dari

gambar grayscale, dicari titik-titik koordinat lebar karakter dan juga titik-titik

koordinat tinggi karakter. Titik-titik koordinat tinggi karakter bersifat tetap, yang

berarti semua karakter plat nomor memiliki tinggi yang sama, sedangkan titik-titik

koordinat lebar karakter harus diseleksi dahulu untuk menghindari deteksi karakter

yang salah. Ukuran lebar karakter minimal 16 piksel. Setelah didapati titik

koordinat lebar karakter, kemudian gambar plat grayscale dengan titik-titik

koordinat lebar dan tinggi yang sudah didapat diekstraksi dan kemudian disimpan

ke dalam list potongan gambar karakter sebagai output dari proses segmentasi

karakter plat nomor hitam.

3.7.4 Flowchart Prediksi Karakter Plat Nomor

Pada flowchart ini, dijelaskan alur kerja sistem dalam memprediksi karakter

pada plat nomor hitam mobil melalui masukan list gambar potongan plat nomor

yang didapat dari hasil segmentasi karakter. Berikut flowchart sistem Prediksi

Karakter Plat Nomor Hitam ditunjukkan pada Gambar 3.13.

34
T

Gambar 3.14 Flowchart Prediksi Karakter Plat Nomor

Masukan pada bagian sistem ini didapat dari hasil segmentasi karakter

berupa sekumpulan potongan gambar karakter. Setelah input potongan gambar

karakter, model SVM yang sudah dilatih juga dimasukan ke dalam sistem ini.

Masukan list potongan gambar satu per satu di resize menjadi 20x20 piksel

dan dijadikan matriks yang juga berukuran 20x20. Matriks 20x20 diubah menjadi

vektor untuk selanjutnya dijadikan sebagai x input prediksi karakter dengan model

klasifikasi SVM yang sudah dilatih dan akan menghasilkan label atau kelas dari

proses pelatihan SVM. Hasil dari proses prediksi merupakan list kelas atau label

dari masing-masing potongan gambar

35
3.8 Lingkungan Pengembangan

Sistem ini dirancang menggunakan perangkat keras dan perangkat lunak

dengan spesifikasi sebagai berikut:

1) Perangkat Keras (Hardware)

Perangkat keras yang digunakan untuk merancang sistem:

 Laptop

- Processor : AMD A10-9620P Radeon R5, 10 Compute

Cores4C+6G (4CPUs), ~2.5GHz

- Memory (RAM) : 8.00 GB

- Kapasitas Harddisk : 1 TB

2) Perangkat Lunak (Software)

a. Sistem Operasi: Windows 10 Pro 64-bit (10.0, Build 17763)

b. Editor: Spyder (Anaconda3)

3.9 Tahapan Implementasi

Dalam proses implementasi ada tahapan-tahapan yang dilakukan, yaitu:

1. Perancangan source code dari sumber referensi.

2. Analisis algoritma.

3. Perancangan dataset untuk data latih dan data uji.

4. Pengkodean sistem.

3.10 Implementasi Pengkodean Sistem

Pada subbab ini, ditampilkan beberapa scope source code yang sudah

didapat dan dimodifikasi untuk diimplementasikan ke dalam data gambar mobil

plat nomor hitam Indonesia.

36
3.10.1 Source Code Pelatihan Dataset Karakter dengan SVM

Sebelum memulai proses pendeteksian dan pengenalan plat nomor, terlebih

dahulu dijalankan source code pelatihan dataset karakter menggunakan SVM untuk

membuat model pengenalan karakter agar nantinya sistem bisa memprediksi

karakter-karakter yang terdapat pada gambar plat nomor. Bagian source code ini

terbagi menjadi 2 tahap: tahap pertama merupakan proses mendapatkan nilai fitur

dari gambar dataset karakter serta label yang didapatkan dari nama folder, dan tahap

kedua merupakan proses melatih fitur dan label untuk dijadikan model SVM.

Gambar 3.15 Source Code Mengambil Nilai Fitur dan Label

Yang pertama dijalankan pada source code ini adalah menjalankan fungsi

‘load_dataset’ dengan parameter lokasi folder penyimpanan gambar dataset

karakter. Saat menjalankan fungsi ini, terlebih dahulu diinisalisasi 2 variabel

37
kosong dengan tipe data list dengan nama ‘features_list’ untuk menyimpan nilai

fitur dari gambar input dataset dan ‘features_label’ untuk menyimpan label dari

nama folder masing-masing label.

Dijalankan perintah ‘cv2.imread’ agar sistem bisa membaca input gambar

karakter, setelah itu dijalankan perintah ‘cv2.cvtColor(training_digit_image,

cv2.COLOR_BGR2GRAY)’ untuk merubah mode gambar input menjadi

grayscale serta mendapatkan nilainya dari masing-masing piksel gambar.

Kemudian, nilai grayscale yang sudah didapati diubah menjadi matriks, lalu

dikonversi menjadi vektor. Nilai vektor kemudian ditambahkan ke dalam variabel

list ‘features_list’, serta nama folder dari lokasi penyimpanan gambar tersebut

ditambahkan ke dalam variabel list ‘features_label’.

Setelah didapati semua nilai fitur dan label, maka isi dari variabel

‘features_list’ dan ‘features_label’ dikembalikan atau disimpan ke dalam variabel

‘data’ dan ‘labels’ untuk kemudian dijadikan input untuk proses pelatihan dengan

SVM. Proses pelatihan SVM terdapat dalam fungsi ‘svm(data, labels, “svm.pkl”)’.

38
Gambar 3.16 Source Code Proses Pelatihan dengan SVM

Perintah pertama pada fungsi ‘svm’ adalah membagi dataset menjadi data

latih dan data uji dengan persentase data latih sebanyak 67% dan data uji sebanyak

33%. Data latih dan label data latih disimpan ke dalam variabel ‘x_train’ dan

‘y_train’. Data uji dan label data uji disimpan ke dalam variabel ‘x_test’ dan

‘y_test’.

Selanjutnya, diinisialisasi fungsi kernel linear pada perintah fungsi

‘SVC(kernel=’linear’)’ yang disimpan ke dalam variabel ‘clf’ untuk selanjutnya

masuk ke dalam proses pelatihan pada perintah ‘clf.fit(x_train, y_train)’.

Setelah proses pelatihan dijalankan proses pengujian dengan perintah fungsi

‘ clf.predict’ dengan parameter data uji ‘x_test’, hasil proses pengujian ini

merupakan urutan label yang disimpan ke dalam variabel ‘y_pred’. Hasil yang

disimpan dalam variabel ‘y_pred’ ini kemudian dijadikan parameter dengan

‘y_test’ untuk didapatkan hasil confusion matrix melalui perintah fungsi

‘confusion_matrix(y_test, y_pred)’.

Nilai akurasi pada model SVM ini didapatkan dengan menjalankan perintah

fungsi ‘clf.score(x_test, y_test)’. Model pelatihan yang terdapat pada variabel ‘clf’

disimpan ke dalam file “svm.pkl” dengan menjalankan perintah fungsi

‘joblib.dump(clf, output_file_path)’.

3.10.2 Source Code Inisialisasi Parameter

Bagian source code ini merupakan inisialisasi parameter-parameter yang

dibutuhkan untuk pemanggilan fungsi cv.dnn.readNetFromDarknet untuk

membaca konfigurasi model yang didapat dari website resmi pengembang

39
algoritma YOLO dan juga bobot model yang didapat dari hasil pelatihan YOLO

dengan data set gambar mobil berplat nomor Tunisia berwarna hitam.

Gambar 3.17 Source Code Inisialisasi Parameter

Pertama dilakukan inisialisasi variabel ‘confThreshold = 0.5’ sebagai

batasan skor keyakinan akan objek plat yang dideteksi, serta ‘nmsThreshold = 0.4’

sebagai batasan skor non-maximum suppresion.

Setelah itu, dilakukan inisialisasi variabel ‘inpWidth = 416’ dan ‘inpHeight

= 416’ sebagai ukuran gambar untuk proses pendeteksian dengan algoritma YOLO.

Variabel ‘modelConfiguration = "darknet-yolov3.cfg"’ merupakan konfigurasi

bawaan dari pengembang algoritma YOLO, sedangkan variabel ‘modelWeights =

"lapi.weights"’ merupakan model hasil pelatihan dengan data set gambar mobil

berplat nomor Tunisia.

Setelah variabel-variabel diinisialisasi, kemudian fungsi

cv.dnn.readNetFromDarknet dijalankan dengan parameter ‘modelConfiguration’

dan ‘modelWeights’ dan disimpan ke dalam variabel ‘net’.

40
3.10.3 Source Code Input Image

Bagian source code ini untuk memasukkan data gambar mobil ke dalam

sistem, data yang dimasukkan berupa data gambar dengan format jpg. Gambar

masukan disimpan ke dalam variabel ‘filename’, variabel ‘filename’ berisikan

lokasi penyimpanan gambar pada direktori komputer beserta dengan nama file

gambar, dalam kasus ini file gambar berlokasi di direktori ‘E:/Dokumen

Christopher/Institut Teknologi Indonesia/Semester 8/Tugas Akhir

Chip/Dataset_Kamera/Gambar’ dengan nama file ‘plat_5.jpg’. Kemudian, proses

pembacaan gambar menggunakan fungsi ‘cv.VideoCapture’ yang disimpan ke

dalam variabel ‘cap’ dengan parameter variabel ‘filename’.

Disiapkan juga variabel ‘outputFile’ dengan nama ‘filename[:4]+

“_yolo_out_py.png”’, yang berarti variabel ‘outputFile’ berisikan lokasi direktori

yang sama dengan variabel ‘filename’ dengan nama file hampir sama dengan

variabel ‘filename’dengan tambahan nama “_yolo_out_py.png”.

Gambar 3.18 Source Code Input Image

3.10.4 Source Code Deteksi Plat dengan Algoritma YOLO

Bagian source code ini untuk melakukan deteksi plat nomor hitam dengan

algoritma YOLO. Dimulai dengan membaca gambar masukan dengan fungsi

‘read()’ yang akan menghasilkan nilai true atau false yang disimpan ke dalam

variabel ‘hasFrame’ (‘hasFrame’ akan bernilai true jika masih ada gambar yang

terbaca, dan akan bernilai false jika sudah tidak ada gambar yang terbaca), serta

41
nilai array 3 dimensi (nilai citra RGB) yang disimpan ke dalam variabel ‘frame’.

Pada bagian ini, ‘hasFrame’ akan bernilai true sehingga source code yang ada di

dalam bagian ‘if not hasFrame:’ tidak akan dijalankan.

Gambar 3.19 Source Code Mendapatkan Nilai Array dari Gambar Masukan

Kemudian, dilakukan pemanggilan fungsi ‘cv.dnn.blobFromImage’ dengan

parameter variabel ‘frame’, 1/255 yang merupakan nilai pengskala untuk array 3

dimensi yang tersimpan di dalam variabel ‘frame’, dan juga variabel ‘inpWidth’

dan ‘inpHeight’ untuk ukuran array di setiap dimensinya. Nilai balik dari fungsi ini

merupakan array 4 dimensi yang disimpan ke dalam variabel ‘blob’.

Setelah didapati nilai balik dari fungsi ‘cv.dnn.blobFromImage’ yang

disimpan ke dalam variabel ‘blob’, kemudian variabel ‘blob’ dijadikan sebagai

parameter fungsi ‘net.setInput’. Fungsi ‘blobFromImage’ bertujuan untuk

42
mendapatkan nilai dari 4 dimensi gambar masukan. Fungsi ‘net.setInput’ adalah

untuk menset nilai masukan baru untuk jaringan pada variabel net.

Kemudian dijalankan fungsi ‘net.forward’ dengan parameter fungsi

‘getOutputNames(net)’ untuk mendapatkan informasi layer apa saja yang terdapat

pada variabel ‘net’. Setelah itu dijalankan fungsi ‘postprocess’ dengan parameter

‘frame’ dan ‘outs’.

Gambar 3.20 Source Code Mendapatkan Nilai dan Informasi dari Gambar

Gambar 3.21 Source Code Fungsi getOutputsNames

Fungsi ‘postprocess’ dengan parameter variabel ‘frame’ dan ‘outs’

merupakan fungsi yang bertujuan untuk mendapatkan bounding box dengan

confidence score paling tinggi.

43
Gambar 3.22 Source Code Fungsi postprocess

Di akhir bagian fungsi ‘postprocess’, terdapat pemanggilan fungsi

‘drawPred’ dengan parameter variabel ‘classIds’, ‘confidences’, ‘left’, ‘top’, ‘left +

width’, dan ‘top + height’, serta pemanggilan fungsi ‘createImage’ dengan

parameter variabel ‘frame’, ‘left’, ‘top’, ‘width’, dan ‘height’.

Gambar 3.23 Source Code Fungsi drawPred

44
Fungsi ‘drawPred’ ini bertujuan untuk membuat gambar garis pada prediksi

bounding box agar diketahui lokasi gambar plat yang terdeteksi.

Gambar 3.24 Source Code Fungsi createImage

Fungsi ‘createImage’ ini bertujuan untuk memotong gambar dari prediksi

bounding box untuk dijadikan input pada proses segmentasi karakter.

3.10.5 Source Code Segmentasi dan Prediksi Karakter

Pada bagian ini dijelaskan source code untuk proses segmentasi karakter

sebelum dijalankan proses prediksi karakter.

Pada Gambar 3.18, variabel ‘hasFrame’ bernilai false karena proses

pendeteksian pada gambar sudah selesai dan tidak ada lagi gambar atau frame yang

terbaca (dikarenakan gambar input merupakan file berformat .jpg) sehingga

selanjutnya akan dilakukan proses segmentasi dan prediksi karakter pada bagian ‘if

not hasFrame:’.

45
Gambar 3.25 Source Code Proses Segmentasi dan Prediksi Karakter

Hal pertama yang dijalankan pada bagian ini merupakan pembacaan gambar

hasil pendeteksian yang disimpan ke dalam variabel ‘outputFile’ dengan

menjalankan perintah fungsi ‘cv.imread(outputFile)’ yang kemudian disimpan ke

dalam variabel ‘img’. Proses segmentasi karakter dijalankan lewat perintah fungsi

‘histogram_of_pixel_projection(img)’ yang hasil atau nilai balik dari fungsi ini

akan disimpan ke dalam variabel ‘digits’.

Variabel ‘digits’ merupakan variabel bertipe data list yang berisi

sekumpulan titik koordinat berbentuk persegi panjang pada gambar plat nomor

yang berhasil tersegmentasi. Setelah itu, titik-titik koordinat pada variabel ‘digits’

satu per satu dibuat menjadi persegi berukuran 20x20 dengan perintah ‘square_digit

= square(digit)’ dan ‘cv.resize(square_digit, (20,20),

interpolation=cv.INTER_AREA). Setelah di-resize, kemudian nilai tersebut diubah

menjadi vektor dengan perintah ‘one_vector_digit =

np.array(resized_digit).ravel()’ untuk kemudian nilai vektor tersebut dijadikan data

46
input untuk prediksi karakter dengan model SVM yang tersimpan pada file

“svm.pkl”.

Hasil dari proses prediksi ini merupakan sekumpulan label yang disimpan

ke dalam variabel list ‘prediction’.

47

Anda mungkin juga menyukai