Cómo diseñé un sistema de ojos animados controlados por visión artificial

Hace un tiempo que vengo experimentando la combinación de hardware básico con visión artificial. La idea, era construir un sistema simple donde una matriz de LEDs representara dos ojos que se abrieran o cerraran dependiendo del parpadeo detectado en tiempo real mediante una cámara.

El primer intento consistió en recorrer la matriz LED de 8×32 pixel por pixel, encendiendo o apagando cada LED individualmente según el patrón deseado. Aunque técnicamente funcionaba, el resultado no era satisfactorio: el dibujo tardaba en actualizarse y el cambio de estado de los ojos se percibía lento.

Buscando optimizar el rendimiento, cambié el enfoque. En lugar de manejar cada LED de forma independiente, diseñé patrones binarios donde cada fila de la matriz correspondía a un byte de información. Con esto, el sistema podía actualizar toda la figura del ojo de manera instantánea, reduciendo los tiempos de actualización perceptibles.

Una vez que la animación en la matriz fue optimizada, el siguiente paso fue integrar la detección de parpadeo. Utilicé Python junto con OpenCV y MediaPipe para capturar video en tiempo real y analizar las posiciones de los ojos. Calcule el Eye Aspect Ratio (EAR) para determinar el grado de apertura de los párpados. Si el EAR bajaba por debajo de un umbral definido, se consideraba que el ojo estaba cerrado.

Cada evento detectado en Python enviaba un comando simple por comunicación serial al microcontrolador: «OPEN» si los ojos estaban abiertos, o «CLOSE» si se detectaba parpadeo. Arduino recibía estos comandos y actualizaba la matriz de LEDs en consecuencia.

Durante el proceso surgieron varios problemas adicionales, como la necesidad de afinar el umbral del EAR para evitar falsos positivos, optimizar la lectura de comandos seriales para evitar retrasos, y mejorar la fluidez de las animaciones para que los cambios de estado se sintieran naturales.

El resultado final fue un sistema que detecta el parpadeo de una persona en tiempo real y actualiza una matriz de LEDs para representar esa acción. Además, si no detecta eventos durante cierto tiempo, el sistema genera parpadeos automáticos programados, simulando actividad natural.

Esta idea fue una buena práctica para integrar visión computacional con control físico de hardware en tiempo real. También sirvió para explorar la importancia de optimizar flujos de procesamiento en sistemas de recursos limitados, aún hay muchas cosas que mejorar pero es una base con la que puedo seguir explorando nuevas ideas.