Il riconoscimento della targa veicolo è una delle applicazioni più interessanti di computer vision e elaborazione di immagini. In questo tutorial, esploreremo come utilizzare Python insieme a OpenCV per rilevare e riconoscere la targa di un veicolo in un’immagine. Puoi sperimentare e smanettare un po’ con il codice partendo dall’esempio qui sotto o scaricando il codice che trovi sul mio profilo GitHub.

Prerequisiti

Assicuriamoci di avere Python installato sul nostro sistema e installiamo le librerie necessarie eseguendo il seguente comando:


pip install opencv-python imutils pytesseract numpy

Che cosa sono OpenCV e Tesseract?

OpenCV, acronimo di “Open Source Computer Vision Library“, è una libreria open source dedicata alla visione artificiale e all’elaborazione di immagini. È progettata per fornire un set di strumenti ricco e completo per sviluppatori, ricercatori e appassionati che lavorano nell’ambito della visione artificiale.

Tesseract è un motore di riconoscimento ottico dei caratteri (OCR) open source sviluppato originariamente presso Hewlett Packard Labs. Oggi è uno dei progetti gestiti dalla comunità open source e ospitato dalla Software Freedom Conservancy.

Assicuriamoci anche di avere Tesseract installato sul nostro sistema. È possibile scaricarlo da qui.

Codice Sorgente


import cv2
import imutils
import numpy as np
import pytesseract

# Leggi l'immagine da file
img = cv2.imread('Auto/2.jpg', cv2.IMREAD_COLOR)
img = cv2.resize(img, (800, 600))  # Ridimensiona l'immagine

# Converti l'immagine in scala di grigi
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray, 13, 40, 40)  # Riduci il rumore mantenendo i bordi

# Trova i bordi nell'immagine
edged = cv2.Canny(gray, 30, 200)

# Trova i contorni nell'immagine con il metodo RETR_TREE
contours = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours = imutils.grab_contours(contours)
contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10]
screenCnt = None

# Trova il contorno del rettangolo (presumibilmente la targa)
for c in contours:
    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.018 * peri, True)

    if len(approx) == 4:
        screenCnt = approx
        break

# Verifica se è stato trovato un contorno valido
if screenCnt is None:
    detected = 0
    print("Nessun contorno rilevato")
else:
    detected = 1

# Disegna il contorno trovato sull'immagine originale
if detected == 1:
    cv2.drawContours(img, [screenCnt], -1, (0, 0, 255), 3)

# Crea una maschera basata sul contorno trovato
mask = np.zeros(gray.shape, np.uint8)
new_image = cv2.drawContours(mask, [screenCnt], 0, 255, -1)
new_image = cv2.bitwise_and(img, img, mask=mask)

# Estrai la regione della targa dall'immagine originale
(x, y) = np.where(mask == 255)
(topx, topy) = (np.min(x), np.min(y))
(bottomx, bottomy) = (np.max(x), np.max(y))
Cropped = gray[topx:bottomx+1, topy:bottomy+1]

# Esegui l'OCR sulla regione della targa
text = pytesseract.image_to_string(Cropped, config='--psm 11')
print("Riconoscimento della targa di programming_fever\n")
print("Numero di targa rilevato:", text)

# Ridimensiona le immagini per mostrarle
img = cv2.resize(img, (500, 300))
Cropped = cv2.resize(Cropped, (400, 200))

# Mostra le immagini
cv2.imshow('Auto', img)
cv2.imshow('Targa Ritagliata', Cropped)

# Attendi che l'utente prema un tasto e poi chiudi le finestre
cv2.waitKey(0)
cv2.destroyAllWindows()

Spiegazione del Codice

1. Importazione delle Librerie

Iniziamo importando le librerie necessarie per il riconoscimento della targa veicolo, tra cui OpenCV, imutils, NumPy e PyTesseract.

2. Caricamento e Preprocessamento dell’Immagine

Carichiamo un’immagine di un veicolo e la ridimensioniamo per facilitare l’elaborazione. Convertiamo l’immagine in scala di grigi e applichiamo un filtro bilaterale per ridurre il rumore mantenendo i bordi.

3. Ricerca dei Contorni

Utilizzando l’algoritmo di Canny, individuiamo i bordi nell’immagine. Successivamente, troviamo i contorni e selezioniamo i 10 più grandi ordinati per area.

4. Identificazione del Contorno della Targa

Attraverso l’approssimazione di poligoni, cerchiamo un contorno con 4 vertici, presumibilmente rappresentante la targa del veicolo.

5. Riconoscimento della Targa tramite OCR

Se viene trovato un contorno valido, estraiamo la regione della targa e applichiamo l’OCR di Tesseract per riconoscere il testo.

6. Visualizzazione delle Immagini

Visualizziamo l’immagine originale con il contorno della targa evidenziato e la regione ritagliata contenente il testo della targa.


Questo tutorial fornisce una panoramica dettagliata su come implementare il riconoscimento targhe utilizzando Python e OpenCV. Sperimenta con diverse immagini per vedere come il codice si comporta in scenari diversi.

Taggato in:

, , , ,