¿Cómo reconocer la matrícula del vehículo (ANPR) a partir de una imagen?


Tengo un sitio web que permite a los usuarios subir imágenes de automóviles y me gustaría poner un filtro de privacidad en su lugar para detectar las placas de matrícula en el vehículo y desenfocarlas.

El desenfoque no es un problema, pero ¿hay una biblioteca o componente (de código abierto preferido) que ayudará a encontrar una licencia dentro de una foto?

Advertencias;

  1. Sé que nada es perfecto y el reconocimiento de imágenes de este tipo proporcionará falsos positivos y negativos.
  2. Aprecio que podríamos pedirle al usuario que seleccione el área a desenfocar y haremos esto también, pero la pregunta es específicamente acerca de encontrar esos datos mediante programación; por lo que respuestas como 'obtener una persona para verificar cada imagen' no es útil.
  3. Este método de software se llama 'Reconocimiento Automático de Matrículas' en el Reino Unido, pero no puedo ver ninguna implementación de él como bibliotecas.
  4. Cualquier idioma es excelente, aunque se prefiere.Net.
Author: Ambo100, 2009-06-11

12 answers

Codifiqué una versión de C# basada en JAVA ANPR, pero cambié las funciones de la biblioteca awt con OpenCV. Puede comprobarlo en http://anprmx.codeplex.com

 29
Author: Jivan Miranda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-07 15:21:32

EDIT : Escribí un script en Python para esto.

Como su objetivo es difuminar (para la protección de la privacidad), básicamente necesita un alto recall detector como primer paso. He aquí cómo hacer esto. Las sugerencias de código incluidas usan OpenCV con Python.

  1. Convertir a escala de grises.
  2. Aplicar Desenfoque Gaussiano.

    img = cv2.imread('input.jpg',1)
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    img_gray = cv2.GaussianBlur(img_gray, (5,5), 0)  
    

Deje que la imagen de entrada sea la siguiente.

introduzca la descripción de la imagen aquí

  1. Aplique el filtro Sobel para detectar bordes verticales.
  2. Threshold la imagen resultante usando strict threshold o la binarización de OTSU.

    cv2.Sobel(image, -1, 1, 0)
    cv2.threshold() 
    
  3. Aplicar una operación de Cierre morfológico utilizando un elemento de estructuración adecuado. (Utilicé 16x4 como elemento estructurante)

    se = cv2.getStructuringElement(cv2.MORPH_RECT,(16,4))
    cv2.morphologyEx(image, cv2.MORPH_CLOSE, se)  
    

Imagen resultante después del paso 5.

introduzca la descripción de la imagen aquí

  1. Encuentra los contornos externos de esta imagen.

    cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
    
  2. Para cada contorno, encuentre el minAreaRect() que lo limita.

  3. Seleccione rectángulos basados en la relación de aspecto, el área mínima y máxima, y el ángulo con la horizontal. (Usé 2.2

Todos los minAreaRect()se muestran en naranja y el que satisface nuestros criterios está en verde.

introduzca la descripción de la imagen aquí

  1. Puede haber falsos positivos después de este paso, para filtrarlo, use densidad del borde. La densidad de borde se define como el número de píxeles blancos/número total de píxeles en un rectángulo. Establezca un umbral para la densidad del borde. (He utilizado 0,5)

introduzca la descripción de la imagen aquí

  1. Difumina las regiones detectadas.

introduzca la descripción de la imagen aquí

Puede aplicar otros filtros que considere adecuados para aumentar el recuerdo y la precisión. La detección también se puede entrenar con HOG+SVM para aumentar la precisión.

 21
Author: Abdul Fatir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-15 08:40:01

Hay una nueva biblioteca de código abierto en GitHub que hace ANPR para placas estadounidenses y europeas. Se ve bastante precisa y debe hacer exactamente lo que necesita (reconocer las regiones de la placa). Aquí está el proyecto GitHub: https://github.com/openalpr/openalpr

 12
Author: Derrick Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-09 05:17:19

Me encontré con este que está escrito en java javaANPR, estoy buscando una biblioteca de c# también.

Me gustaría un sistema donde pueda apuntar una cámara de video a algunos barcos de vela, todos los cuales tienen grandes números identificables en ellos, y que identifique los barcos y envíe un tweet cuando naveguen más allá de una cámara de video.

 10
Author: Bruce McLeod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-10 10:05:03

He hecho algunas búsquedas en Google sobre esto hace un par de meses. Hay bastantes artículos sobre este tema, pero nunca encontré ninguna implementación concreta de código abierto. Hay muchas implementaciones comerciales sin embargo, pero ninguna de ellas con una cotización de precio, por lo que probablemente sean bastante caras.

 8
Author: Mauricio Scheffer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-11 14:49:38

Pruebe este Sencillo Sistema Automático de Reconocimiento de Matrículas

Http://opos.codeplex.com/

Código abierto y escrito con C#

 5
Author: Birol Kuyumcu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-30 19:38:31

Echa un vistazo a Java ANPR. Reconocimiento gratuito de matrículas...

 3
Author: Ralph Wegner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-23 06:32:08

Sí Uso gocr en http://jocr.sourceforge.net / es una aplicación de línea de comandos que puede ejecutar desde su aplicación. Lo uso en un par de mis aplicaciones.

 2
Author: keyoke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-19 09:32:00

Biblioteca ANPR de alto rendimiento - http://www.dtksoft.com/dtkanpr.php. Esto es comercial, pero proporcionan la clave de prueba.

 2
Author: codeguru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-23 10:19:19

Http://licenseplate.sourceforge.net Python (no lo he probado)

 2
Author: Somatik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-30 16:05:28

Tal vez funcione mirando el software de recoqnition de caracteres, ya que hay muchas bibliotecas que realizan lo mismo. Leo una imagen y la guardo. Micrsoft office es capaz de leer archivos tiff y devolver alfanuméricos

 -1
Author: Matthew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-03 13:33:22

El desenfoque no es un problema, pero ¿hay una biblioteca o componente (de código abierto preferido) que ayudará a encontrar una licencia dentro de una foto?

Ans: El motor de software CARMEN FreeFlow ANPR (Commerical)

 -2
Author: abmv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-11 14:33:19