Thursday 25 June 2020

Mendeteksi Plat Nomor Kendaraan menggunakan OpenCv dan Python : Bilateral Filter dan Edges Detection

Deteksi Plat Nomor Kendaraan dengan OpenCv dan Python menggunakan pendekatan Bilateral Filter dan Edges Detection







Pelat nomor adalah salah satu jenis identifikasi kendaraan bermotor. Pelat nomor juga disebut pelat registrasi kendaraan, atau di Amerika Serikat dikenal sebagai pelat izin (license plate). Bentuknya berupa potongan pelat logam atau plastik yang dipasang pada kendaraan bermotor sebagai identifikasi resmi. Biasanya pelat nomor jumlahnya sepasang, untuk dipasang di depan dan belakang kendaraan. Namun ada jurisdiksi tertentu atau jenis kendaraan tertentu yang hanya membutuhkan satu pelat nomor, biasanya untuk dipasang di bagian belakang.

Pelat nomor memiliki nomor seri yakni susunan huruf dan angka yang dikhususkan bagi kendaraan tersebut. Nomor ini di Indonesia disebut nomor polisi, dan biasa dipadukan dengan informasi lain mengenai kendaraan bersangkutan, seperti warna, merk, model, tahun pembuatan, nomor identifikasi kendaraan atau VIN dan tentu saja nama dan alamat pemilikinya. Semua data ini juga tertera dalam Surat Tanda Nomor Kendaraan Bermotor atau STNK yang merupakan surat bukti bahwa nomor polisi itu memang ditetapkan bagi kendaraan tersebut.
Sumber: Wikipedia

Berdasarkan penjelasan diatas sobat dapat memahami fungsi dari adanya plat kendaraan bukan? Plat yang dimiliki merupakan plat nomer yang mana fungsi dari nomor tersebut untuk mengidentifikasi informasi dari pemilik kendaraan yang bersangkutan, sehingga plat nomer yang ada sifatnya berbeda beda atau tidak akan ada yang sama. Dalam hal ini plat dapat dimanfaatkan untuk diterapkan dalam berbagai keperluan contoh umumnya plat dapat digunakan sebagai identifikasi kepemilikan kendaraan saat parkir.

Berdasarkan hal tersebut, Dettline akan membuat pembahasan mengenai Deteksi Plat Nomor Kendaraan menggunakan Python dan OpenCV. Berikut penjelasannya


Tentukan Gambar Yang Akan Digunakan

Pada tahap awal sobat perlu menyediakan sebuah gambar yang mana pada gambar tersebut terdapat plat nomer kendaraan, contoh yang Dettline gunakan adalah gambar berikut:
Gambar bahan untuk tutorial deteksi plat kendaraan


Import Semua Library Yang Diperlukan

Kode yang diperlukan adalah sebagai berikut

import numpy as np
import cv2
import  imutils


Buat Variabel Foto Lalu Coba Untuk Tampilkan

Dalam membuat variabel untuk foto ini dapat dibuat dengan nama bebas, pada tutorial ini Dettline memberikan nama untuk variabel tersebut dengan nama gambar. Penulisan seperti dibawah ini

gambar = cv2.imread('E:\ERESHA\Semester 2\mobil2.jpg')
cv2.imshow("Gambar Asli", gambar)

gambar adalah nama variabel yang dibuat untuk menampung gambar yang akan dideteksi plat nomernya. Sedangkan kode imread berisi alamat gambar yang akan kita gunakan, cocokan alamat tersebut dengan gambar yang sobat Dettline sudah sediakan.
Kode imshow akan menampilkan isi dari variabel gambar dengan memberi nama judul tampilan Gambar Asli.



Convert Foto Dalam Mode Grayscale

Ini merupakan salah satu syarat untuk mendapatkan objek plat nomor kendaraan, tahap ini yang perlu kalian tulis adalah 

gray = cv2.cvtColor(gambar, cv2.COLOR_BGR2GRAY)
cv2.imshow("1 - Gambar Grayscale", gray)

gray adalah variabel baru yang dibuat untuk menerapkan si gambar dengan efek BGR agar menjadi gambar Grayscale. Lalu tampilkan kembali hasilnya dengan imshow untuk melihat bahwa gambar telah berubah
Gambar di tahap ini saat berhasil menjadi Grayscale



Mereduksi Noise Pada Gambar Grayscale Yang Telah Dibuat Sebelumnya

Pada tahap ini, gambar Grayscale sebelumnya akan dibersihkan noise-nya untuk hasil yang lebih baik, berikut kodenya

gray = cv2.bilateralFilter(gray, 11, 17, 17)
cv2.imshow("2 - Gambar dengan filter Bilateral", gray)


Settingan yang cocok untuk mengurangi noise pada gambar grayscale adalah 11, 17, 17 menggunakan kode bilateralFilter. Selanjutnya silakan sobat tampilkan dengan imshow kembali
Bila diperhatikan baik baik terdapat perbedaan pada gambar sebelumnya dimana gambar yang sekarang lebih samar noise-nya atau terkesan lebih lembut



Membuat Foto Menjadi Canny Edges

Sebelum masuk ke tahap akhir, foto harus diubah untuk mendapat efek Canny Edges, dengan begitu plat nomer yang ada pada kendaraan semakin mudah untuk dideteksi, kodenya sebagai berikut

edged = cv2.Canny(gray, 255, 255)
cv2.imshow("4 - Membuat gambar Canny Edges", edged)

Hasilnya akan seperti foto di bawah ini
Gambar yang telah diberi efek Canny
Tentunya gambar itu bisa didapat bila sudah menerapkan efek gray


Final Untuk Mendapat Hasil Akhir Plat Nomor Kendaraan

Setelah sobat Dettline berhasil melakukan itu semua, sobat dapat menjalankan kode terakhir untuk mendapatkan hasil akhir yaitu deteksi plat nomor kendaraan, kodenya sebagai berikut

# Find contours based on Edges
(cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnts=sorted(cnts, key = cv2.contourArea, reverse = True)[:30] #sort contours based on their area keeping minimum required area as '30' (anything smaller than this will not be considered)
NumberPlateCnt = None #we currently have no Number plate contour

# loop over our contours to find the best possible approximate contour of number plate
count = 0
for c in cnts:
        peri = cv2.arcLength(c, True)
        approx = cv2.approxPolyDP(c, 0.02 * peri, True)
        if len(approx) == 4# Select the contour with 4 corners
            NumberPlateCnt = approx #This is our approx Number Plate Contour
            break


# Drawing the selected contour on the original image
cv2.drawContours(gambar, [NumberPlateCnt], -1, (255,255,0), 3)
cv2.imshow("Hasil Akhir! Deteksi Plat Kendaraan", gambar)

cv2.waitKey(0) #Wait for user input before closing the images displayed

Hasil Akhir Akan Seperti Berikut!

Hasil akhir deteksi plat nomer kendaraan

Semoga artikel ini dapat membantu sobat Dettline semuanya, terimaksih.
Load disqus comments

0 komentar