El problema
La monitorización industrial necesita detectar la caída de un trabajador en el momento en que ocurre, sobre hardware que una planta pueda permitirse: una sola GPU de gama media, no un clúster. Lo difícil no es un modelo que clasifique caídas offline; es un pipeline que ingiere un stream en directo, mantiene la latencia bajo control y es honesto sobre qué es inferencia real y qué es un recurso de respaldo.
Enfoque y compromisos
Sentinel Vision es un único servicio FastAPI observable, no un notebook. Cada fotograma pasa por YOLO26-Pose → seguimiento de identidad con ByteTrack → máscaras de SAM 2.1 (solo se invoca en tracks nuevos, obsoletos o inciertos, para ahorrar la llamada costosa cuando nada cambia) → un transformer de esqueleto por persona que lee la acción sobre una ventana temporal.
Las decisiones de ingeniería buscan mantener honesto un sistema en vivo:
- Colas acotadas de último fotograma, para que la latencia no se desvíe bajo carga — el pipeline descarta fotogramas viejos en vez de retrasarse.
- Configuración de producción fail-closed que se niega a arrancar con
backends de demo, y un endpoint
/health/readyque expone sus degradaciones en lugar de ocultarlas. - Modelos como adaptadores intercambiables (PyTorch / ONNX / TensorRT), con un respaldo cinemático auditable para la cabeza temporal.
La cabeza temporal se entrena con el UR Fall Detection Dataset usando una partición por secuencias — las caídas de validación nunca se ven en entrenamiento, así que la puntuación significa algo.
Resultados
- Macro-F1 de validación = 0.90 sobre secuencias de caída reservadas — una partición honesta, no un 100% sintético.
- 27.98 FPS, latencia p95 49 ms extremo a extremo, ~1990 MiB de VRAM en una RTX 2070, con 0% de fotogramas descartados en el benchmark y todos los SLO de rendimiento, latencia y descartes superados.
- Observabilidad completa: métricas Prometheus, un dashboard en vivo de FPS/latencia y un stream de telemetría por WebSocket.
Lo que señalaría
Cada cifra de FPS y VRAM se mide en una GPU concreta y nombrada — nada se extrapola de una tarjeta mayor. El zero-copy real de decodificación a inferencia se acota con honestidad a una frontera DeepStream que el build portable no reclama; el readiness informa de la ruta de decodificación activa en vez de fingir que no pasa por PCIe.