Come rilevare e riconoscere le targhe automobilistiche utilizzando Python

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ì:

  1. Apri qualsiasi browser basato su Chrome
  2. Scarica l’ installazione di Tesseract OCR
  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.

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.

Un'auto blu con targa

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.

Un'auto con tutti i contorni visibili contrassegnati in verde

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.

Un'auto con i primi trenta contorni visibili disegnati

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.

Un'auto che mostra la targa rilevata

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.

Un'immagine ritagliata della targa

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:

Tre immagini di auto e una targa tagliata che mostrano il processo di rilevamento di una targa

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

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *