
Tomás Domínguez Mínguez
La visión artificial es una disciplina científica formada por un conjunto de técnicas de captura, procesamiento y análisis de imágenes, cuyo objetivo es la extracción de información útil a partir de las imágenes captadas por una cámara.
Las técnicas de captura convierten el mundo analógico de luces y sombras que nos rodea en datos binarios compuestos por ceros y unos. Por su parte, los métodos de procesamiento centran la atención en aspectos particulares de las imágenes digitalizadas (el color, los cambios de luz, etc.) para transformarlas en otras adaptadas a los algoritmos de análisis. Estos últimos serán los encargados de realizar las tareas más complejas, como el reconocimiento de caras, de objetos o de situaciones peligrosas en las que se basan sistemas como los de acceso, alarmas inteligentes o ayudas a la conducción, por citar algunos ejemplos.
En OpenCV. Aplicaciones prácticas de visión artificial con Python aprenderá a utilizar muchas de estas técnicas, tanto con imágenes estáticas (fotografías) como en movimiento (video), sin necesidad de entender la complejidad de los algoritmos en las que se sustentan, simplemente invocando las funciones OpenCV bajo las que se esconden.
OpenCV
OpenCV (Open Source Computer Vision Library) es una librería orientada al desarrollo de aplicaciones de visión artificial creada por Intel en 1999. Desde entonces, ha ganado adeptos rápidamente hasta convertirse en una de las más empleadas actualmente en el desarrollo de aplicaciones de visión artificial.

Entre los motivos de su reconocimiento se encuentra su naturaleza multiplataforma (Windows, Linux, Android y MacOS) y multilenguaje (C++, Python, Java, y MATLAB). Además, es un software libre que se distribuye con licencia BSD (Berkeley Software Distribution), con menos restricciones que otras como GPL (General Public License – Licencia Pública General de GNU), ya que permite incluso el uso de su código fuente en software comercial.
Como resultado, existe una extensa y creciente comunidad de desarrolladores que amplía día a día el número de funciones de esta librería y, en consecuencia, sus ámbitos de aplicación, entre los que se encuentran:
- Reconocimiento facial
- Identificación de objetos
- Inspección y vigilancia
- Juegos y controles
- Robótica
- Realidad aumentada
En OpenCV. Aplicaciones prácticas de visión artificial con Python realizará ejercicios prácticos en muchos de ellos y desarrollará sencillos programas cuyo código se explicará línea a línea, con el fin de que pueda personalizarlos o sirvan de inspiración a otros en los que esté pensando.
Python
De todos los lenguajes en los que está disponible OpenCV, se ha elegido Python por ser uno de los que cuenta con mayor número de programadores. Detrás de su enorme popularidad se encuentra la sencillez de aprendizaje y facilidad de uso, aunque también influye su capacidad para ejecutarse en Windows, Mac o Linux.

¿Todavía no lo conoce o quiere refrescar sus conocimientos porque hace tiempo que no trabaja con él? En OpenCV. Aplicaciones prácticas de visión artificial con Python dispone de un amplio anexo que representa en sí mismo un curso de iniciación a este lenguaje. En él se explica todo lo necesario (incluso más) para entender el código desarrollado en las prácticas con las que se experimentan las técnicas de visión artificial introducidas en cada capítulo.
Funciones de procesamiento y análisis de imágenes
Las funciones ofrecidas por la librería OpenCV son muchas y muy variadas, por lo que se ha cuidado al máximo el orden en el que se introducen. Por ese motivo, se empieza describiendo las auxiliares, ya que complementan al resto en lo relativo a la interacción con el usuario. Serán las encargadas del manejo del teclado y el ratón, el dibujo de líneas y figuras geométricas, o la escritura de textos en cualquier parte de la pantalla. Aunque no están directamente relacionadas con el procesamiento y el análisis de imágenes, pronto descubrirá que son imprescindibles para señalar objetivos, modificar los valores de los parámetros que determinan el comportamiento de los algoritmos, delimitar áreas o añadir cualquier tipo de información que muestre visualmente los resultados de las funciones que realmente realizan las labores de visión artificial. Por ejemplo, en la siguiente imagen sirven para señalar e identificar a la persona que aparece retratada en el cuadro.

Dentro de las funciones de procesamiento se distinguen las generales, como las de escalado, recorte o combinación de imágenes, entre otras. Son las utilizadas en muchos programas de retoque fotográfico. En esta misma categoría también se encuentran los filtros, que transforman una imagen en otra que enfatiza aquellos aspectos sobre los que actuarán los algoritmos de análisis que se apliquen posteriormente. En OpenCV. Aplicaciones prácticas de visión artificial con Python estudiará una gran variedad de ellos, entre los que destacan los morfológicos, los lineales, los basados en umbral o el curioso filtro Canny, capaz de crear dibujos a mano alzada.

Si las funciones de procesamiento transforman el aspecto de la imagen, las de análisis extraen información de ella como, por ejemplo, las que emplean técnicas avanzadas de inteligencia artificial para reconocer la presencia personas en la escena.

