- Cámaras (RTSP) → Filtro de movimiento
- Filtro de movimiento → Detección YOLO
- Detección YOLO → Tracking
- Tracking → Líneas y zonas
- Líneas y zonas → Tablero
El problema
La gerencia quería saber cuánta gente entra, a qué hora hay picos y qué zonas del salón se usan más, para decidir horarios, personal y distribución. Había cámaras, pero nadie podía mirarlas para contar.
Qué construí
- Un sistema de analítica de video que procesa las cámaras existentes y genera eventos: entradas y salidas por líneas virtuales, ocupación por zona, tiempo de permanencia y mapas de calor.
- Un editor visual de líneas y zonas, con versiones y recarga en caliente, para ajustar sin tocar código.
- Un tablero con login de Google para consultar los datos.
Cómo funciona
YOLO detecta personas y ByteTrack las sigue cuadro a cuadro. Cada cruce de línea genera un evento, con una banda muerta para que nadie cuente dos veces, y hay deduplicación entre cámaras de un mismo ambiente. La inferencia solo corre cuando hay movimiento, porque el modelo es el 90% del costo de CPU. Los eventos se escriben de forma asíncrona y se guardan 90 días; los mapas de calor se agregan en SQL.
Privacidad
No se guarda video ni imágenes de las personas y no hay reconocimiento facial: solo eventos anónimos (una línea cruzada, una zona ocupada).
Estado y resultado
En producción, con cuatro de sus cinco etapas desplegadas y una cámara en operación; la expansión al resto del salón está en curso. En pruebas, la inferencia corre en unos 22 ms por cuadro a 5 FPS con dos cámaras.
Stack
- Python
- YOLO
- ByteTrack
- OpenCV
- FastAPI
- React
- PostgreSQL
- Docker