Muchas soluciones de visión artificial basadas en aprendizaje profundo, para funcionar en tiempo real, aún no dan la talla de rendimiento y estabilidad en dispositivos de baja gama. Ahora ando de viaje y en los ratos de tren y momentos de pausa he aprovechado para mejorar mi sistema de seguimiento ocular destinado a performances audiovisuales. La versión inicial cumplía su tarea, pero con «peculiaridades».
Para mis proyectos actuales necesito un sistema robusto y eficiente. Exploré implementaciones de IA, como YOLO v3, v4, v8 y sus versiones «tiny», además de MobileNet-SSD v1 y v2. ChatGPT es útil aquí para implementar y traducir modelos entre plataformas rápidamente; de otro modo, habría tomado semanas comparar benchmarks para elegir e implementar uno. Entrené cada modelo con datos de una versión más precisa pero más lenta de mi sistema inicial, basada en k-means de OpenCV.
En este punto, los resultados vibraban y daban datos diferentes entre frames casi iguales. Reducir más las capacidades para aumentar la velocidad no era viable.
Volví a métodos de visión artificial «clásicos» (pronto los llamaremos retro) con el viejo y confiable OpenCV. Usé umbralización adaptativa y filtros de mediana en una imagen reducida para hallar el área de interés (ROI); luego busqué contornos y apliqué un ajuste circular por mínimos cuadrados en la imagen original. Logré así 40 fps en imágenes de 1620×1080.
Es una solución para un caso muy particular en un contexto controlado, pero muestra que los algoritmos tradicionales siguen siendo una alternativa muy poderosa.
No descarto seguir mejorando la eficiencia con algoritmos de IA. En el proceso surgieron ideas que podrían funcionar mejor al rescatar características más complejas de las imágenes en entornos controlados.
Uno de los instrumentos propios.