Saltearse al contenido

Agente de detección YOLO11

Las detecciones YOLO11 provienen de argus-agent — un worker Python que se une a la sala LiveKit de la misión como participante bot, consume las pistas de vídeo del drone, ejecuta inferencia YOLO11 en cada frame y publica los cuadros delimitadores de vuelta a la sala como mensajes del canal de datos. La webapp no ejecuta YOLO en el navegador; solo consume la salida del agente.

Despacho del agente

Cuando una misión se activa con la detección por IA habilitada en su conjunto de funcionalidades, el agente se auto-despacha a la sala de la misión (ver salas de agentes). El agente:

  • Se suscribe a cada pista de vídeo de drone (VIDEO_DRONE_TRACK_ID).
  • Ejecuta YOLO11 por frame, típicamente 20-30 fps según la resolución.
  • Por cada objeto detectado, ejecuta BoT-SORT para tracking a corto plazo (se reinicia con oclusión) y DINOv2 + FAISS para re-ID persistente (estable a través de oclusiones).
  • Publica detecciones en el canal de datos con identidad de participante = identidad LiveKit del agente.

Lo que consume la webapp

LiveKitDetectionsService se suscribe a mensajes del canal de datos con la forma:

{
type: 'detections',
participantIdentity: string, // la pista de qué drone
detections: Array<{
left: number, // normalizado 0-1
top: number,
right: number,
bottom: number,
trackingId: string, // id BoT-SORT de corto plazo
persistentId: string, // re-ID DINOv2, formato 'p_abcd'
confidences: Record<string, number>, // clase -> confianza
}>
}

El tile de stream del drone lee este stream y renderiza cada detección como un cuadro delimitador etiquetado. Colores por defecto:

ClaseColor
personarojo
vehículonaranja
animalcian
otroverde

Puedes cambiar a modo de color único en el drawer de ajustes del drone → pestaña IA — coloreado automático vs. coloreado único (con un selector personalizado).

IDs de tracking persistente

El campo persistentId es lo que hace que las detecciones YOLO11 sean útiles más allá de un único frame:

  • Tracking ID (trackingId) se reinicia cada vez que se pierde un objeto (oclusión, salir del frame).
  • Persistent ID (persistentId, formato p_xxxx) usa embeddings de características DINOv2 + búsqueda de vecinos aproximados con FAISS para re-identificar el mismo objeto cuando reaparece — de modo que una persona que camina detrás de un árbol y sale por el otro lado conserva el mismo ID p_xxxx.

El overlay del tile de stream del drone muestra los IDs persistentes en el tooltip del cuadro delimitador cuando están disponibles — esto permite a los operadores correlacionar “esa es la misma persona que marqué hace dos minutos”.

Lo que la webapp NO expone

  • UI de filtro por clase — no puedes decir “mostrar solo vehículos” en la UI. El agente publica todas las clases; el navegador renderiza todas las clases. Planificado.
  • Umbral de confianza más allá del deslizador por drone — el deslizador 0-1 del drawer es el único control de umbral. El pre-filtro propio del agente no está expuesto.
  • Selección de modelo — el agente se despliega con un checkpoint fijo (YOLO11-L por defecto, YOLO11-SAR para organizaciones optimizadas para SAR). Cambiar el checkpoint requiere redespliegue del agente.

Coste / medición

El agente se ejecuta en instancias GPU (clase NVIDIA L4). Los minutos de inferencia se miden por operación y son visibles en Admin → Organización → Uso. Cuando la misión se completa, el agente se libera — sin coste de GPU en reposo.

Relacionado