I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione. Per saperne di più.

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 un precedente

instagram viewer
installazione di Python PIP sul tuo computer.

  • OpenCV-Python: Utilizzerai questa libreria per preelaborare l'immagine di input e visualizzare varie immagini di output.
    pippo installare OpenCV-Python
  • imutils: Utilizzerai questa libreria per ritagliare l'immagine di input originale alla larghezza desiderata.
    pippo installare imutils
  • pytesseract: Utilizzerai questa libreria per estrarre i caratteri della targa e convertirli in stringhe.
    pippo installare pytesseract
    La libreria pytesseract si basa su Tesseratto OCR motore per il riconoscimento dei caratteri.

Che cos'è Tesseract OCR e come installarlo sul tuo computer

Tesseract OCR è un motore che può riconoscere i caratteri di una lingua. Dovresti installarlo sul tuo computer prima di usare la libreria pytesseract. Fare così:

  1. Apri qualsiasi browser basato su Chrome
  2. Scarica il Tesseratto OCR impostare
  3. 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.

importare cv2
importare imutils
importare pytesseract

Devi importare il file OpenCV-Python biblioteca 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 il cv2.imread funzione. 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:\\Programmi\\Tesseract-OCR\\tesseract.exe'
original_image = cv2.imread('immagine3.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 convertire l'immagine in scala di grigi come il file astuta funzione di rilevamento dei bordi funziona solo con immagini in scala di grigi. Infine chiama il bilateralFilter funzione 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 il cv2.Canny funzione 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 il cv2.findContours funzione e passare una copia del file immagine bordata. Questa funzione rileverà i contorni. Disegna intorno ai contorni rilevati sull'immagine originale usando il cv2.drawContours funzione. Infine, emetti l'immagine originale con tutti i contorni visibili disegnati.

contorni, nuovo = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = immagine_originale.copia()
cv2.drawContours(immagine1, contorni, -1, (0, 255, 0), 3)
cv2.imshow("img1", immagine1)

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. Fai una copia dell'immagine originale e disegnala primi 30 contorni sull'immagine. Infine, visualizza l'immagine.

contours = sorted (contours, key = cv2.contourArea, reverse = VERO)[:30]

# memorizza il contorno della targa
screenCnt = Nessuno
img2 = immagine_originale.copia()

# disegna i primi 30 contorni
cv2.drawContours(immagine2, contorni, -1, (0, 255, 0), 3)
cv2.imshow("img2", immagine2)

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.

contare = 0
idx = 7

per c nei contorni:
# approssimare il contorno della targa
contour_perimeter = cv2.arcLength (c, VERO)
approx = cv2.circaPolyDP(c, 0.018 * contorno_perimetro, VERO)

# Cerca contorni con 4 angoli
Selen(circa)== 4:
screenCnt = ca

# trova le coordinate del contorno della targa
x, y, w, h = cv2.boundingRect (c)
new_img = original_image [ y: y + h, x: x + w]

# memorizza la nuova immagine
cv2.imwrite('./'+str (idx)+'.png',new_img)
idx += 1
rottura

# disegna il contorno della targa sull'immagine originale
cv2.drawContours(immagine originale, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("targa rilevata", immagine originale )

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 il pytesseract.image_to_string funzione e passare l'immagine ritagliata della targa. Questa funzione converte i caratteri nell'immagine in una stringa.

# nome file dell'immagine della targa ritagliata
cropped_License_Plate = './7.png'
cv2.imshow("ritagliatolicenzapiatto", cv2.imread(cropped_License_Plate))

# converte i caratteri della targa in stringa
text = pytesseract.image_to_string (cropped_License_Plate, lang='ita')

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.

stampa("La targa è:", testo)
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.