BAB IV : HASIL DAN PEMBAHASAN
4.3. Hasil Implementasi Perangkat Lunak
Pada pembuatan program untuk menjalankan prototype ini sudah sesuai dengan perancangan yang telah dilakukan sebelumnya, tetapi terdapat beberapa perubahan pada perangkat lunak. Perubahan pada perangkat lunak terjadi pada sub-routine segmentasi plat, yaitu penambahan geometric correction.
4.3.1. Modul yang Digunakan
Pada implementasi perangkat lunak digunakan beberapa modul yang telah ada yang dapat langsung digunakan dengan python, dan terdapat modul yang dibuat sendiri untuk mempermudah pembuatan program, modul modul yang digunakan penulis dapat dilihat pada tabel 4.8.
Tabel 4.8. Modul Python dan Keterangan
No. Modul Keterangan
1. Cv2 Merupakan modul OpenCV untuk memproses citra.
2. Numpy Merupakan modul numerik untuk melakukan proses perhitungan array yang tidak bisa dilakukan python.
3. Rpi.GPIO Merupakan modul untuk mengaktifkan GPIO pin pada Raspberry Pi.
4. Time Merupakan modul untuk mengetahui waktu dan menggunakan delay.
5. Sklearn Merupakan modul untuk mengakses modul PCA pada python untuk melakukan kompresi.
6. Threading Merupakan modul untuk menjalankan progress secara paralel (progress GUI dan Pengenalan).
7. Math Merupakan modul yang digunakan untuk melakukan perhitungan matematika yang rumit seperti (SQRT).
8. Imutils Merupakan modul yang mendukung kinerja OpenCV.
9. PySimpleGUI Merupakan modul yang digunakan untuk membuat GUI.
10. Csv Merupakan modul yang digunakan untuk mengakses file dengan format .csv untuk pembuatan database.
11. Senmod Merupakan modul yang dibuat untuk menjalankan sensor ultrasonik.
Tabel 4.9. Lanjutan Modul Python dan Keterangan
No Modul Keterangan
12. servo Merupakan modul yang dibuat untuk menggerakkan servo pada gerbang.
13. Dataku Merupakan modul untuk membuat database.
14. Distance Merupakan modul yang dibuat untuk menghitung jarak Euclidean.
4.3.2. Implementasi Pembuatan Database Huruf dan Angka
Pembuatan database dimulai dengan pengambilan citra dari plat nomor dengan secara berulang sebanyak 5 kali dengan berbagai posisi agar sistem dapat membaca plat nomor dengan posisi yang beragam. Citra yang telah diambil sebelumnya akan disusun dalam urutan dari 0 - 9 dan A – Z. Setelah citra telah urut citra akan dibaca dengan menggunakan python, setelah semua citra telah terbaca citra akan diubah bentuk kedalam citra beukuran 12 x 18 pixel, setelah itu citra akan melewati proses preprocessing dan normalisasi. Proses normalisasi dilakukan agar nilai yang dihitung dapat lebih kecil dengan nilai maksimum adalah 1, normalisasi diperlukan karena citra yang digunakan lumayan banyak sehingga tanpa normalisasi program akan bekerja lebih lambat. Setelah normalisasi data citra yang berukuran 12 x 18 pixel akan diubah menjadi dalam bentuk vektor yaitu 1 x 216 pixel. Setelah semua citra telah diubah dalam bentuk vektor, semua citra akan disatukan dalam sebuah array, array ini nantinya akan berbentuk 180 x 216. Setelah array terbentuk maka akan dilakukan kompresi dengan menggunakan PCA dengan mengambil 95% informasi yang ada dan mengubah bentuk array menjadi 180 x 48. Hasil kompresi ini yang akan menjadi fitur dari citra 0 – 9 dan A – Z. Hasil kompresi akan disimpan dan dapat dipanggil sewaktu-waktu dalam pembuatan program. Program detail dari pembuatan database dapat dilihat pada L-35.
4.3.3. Implementasi Sub-routine Sensor Ultrasonik
Program sensor ultrasonik dibuat dalam bentuk modul sehingga mudah untuk dieksekusi dalam program utama. Program menggunakan modul waktu dan modul GPIO, modul waktu berfungsi untuk menghitung waktu tempuh suara ultrasonik, sedangkan GPIO berfungsi untuk mengirim sinyal ultrasonik. Pertama program akan mendefenisi pin yang digunakan, kemudian akan mengambil waktu ketika sensor mengirim sinyal ultrasonik. Waktu ketika sensor menerima kembali sintak juga akan disimpan. Untuk mendapatkan
jaraknya hanya cukup dengan perhitungan sederhana jarak = kecepatan * waktu. Dengan kecepatan adalah kecepatan suara yaitu 34320 dan waktu adalah sinyal antara sinyal kirim dan sinyal terima. Hasil jarak ini merupakan jarak tempuh menuju objek dan kembalinya sinyal sehingga hasil jarak perlu dibagi 2. Program pada python secara lengkap dapat dilihat pada L-33 hingga L-34 bagian “Listing program senmod (sensor ultrasonik modul)”.
4.3.4. Implementasi Sub-routine Akuisisi Citra
Pada implementasi akuisisi citra hal pertama yang dilakukan yaitu membuat sub-routine ini terdapat dalam sebuah pengambilan keputusan terlebih dahulu, yaitu pada modul sensor ultrasonik yang sebelumnya. Setelah keputusan terpenuhi maka kamera akan mengakuisisi citra setelah melakukan fokus terlebih dahulu. Program pada python secara lengkap dapat dilihat pada L-20 untuk gerbang masuk dan L-26.
4.3.5. Perubahan Sub-routine Segmentasi Plat
A. Hasil Sebelum Ditambah Geometric Correction (GC)
Sebelum penambahan GC hasil segmentasi plat kerap kali salah melakukan cropping di mana border pada plat nomor sering ikut dalam hasil cropping. Border yang ikut terpotong ini dapat menghasilkan satu buah atau dua buah huruf dan angka sehingga dapat merusak hasil pengenalan plat. Selain itu dikarenakan plat nomor dideteksi dari bagian kanan mobil (pada gerbang) sehingga plat yang terdeteksi akan sedikit miring. Contoh pengenalan plat nomor sebelum melakukan GC dengan cara perspective warp dapat dilihat pada gambar 4.9. dan 4.10. Teori tentang geometric correction metode perspecrive warp dapat dilihat pada L-1.
B. Hasil Setelah Ditambah Geometric Correction (GC)
Gambar 4.10. Contoh Hasil Pengenalan Setelah GC
Dikarenakan masih kurang maksimalnya hasil pengenalan pada percobaan real time maka ditambahkan GC dengan metode perspective warp. Metode ini dapat membuat hasil pengenalan plat nomor yang mulanya miring dapat menjadi lurus kembali. Caranya adalah dengan cara memuat hasil pengenalan plat yang awalnya berbentuk seperti trapesium, dimuat dalam sebuah persegi panjang yang utuh. Contoh hasil pengenalan setelah melakukan GC dapat dilihat pada gambar 4.9. Program pada python secara lengkap dapat dilihat pada L-22.
4.3.6. Implementasi Sub-routine Segementasi Huruf dan Angka
Setelah mendapatkan plat nomor mobil, citra akan difilter dengan medianBlur kemudian akan dicari jumlah kontur pada citra plat. Kemudian citra akan diputar sebesar 90o
CCW, ini dilakukan karena kontur pada python dihitung dari bagian bawah hingga keatas sehingga apabila citra diputar 90o CCW maka citra huruf dan angka akan otomatis tersortir. Kemudian akan dilakukan cropping terhadap setiap kontur yang telah terdeteksi dengan catatan luas area harus lebih dari 100, agar derau yang cukup besar yang tidak terfilter tidak terdeteksi sebagai citra huruf dan angka. Program lengkap pada python dapat dilihat pada L-22 dan L-23 pada bagian “#Character segmentation”.
4.3.7. Perubahan Sub-routine Pengolahan Citra
Pada pembuatan prototype ini terdapat perubahan yang dilakukan terhadap pengolahan citra untuk huruf dan angka. Perubahan ini akan dijabarkan sebagai berikut:
4.3.7.1. Ekstraski Ciri Component PCA
Pada percobaan pertama metode PCA digunakan untuk mencari component dari PCAnya atau biasa disebut dengan PC. Pada percobaan ini PC yang digunakan adalah sebanyak 2 component hingga percobaan dengan 7 component. Tingkat pengenalan dengan menggunakan PC dari PC2 hingga PC7 adalah sebesar 0% dengan tidak ada satupun huruf dan angka yang berhasil dikenali. Data tabel hasil percobaan dapat dilihat pada tabel 4.10.
Tabel 4.10. Hasil Pengenalan dengan Component 2 hingga 7 N o. Plat Hasil Pengenalan PC2 PC3 PC4 PC5 PC6 PC7 1. AB5489 WZ X11XFI L2 X11XF8 L2 7I2XBR AO I02YPR4 O I02XPR4 0 I02YPRA 0 2. JK2090Y H ANRIID XN ANRIID XN AN0S00 XK AK0S00X K AK0S00X K AK0S00 XK 3. DM7631 QOP NLX112 F15 NLX112 F15 NAXRR8 IRI NKXRR8 PRI NKXRR8 PRI NKXRS8 PRI 4. XT7836V A NFEIFF L2 NFEIFF L2 NPXIIIN 8 KPXPIIM 8 KPXPPI M8 KP7PIIM 8 5. TS6357R U FFIF121 K FFIF121 K XRDP82I K XRRP8CI K XIRP8CI K XIRP8CI K 6. I5629NL BF111A K BF111A K PX0IRA U PX00RA K PX00RA U PX00RA K 7. CE7635G F NN2FD1 F1 NN2FD1 F1 NK2IPCP C XK8RPC PC XK8RPC P2 XK8RPC P2
Hasil pengenalan A pada PC2 dikenali sebagai X. Huruf dikenali sebagai X dikarenakan jarak terdekat pada pengenalan ini adalah huruf X sebanyak 4 buah dengan masing-masing jaraknya adalah 0.3134637641943131, 0.3933020032521816, 0.4347844136581528, dan 0.48905322821225755. Sedangkan data lengkapnya dapat dilihar pada L-3. Pada data yang dilampirkan di L-10 huruf sebenarnya yang harusnya dikenali sebagai A malah memiliki huruf A pada urutan 17 dan 20 pada jarak terdekatnya. Sama halnya dengan pengenalan huruf I pada PC3 dikenali sebagai huruf B. Huruf dikenali karena jarak terdekat dari pengenalan ini adalah huruf B dengan jumlah sebanyak 3 yaitu jarak pertama, kedua, dan kelima dengan masing - masing jaraknya adalah 0.13506223202687118, 0.1441416542500385, dan 0.3010879601187551. Huruf yang
seharusnya dikenali sebagai I malah terdapat pada urutan 4 terakhir. Dikarenakan hasil yang kurang memuaskan metode PCA yang mulanya digunakan untuk mereduksi data sekarang diubah untuk mengkompresi citra secara langsung.
4.3.7.2. Implementasi Pengolahan Citra dengan Kompresi Citra
Setelah mendapatkan huruf dan angka dari plat nomor, citra huruf dan angka yang semulanya 2D akan diubah menjadi vektor yang memiliki 1D. Ukuran citra yang akan diubah adalah citra berukuran 12 x 18 pixel diubah menjadi citra berukuran 1 x 216 pixel. Citra akan dikompresi dengan menggunakan metode PCA. Kompresi ini mengambil 95% dari citra yang disediakan oleh citra sehingga hanya 5% informasi dari citra yang hilang, citra yang sudah diubah sebelumnya menjadi 1 x 216 pixel akan dikompresi menjadi ukuran 1 x 48 pixel. Data hasil kompresi ini yang akan digunakan untuk mengklasifikasi data. Program untuk pengolahan citra dapat dilihat pada L-23 dan L-24.
4.3.8. Implementasi Sub-routine Klasifikasi Data
Klasifikasi data dimulai dengan memberikan kelas pada setiap data yaitu masing masing 5 huruf atau angka yang secara berurutan yaitu 0 hingga 9 kemudia A sampai Z. Ini dilakukan karenakan database yang dimiliki yaitu masing-masing 5 dari setiap huruf dan angka. Langkah selanjutnya adalah menggunakan rumus perhitungan jarak Euclidean untuk menghitung jarak antara database dengan data yang diterima dari segmentasi huruf dan angka. Program jarak Euclidean dibuat dalam bentuk modul agar lebih mudah digunakan. Program jarak ini dapat dilihat pada L-36. Setelah jarak selesai dihitung maka akan dilakukan sorting huruf atau angka mana yang memiliki jarak terkecil dengan database. Kemudian hanya akan diambil 5 buah data terkecil yang menunjukkan tetangga terdekat dari citra huruf dan angka. 5 buah data tersebut kemudian diproses untuk mencari huruf atau angka apa yang paling banyak muncul. Proses ini berulang untuk semua citra huruf dan angka yang dikenali sebelumnya. Program python secara lengkap dapat dilihat pada L-24 dan L-25.
4.3.9. Implementasi Sub-routine Pengenalan Plat Nomor Mobil
Pengenalan plat nomor dilakukan pada gerbang keluar dimana program akan membandingkan hasil pengenalan plat nomor dengan plat nomor pada database. Selain pengenalan plat nomor, sub-routine ini juga menghitung waktu keluar, harga, dan durasi dari mobil pertama kali masuk hingga mobil terdeteksi pada gerbang keluar. Program python secara keseluruhan dapat dilihat pada L-25.
4.3.10. Implementasi Sub-routine Motor Servo
Pada motor servo terdapat dua kondisi yaitu gerbang masuk dan gerbang keluar. Program pada motor servo dibuat dalam bentuk modul sehingga lebih mudah untuk digunakan. Program modul pada python ini dapat dilihat pada L-37. Pada gerbang masuk motor servo akan bekerja sesaat setelah program mengenali plat nomor ini dapat dilihat pada L-26 bagian “servo.SetAngleIn(80)”. Pada gerbang keluar motor servo akan bekerja apabila tombol bayar telah ditekan, ini dapat dilihat pada L-34.