Sala de Prensa

Tecnologías para mirar por la ventana

Visión e Inteligencia artificiales para la detección de objetos en imágenes.

En estos momentos, todas las personas estamos intentando gestionar la situación de confinamiento de la mejor manera posible. En mi caso, procuro recordar experiencias por las que ya he pasado para que me ayuden a convencerme de que “de todo se sale”.

Echando la vista atrás, las experiencias que más se le pueden parecer a la situación actual son, salvando las distancias, una dura época de exámenes, una larga lesión que te impide andar, un largo castigo…

En mi caso, todas estas situaciones han tenido un denominador común, pasaba largos ratos mirando por la ventana. Durante este confinamiento, se repite el comportamiento y paso mucho tiempo asomado a la ventana, la terraza, la azotea…

Pero llega un momento en el que mirar por mi ventana se me ha quedado corto y he tenido la necesidad de “cotillear” más allá de lo que puedo ver a través de ella. La principal curiosidad que se ha despertado en mi es la de comprobar si en otros barrios de mi ciudad se cumple el confinamiento de la misma manera en que lo estamos haciendo en mi barrio.

En este contexto, llegó la Semana Santa y recordé una pequeña idea que se me pasó por la cabeza leyendo hilo de correo electrónico con el que estábamos trabajando en Wellness TechGroup. En este hilo de correo nos encontrábamos haciendo una recopilación de fuentes de datos abiertas en el ámbito de las ciudades. Más en concreto, fuentes de datos abiertos en formato imagen y de la ciudad de Sevilla.

Entre las fuentes de datos recopiladas se encuentra el portal de Tráfico del Centro de Gestión de la Movilidad de la Delegación de Seguridad, Movilidad y Fiestas Mayores del Ayuntamiento de Sevilla.

No hay texto alternativo para esta imagen

En este portal podemos encontrar un mapa (powered by Esri) con la Infraestructura de Datos Espaciales (IDE) del Ayuntamiento de Sevilla. Ide.Sevilla integra el GeoPortal, y un conjunto de aplicaciones que tienen en común la puesta a disposición de los ciudadanos de la información geográfica que genera el Ayuntamiento de Sevilla, poniendo el acento, en la accesibilidad, difusión e interoperabilidad de los datos espaciales y el desarrollo de la administración electrónica.

En concreto, este mapa muestra la ubicación de algunas de las cámaras de tráfico con las que cuenta el Ayuntamiento de Sevilla. A través de los iconos de este mapa podemos acceder a las imágenes (estáticas) que están captando estas cámaras. Estas imágenes son actualizadas cada 1-2 minutos y se encuentran desfasadas 2 minutos del “tiempo real”.

Existe una gran variedad de ubicaciones, escenas y calidad de imagen entre las cámaras publicadas, en cualquier caso, no son pocas la que tienen un gran potencial para ver de manera clara que es lo que está ocurriendo en otras partes de la ciudad.

Me resultó bastante entretenido observar las distintas cámaras de la ciudad, pero qué ocurre, necesitaba refrescar la imagen cada 2 minutos para tener una escena actualizada de cada cámara. Por suerte, contamos con tecnologías que nos permiten convertir tareas manuales en tareas automáticas.

La visión artificial es una de las tecnologías con las que nunca había trabajado de manera práctica y el periodo de vacaciones de la Semana Santa era un momento perfecto para hacer un pequeño proyecto de esta temática. Las imágenes de las cámaras contaban con un gran potencial para hacer mis primeras pruebas de concepto con OpenCV.

No hay texto alternativo para esta imagen

OpenCV es una biblioteca libre de visión artificial originalmente desarrollada por Intel. Está totalmente desarrollado en C++, un lenguaje de programación orientado a objetos y con alta eficiencia computacional. Su API incluye un conector para Python.

Python es un lenguaje de programación con el que había trabajado muy poco hasta la fecha y esta me parecía una oportunidad de practicar y mejorar mis conocimientos de programación en Python. Este lenguaje de programación se ha convertido en los últimos años en el líder absoluto de las implementaciones de soluciones de Ciencia de Datos, Machine Learning y Visión Artificial e Inteligencia Artificial.

