Introducción

Hoy vamos a tocar un poco de computer vision “visión por computador” o “visión artificial”, en Python, viendo sus posibles aplicaciones a la hora de lograr ciertas tareas como pueden ser las ANPR (cámaras de lectura de matrículas), va a ser una aproximación bastante básica, ya que es un tema bastante denso y no es un campo en el que haya lidiado mucho, por lo que espero que aprendamos todos algo con el artículo de hoy.

Si da tiempo en futuras entregas, me gustaría plantearlo al idílico caso de poder resolver captchas bastantes sencillo, de manera automatizada, es algo que hice en su dia, pero sin pararme mucho en el camino y pienso que puede ser interesante.

Sin más, empecemos.

¿Qué es la visión artificial?

Grosso modo y muy resumido, serían las técnicas y métodos que permiten que un ordenador, “simule” la visión que tenemos nosotros, es decir, que mediante algoritmos e imágenes, de forma que obtenga una información de las mismas y posteriormente, trate dicha información y actue de determinada forma.

Para esta mini demostración, vamos a usar Python y diversas librerías de la misma, siendo la más importante, OpenCV, la cual es una libreria que nos proporciona multitud de métodos y funciones en Python para poder realizar dicha visión artificial.

OCR

“Optical Character Recognition”, es el proceso de digitalizar un texto en una imagen, obteniendo el output del mismo, el proceso del OCR se divide en estas partes:

Por suerte, hay ya librerias que se han encargado de construir los modelos para reconocer estos textos, como Tesseract y EasyOCR.

Vamos a usar easyOCR, ya que en números, va mejor que tesseract.

Además de de estos pasos, se pueden añadir preprocesamiento y postprocesamiento, por ejemplo, quitar ruido a la imagen, normalizar ciertos parametros, o poner ciertas constricciones al output (en nuestro caso, sabemos que si recibimos como matrícula “152L PLQ”, esta es incorrecta).

Vamos a comenzar buscando una imagen cualquiera de un vehículo, en el que se vea la matrícula, un Seat Ibiza rojo, con matrícula española (hemos buscado una imagen muy nítida, con buena parada y en la que se ve de forma muy clara la matrícula, lógicamente un fotograma como el que pueda extraer una cámara de la DGT no siempre va a tener esta idoneidad, pero nos va a servir para demostrar el funcionamiento).

Como hemos comentado en los pasos del OCR, vamos a necesitar binarizar la imagen, es decir, pasarla a blanco y negro.

A continuación, reducimos el ruido de la imagen, de esta manera, tendremos la matrícula de forma más nítida, lo que facilitará el posterior procesamiento.

Ahora, mediante el algoritmo canny, sacamos los bordes de la imagen y los aislamos del resto de píxeles, facilitando la búsqueda de figuras en la imagen.

Una vez tenemos los edges definidos, los ordenaremos por tamaño, de mayor a menor y a continuación, buscaremos el primero que tenga 4 lados, es decir, un rectángulo/cuadrado con suerte de que sea nuestra matrícula.

Ahora simplemente, crearemos una nueva imagen, en la que solo tengamos dicho rectángulo recortado, esta misma imagen, será pasada a nuestro OCR (en este caso easyOCR, aunque también podríamos haber usado tesseract con el mismo resultado) y tendríamos el texto de la matrícula.

Una vez leído con el OCR la matrícula, resaltamos dicho rectángulo en la foto en color verde, así como escribimos un texto al lado, donde salga la matrícula leída.

Problemas

Hemos podido ver que funciona, mostrando la matrícula en la propia imagen así como el string en la consola, pero si probamos con otras imagenes, algunas funcionarán y otras no, a veces la matrícula no será el “cuadrado” más grande de la foto, por lo que podremos ver que se selecciona otra parte que no es la matrícula, induciendo a error al OCR, también en escenarios en los que hayan multiples matrículas, ya que como hemos podido ver, se selecciona solo una.

Outro

Espero que haya servido de ejemplo y de una idea de la variedad de usos que ofrece esta disciplina y en futuras entregas me gustaría ahondar un poco más en el tema, buscando diferentes aproximamientos y soluciones al problema ya planteado.