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.
Para el localizador se usa yolo v9 tiny, para lograr que el detector corra en tiempo real. Este detector de objetos se entrenó con patentes (ni una sola de Argentina), aun así no tiene problemas en localizarlas con alta precisión. Más detalles del entrenamiento del detector acá.
Hay 4 versiones del localizador de patentes, misma arquitectura (yolo v9 tiny), pero con distinta resolución de entrada. Los modelos usan resolución de entrada de {256x256, 384x384, 512x512, 640x640}, donde a mayor resolución mayor es la precisión (y puede detectar mejor patentes alejadas) pero mayor es el tiempo de inferencia ( es más lento).
🔥 Ahora los modelos se usan desde Open Image Models, una nueva fuente de modelos optimizados que facilita el uso de detección de objetos en diferentes contextos.
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.
Con python 3.x:
pip install .
Para correr con la placa de video/GPU y acelerar la inferencia, instalar estos requerimientos.
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
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.
python reconocedor_automatico.py --cfg config.yaml --demo
python reconocedor_automatico.py --cfg config.yaml
Para usarlo en tu proyecto podes leer de config o cread un dict, es lo mismo:
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)
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)
-
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
- Ampliar modelos OCR
- Compilar para EdgeTPU
- Quantizar a FP16
- Quantizar a INT8
- Optimizar
- Aumentar
batch
de OCR