Cómo detectar y reconocer matrículas de automóviles usando Python

La tecnología de detección y reconocimiento de matrículas tiene muchas aplicaciones. Se utiliza en sistemas viales, parking sin ticket, control de acceso de vehículos a residencias, etc. puede ser usado. Esta tecnología combina la visión artificial y la inteligencia artificial.


Utilizará Python para crear un programa de detección y reconocimiento de matrículas. El programa tomará una imagen de entrada, la procesará para detectar y reconocer la matrícula y finalmente mostrará los símbolos de la matrícula como salida.


Configuración del entorno de Python

Debe estar familiarizado con los conceptos básicos de Python para continuar cómodamente con este tutorial. Comienza con la configuración del entorno de la aplicación.

Antes de comenzar a codificar, debe instalar algunas bibliotecas en su entorno. Abra cualquier IDE de Python y cree un archivo de Python. Ejecute cada comando en la terminal para instalar la biblioteca adecuada. Debes tener uno anterior instalando Python PIP en su computadora.

Qué es Tesseract OCR y cómo instalarlo en tu computadora

Tesseract es un motor que puede hacer OCR reconocer los símbolos de la lengua. Antes de que pueda usar la biblioteca Pytesseract, debe instalarla en su computadora. Para hacerlo:

  1. Abra cualquier navegador basado en Chrome
  2. descargar Teseracto OCR para construir
  3. Ejecute el instalador e instálelo como cualquier otro software

Después de preparar el entorno e instalar tesseract OCR, está listo para codificar la aplicación.

1. Importación de bibliotecas

Comience por importar las bibliotecas que instaló en el entorno. La importación de bibliotecas le permite llamar y usar sus funciones en su proyecto.

 import cv2
import imutils
import pytesseract

debes importar OpenCV-Python como una biblioteca cv2. Importe las otras bibliotecas con los mismos nombres que usó para instalarlas.

2. Recibo de entrada

Luego dirija pytesseract a donde está instalado el motor Tesseract. tomar una imagen de coche como entrada usando cv2.imread función. Reemplace el nombre de la imagen con el nombre de la imagen que está utilizando. Para facilitar las cosas, guarde la imagen en la misma carpeta que su proyecto.

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

Puede reemplazar la imagen de entrada a continuación con la imagen que desea usar.

3. Preprocesamiento de entrada

Cambie el ancho de la imagen a 500 píxeles. Luego convierte la imagen a escala de grises. función de detección de borde astuto solo funciona con imágenes en escala de grises. Por último, haz la llamada. filtro de dos vías Función de reducción de ruido de imagen.

 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. Detección de matrícula en la entrada

La detección de matrículas es el proceso de identificar la parte de un vehículo que tiene símbolos de matrículas.

Implementación de detección de bordes

empezar llamando cv2.Canny una función que detecta automáticamente los bordes de una imagen preprocesada.

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

Es a partir de estos bordes que encontraremos los contornos.

Encontrar contornos

por favor llama cv2.findContours función y copia de transmisión imagen exterior. Esta función detectará contornos. dibujar los contornos detectados en la imagen original usando cv2.dibujarContornos función. Finalmente, extraiga la imagen original con todos los contornos visibles dibujados.

 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)

El programa dibuja todos los contornos que encuentra en la imagen del coche de forma diferente.

Un automóvil con todos los contornos visibles marcados en verde.

Una vez que encuentre los perfiles, debe ordenarlos para identificar a los mejores candidatos.

Clasificación de contornos

Ordene los contornos según el área mínima 30. Ignore lo siguiente, ya que es poco probable que sean contornos de matrículas. Haga una copia de la imagen original y tome una foto 30 mejores Contornos en la imagen. Por último, muestra la imagen.

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


screenCnt = None
img2 = original_image.copy()


cv2.drawContours(img2, contours, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)

Ahora hay menos contornos que al principio. Los únicos contornos dibujados son contornos aproximados que incluyen el número de matrícula.

Los primeros treinta autos contorneados visibles

Finalmente, debe rotar los contornos ordenados y determinar cuál es la placa.

Bucle sobre los 30 contornos superiores

Cree un bucle for para recorrer los contornos. Encuentre un contorno con cuatro esquinas y determine su perímetro y coordenadas. Guarde la imagen del esquema que contiene el número. Finalmente, dibuje y muestre el contorno de la matrícula en la imagen original.

 count = 0
idx = 7

for c in contours:
    
    contour_perimeter = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.018 * contour_perimeter, True)

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

        
        x, y, w, h = cv2.boundingRect(c)
        new_img = original_image [ y: y + h, x: x + w]

        
        cv2.imwrite('./'+str(idx)+'.png',new_img)
        idx += 1
        break


cv2.drawContours(original_image , [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("detected license plate", original_image )

Después del bucle, su programa ha identificado el contorno que contiene la matrícula. Solo dibuja el contorno de la matrícula.

Vehículo que muestra la matrícula detectada

5. Reconocimiento del número de licencia revelado

Reconocer un número significa leer los símbolos en la imagen recortada del número. Cargue y muestre la imagen de la matrícula que guardó anteriormente. Luego llame pytesseract.image_to_string función y pasar la imagen de la matrícula recortada. Esta función convierte los caracteres de la imagen en una cadena.

 
cropped_License_Plate = './7.png'
cv2.imshow("cropped license plate", cv2.imread(cropped_License_Plate))


text = pytesseract.image_to_string(cropped_License_Plate, lang='eng')

La matrícula cortada se muestra a continuación. Los caracteres en él serán la salida que imprimirá en la pantalla más tarde.

Imagen de matrícula recortada

Una vez que haya detectado y reconocido el número, estará listo para mostrar la salida.

6. Salida de pantalla

Este es el ultimo paso. Imprime el texto extraído en la pantalla. Este texto contiene caracteres de matrícula.

 print("License plate is:", text)
cv2.waitKey(0)
cv2.destroyAllWindows()

El resultado esperado del programa debe ser el siguiente:

Tres imágenes de un automóvil y un recorte de una matrícula que muestra el proceso de detección de matrículas

El texto del número se puede ver en el terminal.

Mejora tus habilidades con Python

Un proyecto interesante para trabajar es la detección y reconocimiento de matrículas en Python. Es difícil, por lo que debería ayudarlo a aprender más sobre Python.

Cuando se trata de programación, la experiencia es clave para dominar un lenguaje. Necesitas trabajar en proyectos interesantes para aplicar tus habilidades.

Leave a Reply

Your email address will not be published. Required fields are marked *