Pembaca seperti Anda membantu mendukung MUO. Saat Anda melakukan pembelian menggunakan tautan di situs kami, kami dapat memperoleh komisi afiliasi. Baca selengkapnya.

Teknologi deteksi dan pengenalan plat nomor memiliki banyak aplikasi. Ini dapat digunakan dalam sistem jalan raya, tempat parkir tanpa tiket, tempat tinggal kontrol akses kendaraan, dan banyak lagi. Teknologi ini menggabungkan visi komputer dan Kecerdasan Buatan.

Anda akan menggunakan Python untuk membuat program deteksi dan pengenalan plat nomor. Program akan mengambil gambar masukan, mengolahnya untuk mendeteksi dan mengenali pelat nomor, dan terakhir menampilkan karakter pelat nomor sebagai keluaran.

Menyiapkan Lingkungan Python

Untuk mengikuti tutorial ini dengan nyaman, Anda harus terbiasa dengan dasar-dasar Python. Ini dimulai dengan menyiapkan lingkungan program.

Sebelum memulai pengkodean, Anda perlu menginstal beberapa pustaka di lingkungan Anda. Buka IDE Python apa pun dan buat file Python. Jalankan setiap perintah di terminal untuk menginstal pustaka masing-masing. Anda harus memiliki sebelumnya

instagram viewer
pemasangan Python PIP di komputer Anda.

  • OpenCV-Python: Anda akan menggunakan perpustakaan ini untuk melakukan pra-pemrosesan gambar masukan dan menampilkan berbagai gambar keluaran.
    pip Install OpenCV-Python
  • imutil: Anda akan menggunakan perpustakaan ini untuk memotong gambar input asli ke lebar yang diinginkan.
    pip Install imutil
  • pytesseract: Anda akan menggunakan pustaka ini untuk mengekstrak karakter pelat nomor dan mengubahnya menjadi string.
    pip Install pytesseract
    Perpustakaan pytesseract bergantung pada Tesseract OCR mesin untuk pengenalan karakter.

Apa itu Tesseract OCR dan Cara Memasangnya di Komputer Anda

Tesseract OCR adalah mesin yang bisa mengenali karakter bahasa. Anda harus menginstalnya di komputer Anda sebelum menggunakan perpustakaan pytesseract. Untuk melakukannya:

  1. Buka browser berbasis Chrome apa pun
  2. Unduh Tesseract OCR mempersiapkan
  3. Jalankan setup dan instal seperti program lainnya

Setelah menyiapkan lingkungan dan menginstal tesseract OCR, Anda siap membuat kode program.

1. Mengimpor Perpustakaan

Mulailah dengan mengimpor pustaka yang Anda pasang di lingkungan. Mengimpor pustaka memungkinkan Anda memanggil dan menggunakan fungsinya dalam proyek.

impor cv2
impor imutil
impor pytesseract

Anda perlu mengimpor OpenCV-Python perpustakaan sebagai cv2. Impor perpustakaan lain menggunakan nama yang sama dengan yang Anda gunakan untuk menginstalnya.

2. Mengambil Masukan

Lalu arahkan pytesseract ke lokasi dimana mesin Tesseract dipasang. Ambil gambar mobil sebagai masukan menggunakan cv2.imread fungsi. Ganti nama gambar dengan nama gambar yang Anda gunakan. Simpan gambar di folder yang sama dengan proyek Anda agar semuanya mudah.

pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
gambar_asli = cv2.imread('gambar3.jpeg')

Anda dapat mengganti gambar input berikut dengan gambar yang ingin Anda gunakan.

3. Pra-pemrosesan Input

Ubah ukuran lebar gambar menjadi 500 piksel. Kemudian ubah gambar menjadi skala abu-abu sebagai fungsi deteksi tepi cerdik hanya berfungsi dengan gambar skala abu-abu. Akhirnya, panggil bilateralFilter berfungsi untuk mengurangi noise pada gambar.

original_image = imutils.resize (original_image, width=500 )
gray_image = cv2.cvtColor (gambar_asli, cv2.COLOR_BGR2GRAY)
gray_image = cv2.bilateralFilter (gray_image, 11, 17, 17)

4. Mendeteksi Plat Nomor di Input

Mendeteksi plat nomor adalah proses penentuan bagian pada mobil yang memiliki karakter plat nomor tersebut.

Melakukan Deteksi Tepi

Mulailah dengan memanggil cv2.Canny fungsi yang secara otomatis akan mendeteksi tepi pada gambar yang diproses sebelumnya.

edged_image = cv2.Canny (gray_image, 30, 200)

Dari tepi inilah kita akan menemukan kontur.

Menemukan Kontur

