ANPR Tesseract–OpenCV
Un ANPR (Automatic Number Plate Recognition) es un sistema automatizado para el reconocimiento de matriculas de automóviles, el reconocimiento de matriculas de vehículos es uno de las aplicaciones que podemos construir con opencv, nos apoyaremos en las librería tesseract-ocr para el reconocimiento de la matricula mientras opencv proveerá las funciones de detección de la misma.
Como ya hemos mencionado esta aplicación se dividirá en dos partes importantes la detección de la región que contiene la matricula aplicando las funciones opencv y el reconocimiento o identificación del numero de matricula por tesseract-ocr.
Para habilitar ambas librerías podemos crear un proyecto opencv y luego sobre este instalar tesseract-ocr, si deseamos o si es mas cómodo podemos hacerlo al revés, otra opción es compilar ambas librerías en modo release luego usar los archivos compilados de ambos proyectos para crear el nuevo que utilice ambas librerías.
Lo mas sencillo de hacer es seguir el tutorial de tesseract-ocr y luego aplicar la instalación de opencv sobre este proyecto.
Detección de la placa
En este proceso intentamos detectar el rectángulo de la imagen que contiene la placa o matricula vehicular, en el libro Mastering Opencv, capitulo 5, se explica detalladamente el proceso aplicado para obtener el resultado apreciado en la imagen.
El la siguiente imagen se proporciona una lista de funciones opencv aplicada y la serie de imagen obtenidas al aplicar cada función:
• Sobel filter
• Threshold operation
• Close morphologic operation
• Mask of one filled area
• Possible detected plates marked in red (features images)
• Detected plates after the SVM classifier
Como hemos mencionado la explicación se puede encontrar en el libro antes mencionado aunque esta en ingles, mi aporte personal será integrar tesseract-ocr para lograr el reconocimiento del numero de identificación del vehículo.
Mat car_img = imread("cars\\car-1.jpg"); tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI(); // Inicializar tesseract para el lenguaje español // Indicar la ruta donde se encuantra la carpeta tessdata, contiene los datos para los lenguajes if (api->Init("C:\\Users\\Carmelo\\Desktop\\Tesseract\\tessdata", "spa")) { fprintf(stderr, "Error al inicializar.\n"); system("pause"); exit(1); } for (auto& m : detect(car_img)) { Mat gray; threshold(m, gray, 60, 255, CV_THRESH_BINARY); api->SetPageSegMode(tesseract::PSM_SINGLE_BLOCK); api->SetImage((uchar*)gray.data, gray.cols, gray.rows, 1, gray.cols); string placa = api->GetUTF8Text(); std::cout << "Placa # " << placa << std::endl; imshow(placa, gray); } // Liberar memoria api->End();
Para lograr la integración de opencv y tesseract solo debemos establecer con el método SetImage los datos que componen la imagen, es lo único que debemos hacer aparte de lo aprendido en tutoriales anteriores y en el capitulo 5 del libro antes mencionado.
Debemos recordar corregir las rutas en los archivos de encabezado .h, los datos de entrenamiento de tesseract, la imagen del auto que analizaremos.
hola , este proyecto con que version de .net lo puedo abrir?
ResponderEliminaro que aplicacion necesito para probar
hola, muy buen aporte, soy nuevo emplando codificación opencv y tesseract-OCR me podrian ayudar....Estoy probando el código para reconocimiento de placas pero me dice: IntelliSense: el identificador "detect" no está definido.
ResponderEliminar¿Como hago para solventar el problema? ¿cual es la forma correcta para definir el detect?
Hola, buen articulo! Crees posible detectar varias placas a la vez en la misma imagen.
ResponderEliminarBuenas tardes
ResponderEliminarcuando se ejecuto el msbuild se genera algunos errores y no genera la carpeta release, cual crees que sea el problema?
Verifica que las rutas sean correctas y que la versión del compilador sea la adecuada.
EliminarCarmelo, realize tal cual tienen en los pasos de instalación de Tesseract:
Eliminar1.se descargo en descargas de usuario
2.descomprimio
3. inicie CMD Administrador: Simbolo del sistema para desarrolladores de vs2015
4., ingrese a la carpeta de Tesseract-vs2012-master e inicie el comando msbuild build.proj me salen 16 errores.
Estoy con VS 2015, gracias por la ayyudaa
Hola, me podrías mandar el código completo?
ResponderEliminarUn saludo
algun interesado en desarrollar un proyecto de anpr contactarme +522281247714 watssapp soy antonio velver
ResponderEliminar