Detección de Movimiento
Sistema híbrido de detección de movimiento de dos niveles que combina análisis de escena FFmpeg del lado del servidor con identificación opcional de objetos TensorFlow.js en el navegador.
Última actualización: 2025-02-18
Detección de Movimiento
El sistema de detección de movimiento de Certexi utiliza una arquitectura híbrida de dos niveles que combina detección confiable del lado del servidor con identificación opcional de objetos en el navegador.
Arquitectura
Cuadrícula de Vigilancia
La cuadrícula de cámaras 2x3 muestra feeds en vivo de las zonas del almacén con indicadores de estado para grabación, detección de movimiento y alertas.
6 feeds de cámara — haga clic en cualquier feed para expandir. Indicadores de detección de movimiento y alertas mostrados en tiempo real.
Nivel 1: Detección del Lado del Servidor
El motor de detección primario ejecuta FFmpeg con filtros de detección de escena:
ffmpeg -rtsp_transport tcp \
-i rtsp://camera-url \
-vf "select='gt(scene,0.3)',showinfo" \
-f null -
Cómo Funciona
- Se genera un proceso FFmpeg de larga duración por cámara
- El filtro
scenecalcula diferencias de píxeles entre cuadros (escala 0-1) - Cuando la diferencia supera el umbral de sensibilidad, se dispara un evento de movimiento
- El callback extrae un clip del búfer circular (pre/post grabación configurable)
- Los clips se suben opcionalmente a Nextcloud para almacenamiento de evidencia
Rendimiento
| Métrica | Valor |
|---|---|
| Latencia de detección | 200-500ms |
| CPU por cámara | 5-10% |
| Memoria por cámara | 50-100MB |
| Cámaras concurrentes | 10-20+ (servidor típico) |
| Tasa de falsos positivos | Baja (análisis a nivel de píxel) |
Auto-Recuperación
El singleton SimpleMotionDetector gestiona los procesos FFmpeg con reinicio automático en caso de falla. Si un proceso se cae, se regenera en segundos.
Nivel 2: Detección de Objetos en el Navegador
Una mejora opcional que ejecuta TensorFlow.js COCO-SSD en el navegador:
- Descarga el modelo (~6MB, almacenado en caché después de la primera carga)
- Ejecuta inferencia a 5 FPS sobre el elemento de video
- Detecta 80 clases de objetos (persona, auto, camión, etc.)
- Dibuja cuadros delimitadores con puntuaciones de confianza
- Se ejecuta completamente en el navegador — ningún cuadro se envía al servidor
Privacidad
La detección en el navegador preserva la privacidad. Los cuadros de video se analizan localmente usando aceleración WebGL y nunca salen del dispositivo.
Este nivel es puramente visual — toda la grabación de clips ocurre del lado del servidor. Los usuarios pueden deshabilitarlo sin afectar la funcionalidad de detección de movimiento.
API
Iniciar Detección
POST /api/iot/detection/motion-stream
Content-Type: application/json
{
"cctvId": 1,
"action": "start",
"sensitivity": 0.3,
"cooldownSeconds": 5,
"preRecordSeconds": 5,
"postRecordSeconds": 10,
"uploadToNextcloud": true
}
Consultar Estado
GET /api/iot/detection/motion-stream?cctvId=1
Retorna el estado de ejecución, conteo de cuadros y estadísticas de cuadros con movimiento.
Configuración
| Parámetro | Predeterminado | Descripción |
|---|---|---|
sensitivity | 0.3 | Umbral de movimiento (0-1, menor = más sensible) |
cooldownSeconds | 5 | Segundos mínimos entre clips |
preRecordSeconds | 5 | Segundos de búfer antes del movimiento |
postRecordSeconds | 10 | Continuar grabando después del movimiento |
uploadToNextcloud | true | Auto-subir clips al almacenamiento de evidencia |
Detección en Navegador
| Parámetro | Predeterminado | Descripción |
|---|---|---|
confidenceThreshold | 0.5 | Confianza mínima de detección |
maxDetections | 20 | Máximo de objetos por cuadro |
fps | 5 | Tasa de cuadros de detección |
Integración con Captura de Evidencia
Los clips de detección de movimiento se vinculan automáticamente a la cadena de evidencia:
- Movimiento detectado -> clip extraído del búfer circular
- Clip subido a Nextcloud con metadatos (ID de cámara, marca de tiempo, duración)
- Evento de detección creado en el libro mayor de eventos
- Hash de evidencia computado y anclado
- Clip disponible en la Máquina del Tiempo para reproducción
Guía de Ajustes
- Cámaras interiores: Sensibilidad 0.2-0.3 (menor para entornos estables)
- Cámaras exteriores: Sensibilidad 0.4-0.5 (mayor para filtrar viento/clima)
- Áreas de alto tráfico: Aumentar cooldown a 10-15 segundos
- Zonas críticas de seguridad: Reducir cooldown a 2-3 segundos