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