Skip to content

Vigilia Edge

Sistema de vigilancia inteligente que corre completamente en local — sin nube, sin latencia de red.


¿Qué hace?

El problema operativo es concreto: vigilancia local sin dependencia de nube, con latencia predecible frame-a-frame y sin comprometer privacidad. No enviar video a un servidor externo no es solo una decisión de privacidad — es también la única forma de garantizar latencia determinista cuando la red no es fiable.

  • Detecta y rastrea objetos en video en tiempo real mediante inferencia local (YOLOv11/v12) con backend acelerado seleccionable: TensorRT para máximo rendimiento o ONNX Runtime GPU como alternativa portable
  • Renderiza overlays de detección en una UI nativa de escritorio PySide6 (Qt 6)
  • Mueve frames de cámara a pantalla en menos de 2 frames (~80ms a 25fps) mediante un pipeline zero-copy
  • Gestiona todo el procesamiento a través de un núcleo Rust compilado como extensión nativa (PyO3)

Arquitectura de Cuatro Capas

┌─────────────────────────────────────────────────────────────┐
│  INTERACCIÓN — src/ui · src/audio · src/notifications       │
│  PySide6 + OpenGL · Audio disuasorio · Alertas Email/SMS   │
├─────────────────────────────────────────────────────────────┤
│  COGNICIÓN — vigilia_core (Rust / PyO3)                     │
│  Multi-tracker: BoT-SORT · Hybrid-SORT · ByteTrack          │
│  Kalman (nalgebra) · Geometría computacional · SAHI         │
├─────────────────────────────────────────────────────────────┤
│  PERCEPCIÓN — src/vision                                    │
│  YOLOv11/v12 · TensorRT + ONNX Runtime GPU · VPF · SAHI    │
├─────────────────────────────────────────────────────────────┤
│  INFRAESTRUCTURA — src/core                                 │
│  Shared Memory · Iceoryx IPC · Ring Buffers · Prometheus    │
│  Hydra + Pydantic V2 · Patrones RAII                        │
└─────────────────────────────────────────────────────────────┘

Stack Técnico

Capa Tecnología Rol Estado
Interfaz PySide6 + OpenGL UI nativa + renderizado GPU de video
Inferencia YOLOv11/v12 · TensorRT + ONNX Runtime GPU Detección con backend acelerado seleccionable Expandido
Cognición Rust (PyO3) + nalgebra Multi-tracker, Kalman, geometría computacional, SAHI Expandido
Captura VPF + NVIDIA Direct Capture Captura GPU-acelerada sin round-trip a CPU Nuevo
IPC Shared Memory + Iceoryx + Ring Buffers Transporte zero-copy con bus de metadatos dual Expandido
Observabilidad Prometheus + Loguru Métricas de producción + logging estructurado Nuevo
Configuración Hydra + Pydantic V2 Config jerárquica con validación de schemas
Respuesta Audio synthesis + Email/SMS Sistema activo de disuasión y notificación remota Nuevo

El reto de arquitectura

El desafío central es mover un tensor de video de ~6 MB por frame a través de múltiples procesos de inferencia sin copiarlo. El GIL de Python bloquea el paralelismo real entre hilos, y hacer inferencia en el hilo de UI de Qt lo congelaría.

La solución combina Multiprocessing (para romper el GIL), Shared Memory (para eliminar copias), Iceoryx (para metadatos de ultra-baja latencia) y un núcleo Rust que opera completamente fuera del GIL. El resultado: pipeline determinista de cámara a UI en producción.

Decisiones de arquitectura pragmática

Motivación Detalle
Paralelismo real entre decode e inferencia El núcleo Rust (PyO3) corre en threads nativos sin el Global Interpreter Lock — elimina el cuello de botella del GIL entre el decoder de frames y los workers de inferencia
Frames de 6 MB sin copia Los buffers de frames se asignan una sola vez en Shared Memory; Rust pasa punteros, nunca datos — elimina el overhead de serialización
Latencia predecible frame-a-frame Sin garbage collector ni GC pauses: la latencia de cámara a UI es determinista (~80ms a 25fps) — elimina las pausas impredecibles del runtime
Sin data races en el pipeline de video El compilador de Rust garantiza en tiempo de compilación que no hay data races ni dangling pointers — elimina una clase entera de bugs en el hot path
Multi-tracker configurable El núcleo Rust expone tres algoritmos de tracking (BoT-SORT, ByteTrack, Hybrid-SORT) seleccionables desde config.yaml sin recompilar — abstracción de alto rendimiento con zero overhead de despacho desde Python
Geometría computacional sin GIL Las validaciones de zonas de intrusión y cruce de líneas usan cálculos IoU vectorizados en Rust con nalgebra — sin lock de intérprete en el hot path de análisis frame a frame

Sistema de respuesta activa

Vigilia Edge no es un visualizador pasivo. Cuando el motor de reglas confirma una amenaza, el sistema activa dos mecanismos de respuesta:

  • Audio disuasorio: síntesis y reproducción de alarmas sonoras para disuadir activamente al intruso en el momento de la detección.
  • Notificaciones remotas: integración con Email y SMS para alertar al operador desde cualquier ubicación cuando la amenaza es confirmada.

v1.0 — En producción

Esta versión v1.0 ya se encuentra totalmente operativa para despliegues en estaciones de trabajo locales.

Leer architecture_overview en el showcase Ver repositorio vitrina en GitHub