En ningún caso necesitará conocer detalles de implementación de estos algoritmos, sino únicamente la función que lo ejecuta y los parámetros que determinan su comportamiento general.
Aplicaciones de visión artificial
Las aplicaciones de visión artificial requieren generalmente la intervención tanto de funciones auxiliares como de captura, procesamiento y análisis de imágenes, ya que se complementan entre sí. Sirva como ejemplo una aplicación con la que seguramente haya pasado algún rato divertido viendo el aspecto que presentaba con algún tipo de complemento cómico o estrafalario (en este caso, un monóculo que le daría un toque aristocrático).
Para conseguirlo, tras obtener la imagen con la función de captura de video, se invoca la función de reconocimiento facial que localiza la cara de una persona. La función que detecta los ojos es diferente a la que identifica la cara y solo tiene resultados aceptables cuando la imagen contiene únicamente una cara. Por ese motivo, la imagen original se recorta con otra función que la separa del cuerpo. Una vez conocida la posición de los ojos, una nueva función superpone el monóculo sobre el izquierdo. Ya solo quedaría volver a situar el recorte modificado en su posición original para conseguir el resultado final.

Observe que en este caso se han combinado funciones avanzadas de análisis como las de reconocimiento facial y de ojos (recurren a la inteligencia artificial) con otras básicas de procesamiento, como las de recorte y combinación de imágenes.
A veces no se quiere identificar objetos sino compararlos. Es lo que habitualmente se hace en sistemas industriales de control de calidad, que detectan si un objeto tomado aleatoriamente del final de una cadena de producción coincide con un modelo de referencia. De forma lúdica, también se podría utilizar para resolver pasatiempos, como el de las siete diferencias, a los que seguro es un gran aficionado. Fíjese bien en las dos imágenes mostradas a continuación, tomadas en un importante dentro comercial de Paris.


Aunque parecen iguales, hay una diferencia entre ellas. Si no fuera capaz de localizarla, en OpenCV. Aplicaciones prácticas de visión artificial con Python se describe un programa, de unas pocas líneas de código, capaz de marcar con una flecha el lugar exacto dónde se encuentra.
La operación de comparación no solo permite identificar las diferencias entre dos imágenes sino realizar búsquedas (si me apura, hasta la de una aguja en un pajar). Volviendo de nuevo al mundo de los pasatiempos, probablemente haya pasado buenos ratos con la afamada serie de libros ¿Dónde está Wally? En ellos, se propone como reto localizar a este simpático personaje, oculto en una multitud. Estoy convencido de que, aunque inicialmente hubiera probado suerte buscando de forma aleatoria en diferentes partes de la imagen, finalmente se habrá rendido a la estrategia de recorrerla de forma sistemática (de izquierda a derecha y de arriba hacia abajo) con el fin de no dejar ningún rincón sin explorar. Aun así, no siempre le habrá resultado fácil dar con él.
Eso es precisamente lo que hace una de las funciones de OpenCV, capaz de encontrar la siguiente imagen (en la que se ve la parte superior de tres arcos) en otra donde se muestra el interior del Coliseo de Roma.

De nuevo, si no es capaz de localizarlos, en OpenCV. Aplicaciones prácticas de visión artificial con Python desarrollará un sencillo programa que le marcará su ubicación exacta en este imponente monumento romano.
Procesamiento de imágenes en tiempo rea
Quizás suponga que las funciones de procesamiento y análisis de imágenes estáticas (fotografías) son diferentes de las dinámicas (vídeo). Sin embargo, solo tiene que pensar que un vídeo no es más que una sucesión de fotogramas para darse cuenta de que solo tendrá que aplicarlas de forma reiterada a cada uno de ellos para obtener los mismos resultados.
El manejo de imágenes en tiempo real aumenta los ámbitos en los que se pueden aplicar las técnicas de visión artificial, como, por ejemplo, el de las alarmas inteligentes, que no se disparan mientras su gato deambula libremente dentro de casa; o el de seguimiento de objetos, con las que será capaz de crear su propia mascota virtual. Se asombrará de lo sencillo que resulta darle vida y hacer que, de una forma muy realista, se mueva o siga atentamente con la mirada todos sus movimientos o el del objeto que haya elegido como su juguete.
En OpenCV. Aplicaciones prácticas de visión artificial con Python hará prácticas en estos y otros ámbitos de aplicación, como el de la realidad aumentada, que permite añadir en tiempo real información gráfica o textual relacionada con objetos captados por la cámara. Aunque este tipo de aplicaciones puede parecerle algo sofisticadas, al alcance de muy pocos especialistas, descubrirá que utilizan los mismos métodos de procesamiento y análisis de imágenes. De esta forma, con saber obtener el color de un objeto y sustituirlo por otro podrá averiguar, por ejemplo, cuál es el que mejor combina con los cojines de su sofá. Solo tendrá que pulsar sobre uno de ellos, abrir la paleta de colores, seleccionar el que quiera y comprobar los resultados obtenidos.

En este caso se trata de un cojín, pero también podría aplicarse a una pared, al panelado de un mueble o a cualquier otro producto que pueda adquirirse con diferentes acabados.
Si en vez de colores manejara contornos, le sería muy sencillo desarrollar aplicaciones que tuvieran en cuenta su tamaño (el del área o su perímetro) o el número de esquinas, como hace esta otra aplicación para enseñar a los niños las figuras geométricas, ya que es capaz de identificarlas y escribir su nombre sobre ellas cuando se sitúan delante de la cámara.

En definitiva, en OpenCV. Aplicaciones prácticas de visión artificial con Python aprenderá a usar las herramientas básicas necesarias para desarrollar una gran variedad de programas de visión artificial. Todas las técnicas se exponen de forma sencilla y clara, sin entrar en conceptos matemáticos. Además, para que no quede ninguna duda sobre su aplicación práctica, cada una de ellas se emplea en programas sencillos, pero útiles, que se explican línea a línea.
¡A partir de ahora, las imágenes dejarán de ser solo un puñado de píxeles, para convertirse en una fuente información que le facilitará la realización de proyectos a otro nivel!