Panggil cv2.findContours fungsi dan lulus salinan gambar tepi. Fungsi ini akan mendeteksi kontur. Gambarlah di sekitar kontur yang terdeteksi pada gambar asli menggunakan cv2.drawContours fungsi. Terakhir, tampilkan gambar asli dengan semua kontur yang terlihat digambar.

kontur, baru = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = gambar_asli.salinan()
cv2.drawContours(img1, kontur, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)

Program menggambar semua kontur yang ditemukannya pada gambar mobil secara khas.

Setelah menemukan kontur, Anda perlu mengurutkannya untuk mengidentifikasi kandidat terbaik.

Menyortir Kontur

Urutkan kontur berdasarkan luas minimum 30. Abaikan yang di bawah itu karena kecil kemungkinannya menjadi kontur pelat nomor. Buat salinan dari gambar asli dan gambar 30 teratas kontur pada gambar. Terakhir, tampilkan gambar.

kontur = diurutkan (kontur, kunci = cv2.contourArea, mundur = BENAR)[:30]

# menyimpan kontur plat nomor
layarCnt = Tidak ada
img2 = gambar_asli.salinan()

# menggambar 30 kontur teratas
cv2.drawContours(img2, kontur, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)

Sekarang ada lebih sedikit kontur daripada yang ada di awal. Satu-satunya kontur yang digambar adalah yang diperkirakan berisi pelat nomor.

Akhirnya, Anda perlu mengulang kontur yang diurutkan dan menentukan yang mana pelat nomornya.

Mengulangi 30 Kontur Teratas

Buat for loop untuk mengulang kontur. Cari kontur dengan empat sudut, dan tentukan keliling dan koordinatnya. Simpan gambar kontur yang berisi plat nomor. Terakhir, gambar kontur pelat nomor pada gambar asli dan tampilkan.

hitungan = 0
idx = 7

untuk c dalam kontur:
# perkiraan kontur plat nomor
kontur_perimeter = cv2.arcLength (c, BENAR)
kira-kira = cv2.approxPolyDP(c, 0.018 * kontur_perimeter, BENAR)

# Cari kontur dengan 4 sudut
jikalen(perkiraan)== 4:
screenCnt = kira-kira

# temukan koordinat kontur plat nomor
x, y, w, h = cv2.boundingRect (c)
img_baru = gambar_asli [ y: y + h, x: x + w]

# menyimpan gambar baru
cv2.imwrite('./'+str (idx)+'.png',new_img)
idx += 1
merusak

# menggambar kontur plat nomor pada gambar asli
cv2.drawContours(gambar asli, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("pelat nomor terdeteksi", gambar asli )

Setelah perulangan, program Anda telah mengidentifikasi kontur yang berisi pelat nomor. Gambarnya hanya pada kontur plat nomor.

5. Mengenali Plat Nomor yang Terdeteksi

Mengenali plat nomor berarti membaca karakter pada gambar plat nomor yang dipotong. Muat gambar pelat nomor yang sebelumnya Anda simpan dan tampilkan. Kemudian, hubungi pytesseract.image_to_string berfungsi dan meneruskan gambar plat nomor yang dipotong. Fungsi ini mengubah karakter dalam gambar menjadi string.

# nama file gambar plat nomor yang dipotong
cropped_License_Plate = './7.png'
cv2.imshow("dipotonglisensipiring", cv2.imread(cropped_License_Plate))

# mengubah karakter plat nomor menjadi string
teks = pytesseract.image_to_string (cropped_License_Plate, lang='eng')

Plat nomor yang dipotong ditunjukkan di bawah ini. Karakter di atasnya akan menjadi keluaran yang nantinya akan Anda cetak di layar.

Setelah mendeteksi dan mengenali pelat nomornya, Anda siap menampilkan hasilnya.

6. Menampilkan Keluaran

Ini adalah langkah terakhir. Anda mencetak teks yang diekstrak ke layar. Teks ini berisi karakter pelat nomor.

mencetak("Plat nomor adalah:", teks)
cv2.waitKey(0)
cv2.destroyAllWindows()

Output yang diharapkan dari program harus serupa dengan gambar di bawah ini:

Teks pelat nomor dapat dilihat di terminal.

Asah Keterampilan Python Anda

Mendeteksi dan mengenali pelat nomor mobil dengan Python adalah proyek yang menarik untuk dikerjakan. Ini menantang, jadi ini akan membantu Anda mempelajari lebih lanjut tentang Python.

Dalam hal pemrograman, latihan adalah inti dari penguasaan suatu bahasa. Untuk melatih keterampilan Anda, Anda perlu mengerjakan proyek yang menarik.