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.

image
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

image
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.

Comentarios

  1. hola , este proyecto con que version de .net lo puedo abrir?
    o que aplicacion necesito para probar

    ResponderEliminar
  2. 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.

    ¿Como hago para solventar el problema? ¿cual es la forma correcta para definir el detect?

    ResponderEliminar
  3. Hola, buen articulo! Crees posible detectar varias placas a la vez en la misma imagen.

    ResponderEliminar
  4. Buenas tardes

    cuando se ejecuto el msbuild se genera algunos errores y no genera la carpeta release, cual crees que sea el problema?

    ResponderEliminar
    Respuestas
    1. Verifica que las rutas sean correctas y que la versión del compilador sea la adecuada.

      Eliminar
    2. Carmelo, realize tal cual tienen en los pasos de instalación de Tesseract:

      1.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

      Eliminar
  5. Hola, me podrías mandar el código completo?
    Un saludo

    ResponderEliminar
  6. algun interesado en desarrollar un proyecto de anpr contactarme +522281247714 watssapp soy antonio velver

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Conectar SQL Server con Java

Detección de rostros

Instalar OpenCV para Python en Windows