Git Product home page Git Product logo

convalpr's Introduction

ConvALPR

Actions status Ruff Pylint Checked with mypy image

Alt Text

ConvALPR es un Reconocedor Automatico de Patentes Vehiculares, que utiliza Redes Neuronales Convolucionales. A diferencia de metodos tradicionales, este approach puede reconocer patentes con obstrucciones/diferencia de brillo/letras borrosas, etc. ConvALPR consiste de dos procesos: localizar (detector de objetos) y reconocedor ( Reconocimiento Optico de Caracteres). Ambas usan solamente Redes Convolucionales/ConvNets/CNNs.

Proceso ALPR

Localizador

Demo yolo v4 tiny

Para el localizador se usa yolo v4 tiny, para lograr que el detector corra en tiempo real. Este detector de objetos se entreno con patentes (ni una sola de Argentina) aun asino tiene problemas en localizarlas con alta precision. Mas detalles de entrenamiento del detector aca. Se convirtieron los parametros de framework Darknet a TensorFlow usando este repo.

En este repo se pueden encontrar 3 versiones del localizador de patentes, misma arquitectura (yolo v4 tiny sin spp), pero con distinta resolucion de entrada. Los modelos usan res. de entrada de {384x384, 512x512, 608x608}, donde a mayor la resolucion mayor es la precision (y puede detectar mejor patentes alejadas) pero mayor es el tiempo de inferencia (es mas lento). Estos modelos se encuentran alpr/models/detection

Reconocedor (ROC/OCR)

Demo OCR

Para el reconocedor de caracteres OCR de las patentes, se diseñaron unos modelos personalizados en TensorFlow Keras.

En este repositorio se pueden encontrar los mismos modelos que aca.

Como usarlo

Instalar dependencias

Con python 3.x:

pip install .

Para correr con la placa de video/GPU y acelerar la inferencia, instalar estos requerimientos.

Visualizar solo localizador

Para probar el localizador/detector de patentes (sin OCR, solo los bounding boxes) y visualizar las predicciones se usa el comando:

python detector_demo.py --fuente-video /path/a/tu/video.mp4 --mostrar-resultados --input-size 608

Intenta con los distintos modelos {608, 512, 384} para ver cual se ajusta mejor a tu caso

Reconocedor Automatico

Config

La configuracion del ALPR se puede encontrar en config.yaml. Este contiene los ajustes del Reconocedor y Localizador. Las distintas opciones estan descriptas en el mismo archivo (que hacen). El modelo de OCR es independiente del detector de objetos, y cualquiera deberia funcionar bien con cualquiera.

Ejemplo visualizar ALPR

python reconocedor_automatico.py --cfg config.yaml --demo

Guarda en Base de Datos sin visualizar

python reconocedor_automatico.py --cfg config.yaml

Python API

Para usarlo en tu proyecto podes leer de config o cread un dict, es lo mismo:

Forma #1 (cfg)

from alpr.alpr import ALPR
import cv2
import yaml

im = cv2.imread('assets/prueba.jpg')
with open('config.yaml', 'r') as stream:
    cfg = yaml.safe_load(stream)
alpr = ALPR(cfg['modelo'])
predicciones = alpr.predict(im)
print(predicciones)

Forma #2 (dict)

from alpr.alpr import ALPR
import cv2

im = cv2.imread('assets/prueba.jpg')
alpr = ALPR(
    {
        'resolucion_detector': 512,
        'confianza_detector': 0.25,
        'numero_modelo_ocr': 2,
        'confianza_avg_ocr': .4,
        'confianza_low_ocr': .35
    }
)
predicciones = alpr.predict(im)
print(predicciones)

Notas

  • Aclaracion: Si bien el localizador funciona para patentes de cualquier pais el reconocedor actual esta hecho especialmente para Argentina, si queres entrenar uno personalizado

  • Este trabajo forma parte de un proyecto integrador para la Universidad

TODO

  • Ampliar modelos OCR
  • Compilar para EdgeTPU
  • Quantizar a FP16
  • Quantizar a INT8
  • Optimizar
  • Aumentar batch de OCR

convalpr's People

Contributors

ankandrew avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

convalpr's Issues

Patente no reconocida

Hola,

Gracias por la implementación. Intentè ejecutarlo con esta imagen y no la reconoce. Solo me funciona con la que viene en assets. Cuál puede ser el problema?
Estoy utilizando este còdigo para la prueba:

im = cv2.imread('patente_test.jpg')
with open('config.yaml', 'r') as stream:
    cfg = yaml.safe_load(stream)
alpr = ALPR(cfg['modelo'], cfg['db'])
predicciones = alpr.predict(im)
print(predicciones)

Gracias

AttributeError: 'ALPR' object has no attribute 'conn'

Hola, buenas noches. Los felicito por el proyecto y estoy muy interesado en poder probarlo, pero no logro instalarlo correctamente o algo falta y no sé qué es.

Estoy probando el código sobre Ubuntu server 18.04.6 y estoy usando la versión de python 3.6.9

Lo primero que hice, fue instalar a mano las dependencias que figuran en requirements.txt porque me encontré con un problema, que el release candidate de Tensorflow 2.3.0rc0 no existe más, así que instalé directamente el 2.3.0 con pip install tensorflow-gpu==2.3.0

El resto de la instalación no fue problema, no tuve ningún error.

Detalle importante, no estoy usando GPU, así que descomenté la línea os.environ["CUDA_VISIBLE_DEVICES"] = "-1" que según entiendo es la forma de indicar que no tengo GPU, por default entendí que el código viene para usar GPU, corríjanme si digo mal.

Al ejecutar cualquiera de las líneas que trae el ejemplo, me arroja el siguiente mensaje de error, por ejemplo cualquierda de las siguientes da el mismo error:

python reconocedor_automatico.py --cfg config.yaml --demo
python3 reconocedor_automatico.py --cfg config.yaml

error:

local variable 'cursor' referenced before assignment
Exception ignored in: <bound method SqlSaver.__del__ of <alpr.alpr.ALPR object at 0x7f736223abe0>>
Traceback (most recent call last):
  File "/opt/ConvALPR/alpr/saver.py", line 63, in __del__
    self.conn.commit()
AttributeError: 'ALPR' object has no attribute 'conn'

Por si sirve el dato, la carpeta de la base de datos la crea, pero la base no.

Por favor, si me pueden ayudar, no sé qué es lo que está faltando o qué pasos me recomiendan repasar para tratar de resolverlo.

Muchas gracias

Problema al reconocer los caracteres de la placa

Hola, gracias por el increíble trabajo. Cuando pruebo el modelo con un conjunto determinado de videos, funciona bien. Pero cuando estoy probando con video fuera de él, está detectando la placa de matrícula pero no puede obtener el reconocimiento de números/alfabetos de ella. ¿Crees que necesito cambiar algunos parámetros para que funcione?
Gracias por adelantado.
screenshot_

Lectura en tiempo real con http o rtsp camara ip

Buenas noches, espero esten bien.

Soy nuevo en este mundo, y me gustaria usar este modelo para obtener patentes en tiempo real, mediante una camara ip en vivo, via http o rtsp. Es posible?

Gracias

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.