La tecnología de detección y reconocimiento de matrículas tiene muchas aplicaciones. Se puede usar en sistemas viales, estacionamientos sin boleto, residencias con control de acceso de vehículos y más. 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á la imagen de entrada, la procesará para detectar y reconocer la matrícula y finalmente mostrará los caracteres de la matrícula como salida.
Configuración del entorno de Python
Para seguir cómodamente este tutorial, debe estar familiarizado con los conceptos básicos de Python. Esto comienza con la configuración del entorno del programa.
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 respectiva. Debes tener una previa
instalación de Python PIP en su computadora.-
OpenCV-Python: utilizará esta biblioteca para preprocesar la imagen de entrada y mostrar varias imágenes de salida.
pepita instalar OpenCV-Python
-
imutiles: utilizará esta biblioteca para recortar la imagen de entrada original al ancho deseado.
pepita instalar imutiles
-
pytesseract: utilizará esta biblioteca para extraer los caracteres de la matrícula y convertirlos en cadenas.
La biblioteca pytesseract se basa en el Teseracto OCR motor de reconocimiento de caracteres.pepita instalar pytesseract
Qué es Tesseract OCR y cómo instalarlo en su computadora
Tesseract OCR es un motor que puede reconocer los caracteres de un idioma. Debe instalarlo en su computadora antes de usar la biblioteca pytesseract. Para hacerlo:
- Abra cualquier navegador basado en Chrome
- Descargar el Teseracto OCR configuración
- Ejecute el programa de instalación e instálelo como cualquier otro programa
Habiendo preparado el entorno e instalado tesseract OCR, está listo para codificar el programa.
1. Importación de las bibliotecas
Comience importando las bibliotecas que instaló en el entorno. Importar las bibliotecas le permite llamar y usar sus funciones en el proyecto.
importar cv2
importar imutiles
importar pytesseract
Tienes que importar el OpenCV-Python biblioteca como cv2. Importe las otras bibliotecas con los mismos nombres que usó para instalarlas.
2. Tomando la entrada
Luego dirija pytesseract a la ubicación donde está instalado el motor Tesseract. Tome la imagen del coche como entrada usando el cv2.imread función. Reemplace el nombre de la imagen con el nombre de la imagen que está utilizando. Guarde la imagen en la misma carpeta que su proyecto para facilitar las cosas.
pytesseract.pytesseract.tesseract_cmd = 'C:\\Archivos de programa\\Tesseract-OCR\\tesseract.exe'
imagen_original = cv2.imread('imagen3.jpeg')
Puede reemplazar la siguiente imagen de entrada con la que le gustaría usar.
3. Preprocesamiento de la entrada
Cambie el tamaño del ancho de la imagen a 500 píxeles. Luego convierta la imagen a escala de grises como el función de detección de borde astuto solo funciona con imágenes en escala de grises. Finalmente, llama al Filtro bilateral función para reducir el ruido en la imagen.
imagen_original = imutils.resize (imagen_original, ancho=500 )
imagen_gris = cv2.cvtColor (imagen_original, cv2.COLOR_BGR2GRAY)
imagen_gris = cv2.bilateralFilter (imagen_gris, 11, 17, 17)
4. Detección de la matrícula en la entrada
Detectar la matrícula es el proceso de determinar la parte del automóvil que tiene los caracteres de la matrícula.
Realización de la detección de bordes
Comience llamando al cv2.Canny función que detectará automáticamente los bordes de la imagen preprocesada.
edged_image = cv2.Canny (gray_image, 30, 200)
Es a partir de estos bordes que encontraremos los contornos.
Encontrar los contornos
Llama a cv2.findContours función y pasar una copia de la imagen con bordes. Esta función detectará los contornos. Dibuje alrededor de los contornos detectados en la imagen original usando el cv2.dibujarContornos función. Finalmente, imprima la imagen original con todos los contornos visibles dibujados.
contornos, nuevo = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = imagen_original.copia()
cv2.dibujarContornos(img1, contornos, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)
El programa dibuja todos los contornos que encuentra en la imagen del coche de forma distintiva.
Después de encontrar los contornos, debe ordenarlos para identificar a los mejores candidatos.
Ordenar los contornos
Ordene los contornos según el área mínima 30. Ignore los que están debajo, ya que es menos probable que sean el contorno de la placa de matrícula. Haga una copia de la imagen original y dibuje el 30 mejores contornos en la imagen. Por último, muestra la imagen.
contornos = ordenado (contornos, clave = cv2.contourArea, inverso = Verdadero)[:30]
# almacena el contorno de la matrícula
pantallaCnt = Ninguno
img2 = imagen_original.copia()
# dibuja los 30 mejores contornos
cv2.dibujarContornos(img2, contornos, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)
Ahora hay menos contornos que al principio. Los únicos contornos dibujados son los aproximados para contener la matrícula.
Finalmente, debe recorrer los contornos ordenados y determinar cuál es la placa de matrícula.
Bucles sobre los 30 contornos superiores
Cree un bucle for para recorrer los contornos. Busque el contorno con cuatro esquinas y determine su perímetro y coordenadas. Almacena la imagen del contorno que contiene la matrícula. Finalmente, dibuje el contorno de la matrícula en la imagen original y muéstrelo.
cuenta = 0
idx = 7para c en contornos:
# aproximar el contorno de la matrícula
contorno_perímetro = cv2.arcLength (c, Verdadero)
aprox = cv2.approxPolyDP(c, 0.018 * contorno_perímetro, Verdadero)# Busque contornos con 4 esquinas
siLen(aprox.)== 4:
screenCnt = aprox.# encontrar las coordenadas del contorno de la matrícula
x, y, w, h = cv2.boundingRect (c)
new_img = imagen_original [ y: y + h, x: x + w]# almacena la nueva imagen
cv2.imwrite('./'+str (idx)+'.png',nuevo_img)
idx += 1
romper
# dibuja el contorno de la matrícula en la imagen original
cv2.dibujarContornos(imagen original, [pantallaCnt], -1, (0, 255, 0), 3)
cv2.imshow("matrícula detectada", imagen original )
Después del bucle, su programa ha identificado el contorno que contiene la matrícula. Se basa únicamente en el contorno de la placa de matrícula.
5. Reconocimiento de la matrícula detectada
Reconocer la matrícula significa leer los caracteres de la imagen recortada de la matrícula. Cargue la imagen de la matrícula que almacenó anteriormente y muéstrela. Luego, llama al 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.
# nombre de archivo de la imagen de matrícula recortada
cropped_License_Plate = './7.png'
cv2.imshow("recortadolicencialámina", cv2.Estoy leído(placa_de_licencia_recortada))
# convierte los caracteres de la placa de matrícula en una cadena
texto = pytesseract.image_to_string (cropped_License_Plate, lang='eng')
La matrícula recortada se muestra a continuación. Los caracteres en él serán la salida que luego imprimirá en la pantalla.
Habiendo detectado y reconocido la matrícula, está listo para mostrar la salida.
6. Visualización de la salida
Este es el paso final. Imprime el texto extraído en la pantalla. Este texto contiene los caracteres de la matrícula.
imprimir("La matrícula es:", texto)
cv2.esperaClave(0)
cv2.destroyAllWindows()
El resultado esperado del programa debe ser similar a la imagen a continuación:
El texto de la matrícula se puede ver en la terminal.
Mejora tus habilidades con Python
Detectar y reconocer matrículas de automóviles en Python es un proyecto interesante en el que trabajar. Es desafiante, por lo que debería ayudarlo a aprender más sobre Python.
Cuando se trata de programación, la práctica es fundamental para el dominio de un lenguaje. Para practicar tus habilidades, necesitas trabajar en proyectos interesantes.