Producto propio · en operación 2026 Terminado y desplegado

Horus — Monitoreo de salud ocular

Software con IA que previene el síndrome de ojo seco y la fatiga visual digital monitoreando el parpadeo en tiempo real.

  • Python
  • CNN
  • TFLite
  • OpenCV
  • React
  • FastAPI
  • PostgreSQL
  • Docker

El problema

Dirigido a oficinistas, estudiantes y equipos que pasan muchas horas frente a pantallas. En vez de tratar el síntoma después, Horus previene: monitorea el parpadeo con la cámara y emite alertas en tiempo real que sostienen hábitos como la regla 20-20-20.

Pensado para distribución mediante planes corporativos para empresas y clínicas.

Qué hace

  • 01 Modelo CNN liviano (TFLite) para clasificar ojos abiertos/cerrados en tiempo real
  • 02 Cálculo de métricas de parpadeo y fatiga a partir del video
  • 03 Plataforma web con estadísticas por sesión y seguimiento de hábitos visuales
  • 04 Procesamiento local: privacidad del usuario, sin subir video al servidor
  • 05 Panel pensado para uso corporativo y clínico

El enfoque técnico

La decisión que ordenó todo fue procesar el video localmente en vez de mandarlo a un servidor. Subir la webcam del usuario a la nube era inviable por privacidad (nadie instala una app que transmite su cámara ocho horas al día) y por costo: analizar streams de video en el servidor no escala para un plan corporativo. El precio de esa decisión es que el modelo tiene que correr en la máquina del usuario, junto a su trabajo normal, sin comerse el CPU.

Por eso el clasificador de ojos abiertos/cerrados es una CNN pequeña convertida a TFLite en vez de una arquitectura pesada: cedí algo de precisión a cambio de inferencia en tiempo real en hardware modesto. OpenCV detecta y recorta la región de los ojos antes de la inferencia, así el modelo solo procesa lo que necesita.

Lo más difícil no fue el modelo sino la señal: un parpadeo dura fracciones de segundo, y distinguir parpadeos reales del ruido (cabeza girada, mala luz, una mano frente a la cara) obligó a trabajar sobre la serie temporal, no sobre frames sueltos. La métrica útil es la frecuencia y duración de parpadeos por ventana de tiempo. Al servidor (FastAPI + PostgreSQL) solo viajan esas métricas agregadas — nunca imágenes.

Aprendizajes

El techo inesperado fue la variabilidad del mundo real: un modelo que funcionaba perfecto en mi laptop fallaba con contraluz o con webcams de baja calidad. Aprendí a evaluar pensando en el peor hardware y la peor iluminación del usuario, no en las mías.

Queda pendiente la validación de las métricas de fatiga con más usuarios reales y criterio clínico: hoy las alertas sostienen hábitos como la regla 20-20-20, pero convertir parpadeos en un indicador de salud riguroso es un problema de producto tanto como de ingeniería, y prefiero decirlo a fingir que ya está resuelto.

¿Quieres algo similar?

Cuéntanos tu caso y te decimos, honestamente, si podemos ayudarte.