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 muy 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 día, 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 actúe de determinada forma.

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

OCR

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

  • Binarización Es simplemente el pasar la imagen a blanco y negro, ya que la mayoría de algoritmos funcionan a partir de una imagen binaria (dos colores), openCV no es una excepción.
  • Segmentación de líneas y palabras Aquí se aislarán las palabras una por una.
  • Reconocimiento de carácteres/Comparación de patrones. Por último se compararían dichos carácteres obtenidos contra una base de datos, a mejor base, mejores resultados.

Por suerte, hay ya librerías 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 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”, será 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).

Computer Vision, Visión Artificial, sh3llcon.org

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

Computer Vision, Visión Artificial, sh3llcon.org
Computer Vision, Visión Artificial, sh3llcon.org

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

Computer Vision, Visión Artificial, sh3llcon.org
Computer Vision, Visión Artificial, sh3llcon.org

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.

Computer Vision, Visión Artificial, sh3llcon.org
Computer Vision, Visión Artificial, sh3llcon.org

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.

Computer Vision, Visión Artificial, sh3llcon.org
Computer Vision, Visión Artificial, sh3llcon.org

Ahora simplemente, crearemos una nueva imagen, en la que solo tengamos dicho rectángulo recortado, esa 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ída la matrícula con el OCR, resaltamos dicho rectángulo en la foto en color verde, así como escribimos un texto al lado, donde aparezca la matrícula leída.

Computer Vision, Visión Artificial, sh3llcon.org
Computer Vision, Visión Artificial, sh3llcon.org

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 imágenes, 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 sólo una.

Outro

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

Firmado: @b0n3sh

Sh3llCON no se hace responsable de las opiniones vertidas por sus colaboradores ni por las actuaciones que, fruto del conocimiento transmitido, puedan realizar terceras personas.

La imagen de cabecera se ha compuesto con 3 fotos cortesía de Pixabay

https://pixabay.com/es/photos/ojo-iris-buscar-enfoque-ojo-verde-1132531/
https://pixabay.com/es/illustrations/bordo-conductores-circuitos-540253/
https://pixabay.com/es/photos/serpiente-reptil-3979601/