¿Cómo reconocer la matrícula/matrícula del vehículo (ANPR) a partir de una imagen?[cerrado]
-
13-09-2019 - |
Pregunta
Tengo un sitio web que permite a los usuarios cargar imágenes de automóviles y me gustaría implementar un filtro de privacidad para detectar placas de matrícula en el vehículo y difuminarlas.
El desenfoque no es un problema, pero ¿existe alguna biblioteca o componente (preferiblemente de código abierto) que ayude a encontrar una licencia dentro de una foto?
Advertencias;
- Sé que nada es perfecto y el reconocimiento de imágenes de este tipo proporcionará falsos positivos y negativos.
- Aprecio que podamos pedirle al usuario que seleccione el área a desenfocar y lo haremos también, pero la pregunta es específicamente sobre cómo encontrar esos datos mediante programación;por lo que respuestas como "hacer que una persona revise cada imagen" no son útiles.
- Este método de software se llama "Reconocimiento automático de matrículas" en el Reino Unido, pero no veo ninguna implementación del mismo como biblioteca.
- Cualquier idioma es excelente, aunque se prefiere .Net.
Solución
codifiqué una versión C # basado en JAVA ANPR, pero he cambiado las funciones de la biblioteca AWT con OpenCV. Puede comprobarlo en http://anprmx.codeplex.com
Otros consejos
EDITAR:escribí un secuencia de comandos de Python para esto.
Como su objetivo es borroso (para la protección de la privacidad), básicamente necesita un alto recordar detector como primer paso.A continuación se explica cómo hacer esto.Las sugerencias de código incluidas utilizan OpenCV con Python.
- Convertir a escala de grises.
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)
Sea la imagen de entrada la siguiente.
- Aplique el filtro Sobel para detectar bordes verticales.
Umbral de la imagen resultante utilizando un umbral estricto o la binarización de OTSU.
cv2.Sobel(image, -1, 1, 0) cv2.threshold()
Aplicar una operación de Cierre Morfológico utilizando un elemento estructurante adecuado.(Usé 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.
Encuentra los contornos externos de esta imagen.
cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
Para cada contorno, encuentre el
minAreaRect()
limitándolo.- Seleccione rectángulos según la relación de aspecto, el área mínima y máxima y el ángulo con la horizontal.(Usé 2.2 <= Relación de aspecto <= 8, 500 <= Área <= 15000 y ángulo <= 45 grados)
Todo minAreaRect()
s se muestran en naranja y el que satisface nuestros criterios está en verde.
- Es posible que haya falsos positivos después de este paso; para filtrarlo, utilice densidad de bordes.La densidad de borde se define como la número de píxeles blancos/número total de píxeles en un rectángulo.Establezca un umbral para la densidad de los bordes.(Yo usé 0,5)
- Desenfoca las regiones detectadas.
Puede aplicar otros filtros que considere adecuados para aumentar la recuperación y la precisión.La detección también se puede entrenar utilizando HOG+SVM para aumentar la precisión.
Hay una nueva, biblioteca de código abierto en GitHub que hace ANPR para los EEUU y placas europea. Se ve bastante precisa y se debe hacer exactamente lo que necesita (reconocer las regiones de la placa). Aquí está el proyecto GitHub: https://github.com/openalpr/openalpr
Me encontré con este que está escrito en Java JavaANPR , Busco # biblioteca de CA también.
Me gustaría tener un sistema en el que se pueden señalar una cámara de vídeo en algunos barcos de vela, todos los cuales tienen números grandes, identificables en ellos, y tienen que identificar los barcos y enviar un tweet cuando navegan más allá de una cámara de vídeo.
He hecho algunas google sobre esto hace un par de meses. Hay un buen número de documentos sobre este tema, pero nunca observe una aplicación de código abierto de hormigón. Hay muchas implementaciones comerciales sin embargo, pero ninguno de ellos con una cotización de precio, por lo que probablemente son bastante caros.
probar este simple lectura de matrículas Sistema de reconocimiento
El código abierto y escrito con C #
Tener un vistazo a de Java ANPR . libre reconocimiento de matrículas ...
Sí, uso gocr en http://jocr.sourceforge.net/ Es una aplicación de línea de comandos que puedes ejecutar desde tu aplicación.Lo uso en un par de mis aplicaciones.
alto rendimiento ANPR Biblioteca - http://www.dtksoft.com/dtkanpr.php. Esta es comercial, pero proporcionan clave de prueba.
http://licenseplate.sourceforge.net Python (no he probado)
Es tal vez funciona mirar el software recoqnition carácter, ya que hay muchas bibliotecas por ahí que realizan la misma cosa. Me lectura de una imagen y almacenarla. oficina Micrsoft es capaz de leer archivos TIFF y volver alfanuméricos
La confusión no es un problema, pero no es una biblioteca o componente (código abierto preferido) que le ayudará a encontrar una licencia dentro de una foto?
Respuesta: El motor de software FreeFlow CARMEN ANPR (Commerical)