He aprendido que la detección de objetos en las imágenes de las cámaras de tráfico se puede realizar con los denominados detectores de una sola etapa (one stage detector). En general, los detectores de una sola etapa tienden a ser menos precisos que los de dos etapas, pero son significativamente más rápidos.

You Only Look Once (YOLO) es un gran ejemplo de un detector de una sola etapa. YOLO es un algoritmo de código abierto para detección de objetos en tiempo real. Este algoritmo hace uso de una única red neuronal convolucional para detectar objetos en imágenes. Este algoritmo ha sido entrenado sobre un conjunto de datos denominado COCO.

El conjunto de datos COCO consiste en 80 etiquetas, algunas de estas etiquetas son: Personas; Bicicletas; Coches y camiones; Aviones; Señales de tráfico y bocas de incendio; Animales, incluyendo gatos, perros, pájaros, caballos, vacas y ovejas, por nombrar algunos; Objetos de cocina y de comedor, como vasos de vino, tazas, tenedores, cuchillos, cucharas, etc.

Siguiendo este genial artículo de PyImageSearch, he sido capaz de adaptar el script de Python que ellos proponen para realizar la detección de coches, autobuses, camiones y personas sobre determinadas cámaras del Ayuntamiento de Sevilla. La detección de objetos que realiza este algoritmo es más que aceptable, comete errores tanto de falsos negativos como de falsos positivos, pero en general tiene una buena tasa de acierto si tenemos en cuenta que los objetos a detectar son bastante más pequeños que la escena en la que se encuentran.

El algoritmo de visión artificial ha sido entrenado con imágenes en las que los coches, autobuses, camiones y personas aparecen en la escena con un tamaño significativo y una perspectiva apropiada para detectar las partes características de cada objeto. En el caso de las cámaras, la perspectiva de la escena es cenital y los objetos a detectar se encuentran en una zona “ruidosa” de la imagen.

Vehículos, semáforos y personas detectadas como objetos en imagen por la Visión Artificial.
Vehículos, semáforos y personas detectadas como objetos en imagen por la Visión Artificial.

Por suerte, existen algunas cámaras de tráfico que muestran una escena con una perspectiva apropiada e imagen de la calidad necesaria para realizar una correcta detección de objetos. En la imagen vemos como la cámara instalada en la Glorieta Julián Besteiro nos permite hacer una detección prácticamente perfecta de los coches, camiones, autobuses y personas que se encuentran en la Avenida José Laguillo.

He realizado una selección de las cámaras que mejor escena ofrecen para incluirlas en la lista de imágenes a ser procesadas por el algoritmo de detección de objetos. Un script de Python recorre cada minuto esta lista de imágenes para realizar la detección y conteo de los objetos en escena. Este mismo script guarda la imagen con los objetos detectados en un servidor web y envía el conteo de objetos detectados a un servidor a través de MQTT.

No hay texto alternativo para esta imagen

En el servidor (Ubuntu sobre un miniPC) se encuentra desplegada una instancia de la versión de la comunidad de ThingsBoard. Sobre esta plataforma IoT open-source he construido un par de cuadros de mando que permiten ver de manera resumida tanto el presente como el histórico de las detecciones de objetos que se han realizado sobre las imágenes que ofrecen las cámaras de tráfico. He necesitado personalizar vía JavaScript algunos widgets para que se ajustaran a la necesidad de mostrar las estadísticas de un gran número de cámaras (Gráficas Top 5) y actualización periódica de imágenes.

Clasificación de cámaras por objetos detectados.
Clasificación de cámaras por objetos detectados.

La verdad que me encuentro bastante orgulloso del resultado y quería compartirlo con tod@s vosotr@s. Os mando muchas fuerzas y ánimo, pronto saldremos de esta. Os dejo los enlaces a los cuadros de mando por si queréis mirar por la ventana conmigo: