Trigger: Analítica de video¶
Este trigger vigila cámaras en vivo con Netsocs Vision, la analítica de video de Netsocs. Los modelos de detección corren en tus propios servidores, sin nube ni servicios externos. La automatización se inicia cuando se cumple una regla sobre una cámara: aparece una persona, un vehículo cruza una línea, alguien se queda demasiado tiempo en una zona, una mochila queda abandonada, la cámara se tapa, etc.
Cada cámara tiene sus propias zonas y reglas, y un mismo trigger puede vigilar varias cámaras a la vez.
¿Cuándo usarlo?¶
- Cuando la cámara no trae analítica propia, o la que trae no alcanza (por ejemplo, para contar personas, medir tiempos de permanencia o detectar objetos abandonados).
- Cuando querés la misma lógica en cámaras de distintas marcas: la detección la hace Netsocs, no la cámara.
- Cuando necesitás reglas más ricas que un simple "movimiento detectado": por tipo de objeto, zona, dirección, tiempo de permanencia u horario.
Si la cámara o el VMS ya generan el evento que necesitás (por ejemplo, una intrusión de una Hanwha o una Hikvision), es más barato usar Trigger: Event con ese evento.
Requisitos¶
- El servicio
automation-vision-workerdesplegado junto al backend de automatizaciones. Viene en elcompose.yamloficial. - Al menos un modelo Netsocs Vision instalado. Se instala desde el propio nodo (ver Paso 1).
- CPU y RAM suficientes para la cantidad de cámaras y el modelo elegido. Antes de activar muchas cámaras, consultá Analítica de video: consumo de recursos.
Cómo configurarlo¶
Paso 0) Agregar el nodo¶
En el canvas, abrí el selector de nodos, buscá Analítica de video (o "detección", "cruce de línea", "permanencia"...) y arrastrá el trigger. Hacé doble click sobre él para abrir su configuración.
Paso 1) Elegir el modelo¶
Seleccioná un modelo instalado. Si no hay ninguno, abrí Modelos Netsocs Vision:
- Catálogo: modelos listos para descargar con un click, verificados por checksum. Todos reconocen 80 clases comunes: persona, bicicleta, auto, moto, autobús, camión, mochila, bolso, maleta, perro, gato, etc. La descarga muestra su progreso.
- Subir: subí tu propio modelo de detección en formato ONNX, solo o dentro de un
.zip. Sirve para modelos entrenados con clases propias (casco, chaleco, placas...). Dentro del zip podés incluir:classes.txt, una clase por línea;- el
data.yamldel entrenamiento; - un
manifest.json.
- Instalados: renombrar o borrar modelos. Un modelo que está usando un trigger activo no se puede borrar.
| Modelo | Para qué |
|---|---|
| Netsocs Vision Nano | Muchas cámaras en un servidor modesto; objetos cercanos |
| Netsocs Vision Lite | Recomendado en CPU, uso general |
| Netsocs Vision Crowd | Multitudes: menos cajas duplicadas cuando las personas se superponen |
| Netsocs Vision Standard | Objetos chicos o lejanos |
| Netsocs Vision Crowd Pro | Multitudes y objetos chicos, mejor con GPU |
| Netsocs Vision Precision / Pro | Máxima precisión, con GPU |
El consumo de cada uno está en consumo de recursos. Las licencias de los componentes de terceros se consultan desde el enlace Licencias de terceros de esa misma ventana.
Seguridad: solo se aceptan modelos ONNX. Los archivos de PyTorch (
.pt,.pth,.pkl) se rechazan porque abrirlos puede ejecutar código.Licencias de modelos propios: si el modelo que subís tiene una licencia con obligaciones (por ejemplo AGPL-3.0), el sistema te pide aceptarla antes de instalarlo. Cumplir esa licencia queda a tu cargo.
Paso 2) Ajustes generales¶
| Campo | Por defecto | Para qué sirve |
|---|---|---|
| FPS | 5 | Imágenes por segundo que se analizan (de 0.2 a 15). Es lo que más impacta en el consumo de CPU |
| Confianza | 0.35 | Confianza mínima de una detección (0 a 1) para las reglas que no definen la suya |
| Cooldown | 10 s | Tiempo mínimo entre dos disparos de la misma regla, para evitar avalanchas de alertas |
| Incluir foto | Sí | Adjunta a cada evento una foto del momento |
| Dibujar cajas | Sí | Marca en la foto los objetos detectados (caja, tipo y confianza) |
| Dibujar zonas y líneas | Sí | Marca en la foto las zonas y líneas, resaltando la del evento |
| Zona horaria | — | Zona horaria de los horarios de las reglas |
Con las dos opciones de dibujo apagadas, la foto es la imagen limpia más una franja con el nombre de la regla y la hora.
Paso 3) Seleccionar las cámaras¶
Elegí una o varias cámaras del árbol de objetos. Para cada cámara se ve su estado en vivo: si está recibiendo imagen, los FPS reales, el tiempo de análisis y el último error.
Cada cámara tiene una pestaña con:
- Habilitada: desactiva la cámara sin perder su configuración.
- Stream:
sub(recomendado, más liviano) omain(más resolución, para objetos lejanos). - Copiar reglas y zonas a otras cámaras: copia la configuración a las demás cámaras.
Paso 4) Dibujar zonas y líneas¶
Sobre la imagen de la cámara podés dibujar:
- Zonas (polígonos): hacé click en cada vértice. Hacen falta al menos 3 puntos.
- Líneas (2 puntos): se usan para cruces y conteos. La flecha muestra el sentido del dibujo:
- Lado A es el que queda a la derecha de la flecha, mirando del primer punto al segundo.
- Lado B es el de la izquierda.
- Si dibujaste la línea al revés, el botón de intercambiar invierte los extremos.
- Zonas de exclusión: lo que caiga dentro se ignora (árboles que se mueven con el viento, pantallas, una calle que no interesa).
Los puntos se pueden arrastrar, y con doble click se borra uno. Las zonas se evalúan sobre los pies del objeto (el borde inferior central de su caja): una persona "está en la zona" cuando pisa la zona dibujada en el piso.
Paso 5) Crear las reglas¶
Agregá una o más reglas por cámara. Al elegir el tipo, el formulario muestra solo los campos que ese tipo usa.
| Regla | Dispara cuando... | Necesita |
|---|---|---|
| Detección | Aparece el tipo de objeto elegido (opcionalmente en una zona y con un mínimo de objetos) | — |
| Cruce de línea | Un objeto cruza la línea, en el sentido A→B, B→A o en ambos | Línea |
| Entrada a zona | Un objeto entra a la zona (o aparece dentro) | Zona |
| Salida de zona | Un objeto sale de la zona (o se pierde de vista dentro) | Zona |
| Permanencia en zona (al salir) | Un objeto, o un grupo, termina su visita a la zona. Informa cuánto duró, la foto de entrada, la de salida y recortes del objeto | Zona |
| Merodeo | Un objeto lleva en la zona más de X segundos (dispara mientras sigue dentro) | Zona |
| Aforo | Hay N objetos o más (o N o menos) en la zona durante X segundos | Zona |
| Zona vacía | No hay nadie en la zona durante X segundos (por ejemplo, un puesto de guardia vacío) | Zona |
| Contador de línea | Cuenta entradas (A→B) y salidas (B→A); avisa cada N cruces o con un reporte periódico | Línea |
| Objeto abandonado | Un objeto (por defecto mochila, bolso o maleta) queda quieto X segundos sin una persona cerca | — |
| Objeto retirado | Desaparece un objeto que estaba fijo en la escena (un TV, una notebook) | — |
| Sentido contrario | Un objeto se mueve en contra del sentido permitido | — |
| Colarse detrás de otro | Dos o más personas cruzan la línea en pocos segundos | Línea |
| Proximidad | Un objeto está cerca de otro de otro tipo (persona junto a un vehículo) | — |
| Velocidad | Un objeto supera una velocidad (en m/s si calibrás cuántos metros abarca el ancho de la imagen) | — |
| Cámara sin señal | La cámara deja de enviar imagen durante X segundos (y opcionalmente avisa al volver) | — |
| Sabotaje de cámara | La imagen queda negra, encandilada, congelada o desenfocada (lente tapada, rociada o girada) | — |
Permanencia en zona: modos¶
- Cada objeto: un evento por objeto cuando sale de la zona, con su duración.
- Grupo: un solo evento cuando la zona queda vacía. Cubre a todos los que estuvieron, desde que entró el primero hasta que salió el último. Es más estable cuando las personas se tapan entre sí.
También se configura la duración mínima (las visitas más cortas no se informan) y la cantidad máxima de recortes por evento.
Opciones comunes a todas las reglas¶
- Clases: qué objetos cuentan (
person,car,truck...). Vacío = cualquiera. - Confianza mínima, tamaño mínimo y máximo: filtran detecciones dudosas o lejanas.
- Frames de confirmación: cuántas imágenes seguidas debe cumplirse la condición. Evita falsas alarmas por un parpadeo del detector.
- Cooldown y alcance del cooldown: una alerta por regla cada X segundos, o una por cada objeto. Por ejemplo, en un cruce de línea cada persona que cruza genera su propio evento.
- Horario: ventanas horarias por día. Por ejemplo,
20:00–06:00solo de noche: si el fin es anterior al inicio, la ventana cruza la medianoche.
Paso 6) Guardar y activar¶
Guardá y activá la automatización. Si algo no es válido, la activación falla y el motivo aparece en el estado del trigger. Por ejemplo:
- el modelo no está instalado;
- una regla de zona no tiene zona asignada;
- una regla usa un tipo de objeto que el modelo no reconoce.
¿Qué devuelve?¶
Cada vez que una regla se cumple se inicia una ejecución. Estos campos se pueden usar en los nodos siguientes
como {{<clave_del_trigger>.<campo>}}:
| Campo | Descripción |
|---|---|
event_type |
Tipo de regla que disparó (line_cross, zone_visit, camera_offline, camera_online...) |
rule_id, rule_name |
La regla que se cumplió |
camera_id, camera_name |
La cámara |
class, confidence |
Tipo y confianza del objeto principal |
track_id |
Identificador del objeto mientras se lo sigue |
bbox |
Caja del objeto [x1, y1, x2, y2] en proporciones de la imagen (0 a 1) |
objects |
Todos los objetos involucrados |
region_id, region_name |
Zona o línea involucrada |
direction |
a_to_b o b_to_a en los cruces |
dwell_seconds |
Segundos en la zona (en Permanencia: cuánto duró la visita), sin señal o abandonado |
count, count_in, count_out |
Conteos (aforo, contador de línea, objetos de una visita en grupo) |
speed, speed_unit |
Velocidad medida (regla Velocidad) |
reason |
Detalle adicional: appeared, lost, group, report, dark, frozen, blurred, overexposed |
message |
Resumen legible, listo para un mensaje |
snapshot_url |
Foto del evento. En Permanencia, el frame de salida. Se puede enviar tal cual por Telegram, WhatsApp o email |
entry_snapshot_url |
Permanencia: foto del frame de entrada |
entered_at, exited_at |
Permanencia: momento de entrada y de salida |
crops |
Permanencia: recortes del objeto. Cada uno con url, kind (entry, best o exit), class, confidence y timestamp |
timestamp |
Fecha y hora del evento |
Si un mismo trigger tiene varias reglas, usá un Switch sobre {{<clave_del_trigger>.rule_id}} para que
cada una siga su propio camino.
Ejemplos¶
- Intrusión nocturna: Entrada a zona en el patio, clase
person, horario20:00–06:00→ Telegram consnapshot_url→ crear una alarma. - Tiempo de atención en mostrador: Permanencia en zona, modo Cada objeto, duración mínima 10 s → guardar
dwell_seconds,entered_atyexited_aten Google Sheets, con el primer recorte (crops) como evidencia. - Ocupación de una sala: Permanencia en zona, modo Grupo → registrar cada período de ocupación y
cuántas personas pasaron (
count). - Aforo de un local: Contador de línea en la puerta, reporte cada 15 minutos y reinicio diario → guardar
count_inycount_out. - Cola en la caja: Aforo con 5 personas o más durante 60 s, repitiendo cada 5 minutos → avisar al supervisor.
- Auto mal estacionado: Merodeo con clases
carytruck, 300 s, en la zona prohibida. - Mochila abandonada: Objeto abandonado con 60 s en el hall.
- Sabotaje: Sabotaje de cámara + Cámara sin señal (con aviso de vuelta) en todas las cámaras críticas.
- Elementos de protección personal: subí un modelo propio con las clases
helmetyno_helmety usá Detección con la claseno_helmeten la zona de obra.
Buenas prácticas¶
- Empezá con FPS 5 en cruces y entradas, y FPS 1–2 para permanencia, aforo y objetos abandonados. Así el consumo baja a la mitad o menos.
- Dibujá las zonas sobre el piso y las líneas atravesando el recorrido de los pies.
- Usá zonas de exclusión para lo que se mueve y no interesa, en lugar de subir la confianza.
- Si llegan alertas repetidas, subí el cooldown o cambiá su alcance a "por regla".
- Probá primero con una cámara y mirá el estado en vivo (FPS reales y tiempo de análisis) antes de agregar más.
Problemas frecuentes¶
| Síntoma | Qué revisar |
|---|---|
| model ... is not installed al activar | Instalá el modelo desde Modelos Netsocs Vision |
| El editor dice que el servicio de visión no responde | El servicio automation-vision-worker no está levantado |
| Cámara sin imagen (offline) | Que la cámara se vea en el dashboard: se usa el mismo video WebRTC que el reproductor |
Origen snapshot en lugar de video |
El WebRTC no conectó y se están usando fotos de respaldo (~1 por segundo). Revisá la red entre el servicio de visión y DriverHub |
| No detecta objetos chicos o lejanos | Usá Netsocs Vision Standard o Crowd Pro, o el stream main |
| Falsas alarmas | Zonas de exclusión, tamaño mínimo, frames de confirmación 3–5 |
| Los cruces no disparan | FPS de 5 o más, y que la línea atraviese el camino de los pies |
Una visita se parte en dos (reason: lost) |
La persona quedó tapada unos segundos. Usá el modo Grupo |
| El análisis va lento (FPS reales menores a los configurados) | El servidor no da abasto. Ver consumo de recursos |