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:
- Abra cualquier navegador basado en Chrome
- descargar Teseracto OCR para construir
- 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.
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.
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 = 7for 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.
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.
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:
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.