Come rilevare e riconoscere le targhe automobilistiche utilizzando Python
La tecnologia di rilevamento e riconoscimento delle targhe ha molte applicazioni. Può essere utilizzato nei sistemi stradali, nei parcheggi senza biglietto, nelle residenze per il controllo degli accessi dei veicoli e altro ancora. Questa tecnologia combina visione artificiale e intelligenza artificiale.
Utilizzerai Python per creare un programma di rilevamento e riconoscimento delle targhe. Il programma prenderà l’immagine di input, la elaborerà per rilevare e riconoscere la targa e infine visualizzerà i caratteri della targa come output.
Configurazione dell’ambiente Python
Per seguire comodamente questo tutorial, devi avere familiarità con le basi di Python. Questo inizia con la configurazione dell’ambiente del programma.
Prima di iniziare a programmare, devi installare alcune librerie nel tuo ambiente. Apri qualsiasi IDE Python e crea un file Python. Eseguire ciascun comando sul terminale per installare la rispettiva libreria. Dovresti avere una precedente installazione di Python PIP sul tuo computer.
- OpenCV-Python : utilizzerai questa libreria per pre-elaborare l’immagine di input e visualizzare varie immagini di output.
pip install OpenCV-Python
- imutils : utilizzerai questa libreria per ritagliare l’immagine di input originale alla larghezza desiderata.
pip install imutils
- pytesseract : utilizzerai questa libreria per estrarre i caratteri della targa e convertirli in stringhe.
pip install pytesseract
La libreria pytesseract si basa sul motore Tesseract OCR per il riconoscimento dei caratteri.
Che cos’è Tesseract OCR e come installarlo sul tuo computer
Tesseract OCR è un motore in grado di riconoscere i caratteri di una lingua. Dovresti installarlo sul tuo computer prima di usare la libreria pytesseract. Fare così:
- Apri qualsiasi browser basato su Chrome
- Scarica l’ installazione di Tesseract OCR
- Esegui il setup e installalo come qualsiasi altro programma
Dopo aver preparato l’ambiente e installato tesseract OCR, sei pronto per codificare il programma.
1. Importazione delle librerie
Inizia importando le librerie installate nell’ambiente. L’importazione delle librerie consente di richiamare e utilizzare le loro funzioni nel progetto.
import cv2
import imutils
import pytesseract
Devi importare la libreria OpenCV-Python come cv2 . Importa le altre librerie usando gli stessi nomi che hai usato per installarle.
2. Prendere l’input
Quindi indirizza pytesseract alla posizione in cui è installato il motore Tesseract. Prendi l’immagine dell’auto come input usando la funzione cv2.imread . Sostituisci il nome dell’immagine con il nome dell’immagine che stai utilizzando. Memorizza l’immagine nella stessa cartella del tuo progetto per semplificare le cose.
pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
original_image = cv2.imread('image3.jpeg')
Puoi sostituire la seguente immagine di input con quella che desideri utilizzare.
3. Preelaborazione dell’input
Ridimensiona la larghezza dell’immagine a 500 pixel. Quindi converti l’immagine in scala di grigi poiché la funzione di rilevamento dei bordi canny funziona solo con immagini in scala di grigi. Infine, chiama la funzione bilateralFilter per ridurre il rumore nell’immagine.
original_image = imutils.resize(original_image, width=500)
gray_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
gray_image = cv2.bilateralFilter(gray_image, 11, 17, 17)
4. Rilevamento della targa sull’ingresso
Il rilevamento della targa è il processo per determinare la parte dell’auto che ha i caratteri della targa.
Esecuzione del rilevamento dei bordi
Inizia chiamando la funzione cv2.Canny che rileverà automaticamente i bordi sull’immagine preelaborata.
edged_image = cv2.Canny(gray_image, 30, 200)
È da questi bordi che troveremo i contorni.
Trovare i contorni
Chiama la funzione cv2.findContours e passa una copia dell’immagine con bordi . Questa funzione rileverà i contorni. Disegna intorno ai contorni rilevati sull’immagine originale utilizzando la funzione cv2.drawContours . Infine, emetti l’immagine originale con tutti i contorni visibili disegnati.
contours, new = cv2.findContours(edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = original_image.copy()
cv2.drawContours(img1, contours, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)
Il programma disegna distintamente tutti i contorni che trova sull’immagine dell’auto.
Dopo aver trovato i contorni è necessario ordinarli per identificare i migliori candidati.
Ordinamento dei contorni
Ordina i contorni in base all’area minima 30. Ignora quelli sottostanti poiché è meno probabile che siano il contorno della targa. Crea una copia dell’immagine originale e disegna i primi 30 contorni sull’immagine. Infine, visualizza l’immagine.
contours = sorted(contours, key = cv2.contourArea, reverse = True)[:30]
# stores the license plate contour
screenCnt = None
img2 = original_image.copy()
# draws top 30 contours
cv2.drawContours(img2, contours, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)
Ora ci sono meno contorni di quanti ce ne fossero all’inizio. Gli unici contorni disegnati sono quelli approssimati per contenere la targa.
Infine, è necessario scorrere i contorni ordinati e determinare quale sia la targa.
Looping sui primi 30 contorni
Crea un ciclo for per scorrere i contorni. Cerca il contorno con quattro angoli e determinane il perimetro e le coordinate. Memorizza l’immagine del contorno contenente la targa. Infine, disegna il contorno della targa sull’immagine originale e visualizzalo.
count = 0
idx = 7
for c in contours:
# approximate the license plate contour
contour_perimeter = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.018 * contour_perimeter, True)
# Look for contours with 4 corners
if len(approx) == 4:
screenCnt = approx
# find the coordinates of the license plate contour
x, y, w, h = cv2.boundingRect(c)
new_img = original_image [ y: y + h, x: x + w]
# stores the new image
cv2.imwrite('./'+str(idx)+'.png',new_img)
idx += 1
break
# draws the license plate contour on original image
cv2.drawContours(original_image, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("detected license plate", original_image)
Dopo il looping, il tuo programma ha identificato il contorno contenente la targa. Disegna solo sul contorno della targa.
5. Riconoscimento della targa rilevata
Riconoscere la targa significa leggere i caratteri sull’immagine ritagliata della targa. Carica l’immagine della targa precedentemente memorizzata e visualizzala. Quindi, chiama la funzione pytesseract.image_to_string e passa l’immagine della targa ritagliata. Questa funzione converte i caratteri nell’immagine in una stringa.
# filename of the cropped license plate image
cropped_License_Plate = './7.png'
cv2.imshow("cropped license plate", cv2.imread(cropped_License_Plate))
# converts the license plate characters to string
text = pytesseract.image_to_string(cropped_License_Plate, lang='eng')
La targa tagliata è mostrata sotto. I caratteri su di esso saranno l’output che successivamente stamperai sullo schermo.
Dopo aver rilevato e riconosciuto la targa, sei pronto per visualizzare l’output.
6. Visualizzazione dell’output
Questo è il passo finale. Stampi il testo estratto sullo schermo. Questo testo contiene i caratteri della targa.
print("License plate is:", text)
cv2.waitKey(0)
cv2.destroyAllWindows()
L’output previsto del programma dovrebbe essere simile all’immagine qui sotto:
Il testo della targa è visibile sul terminale.
Affina le tue abilità con Python
Rilevare e riconoscere le targhe automobilistiche in Python è un progetto interessante su cui lavorare. È impegnativo, quindi dovrebbe aiutarti a saperne di più su Python.
Quando si tratta di programmazione, la pratica è fondamentale per la padronanza di una lingua. Per mettere in pratica le tue abilità, devi lavorare su progetti interessanti.
Lascia un commento