Inicio rápido
Levanta Heldar localmente, incorpora una cámara real y ejecuta el worker de IA de referencia.
Lo más rápido: Docker en una línea
Si tienes Docker, omite la compilación por completo — descarga las imágenes abiertas preconstruidas e inicia el stack:
curl -fsSL https://heldar.swmengappdev.workers.dev/install.sh | sh
Escribe ~/heldar/{compose.yml,mediamtx.yml,.env} e inicia MediaMTX + core + web; el dashboard
estará entonces en http://localhost:8080. (¿Ya clonaste el repositorio? docker compose -f deploy/compose.yml up -d
hace lo mismo.) Agrega el worker de IA de referencia con docker compose --profile ai up -d, actualiza con
docker compose pull. Para compilar desde el código fuente, continúa a continuación.
Requisitos previos
- Rust (mediante
rustup) — el proyecto sigue la última versión estable. - FFmpeg + ffprobe en el
PATH— grabar, recortar, capturar instantáneas y muestrear fotogramas requieren que estén disponibles. El servidor realiza una verificación previa de los binarios de medios al arrancar y falla rápidamente si no están presentes. - curl para las llamadas a la API que se muestran a continuación.
- Node.js para el dashboard React (
apps/web). - Python 3 para el worker de IA (
apps/ai).
Compilar y ejecutar
rustup update
cargo build --workspace
cp .env.example .env # defaults work out of the box; never commit .env
scripts/setup_mediamtx.sh # fetch the MediaMTX live-view gateway
scripts/run_stack.sh # MediaMTX + core (http://localhost:8000) + Vite dashboard
scripts/run_stack.sh inicia tres procesos: la pasarela de visualización en vivo MediaMTX,
el servidor Heldar Core en http://localhost:8000 y el servidor de desarrollo Vite para
el dashboard en http://localhost:5173.
Dos formas de ver el dashboard
-
Binario único (una sola URL). Compila el dashboard y apunta el servidor hacia él:
cd apps/web && npm install && npm run build # writes apps/web/distEstablece
HELDAR_WEB_DIR=./apps/web/disten.env. El core luego sirve la SPA enhttp://localhost:8000junto con la API. Las rutas/api/*,/media/*,/healthz,/readyzy/metricsmantienen la precedencia; todo lo demás recurre a la SPA para que los enlaces profundos con enrutamiento del cliente funcionen. Consulta Despliegue. -
Servidor de desarrollo Vite (recarga en caliente).
scripts/run_stack.shejecutanpm run devy sirve el dashboard enhttp://localhost:5173, comunicándose con la API en:8000. Usa esto mientras desarrollas el frontend.
Agregar una cámara
La URL RTSP se construye a partir de la plantilla del fabricante, por lo que solo necesitas proporcionar la dirección y las credenciales:
curl -X POST http://localhost:8000/api/v1/cameras -H 'content-type: application/json' -d '{
"id":"gate_a","name":"Gate A","vendor":"hikvision",
"address":"192.168.0.2","username":"admin","password":"YOUR_PASSWORD"}'
curl http://localhost:8000/api/v1/system # uptime, camera/segment counts
curl http://localhost:8000/api/v1/cameras/gate_a/timeline # recorded ranges
El grabador genera un proceso FFmpeg sin decodificación por cada cámara grabable y comienza a escribir segmentos. El indexador convierte los archivos de segmento cerrados en filas de línea de tiempo unos segundos después.
No realices ataques de fuerza bruta sobre las credenciales de las cámaras. Los dispositivos HikVision bloquean el acceso tras intentos fallidos.
Ejecutar el worker de IA
La percepción se ejecuta en un proceso worker separado que extrae fotogramas muestreados a través de HTTP. Primero habilita una tarea de detección en la cámara (mediante el dashboard o con la API):
curl -X POST http://localhost:8000/api/v1/cameras/gate_a/ai-tasks \
-H 'content-type: application/json' \
-d '{"task_type":"detection","fps":5,"width":1280,"enabled":true}'
Al habilitar la primera tarea se inicia un muestreador de fotogramas para esa cámara. Luego ejecuta el worker de referencia:
cd apps/ai
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
HELDAR_API=http://localhost:8000 python worker.py
El worker descubre las tareas, extrae el último fotograma de cada cámara, ejecuta su analizador
y publica las detecciones de vuelta en POST /api/v1/ai/events. Consulta
Construir un worker de IA para conocer el contrato completo. Para validar
todo el flujo desde el muestreador hasta el worker y los eventos sin modelo ni GPU, crea una
tarea con task_type: "motion" en su lugar — el worker de referencia incluye un analizador de
diferencia de fotogramas funcional para ello.
Configurar detección, zonas y alertas en la interfaz
Con una cámara y una tarea de IA en ejecución, usa el dashboard para:
- Detección — crea o ajusta tareas de IA por cámara (
task_type,fpssolicitado,widthde muestra y un blobconfigde forma libre que lee el worker). - Zonas — dibuja regiones poligonales en una cámara. Las coordenadas están normalizadas
entre 0 y 1, correspondiendo a los cuadros de detección. Establece
labelspara filtrar qué detecciones cuentan,dwell_secondspara activar una alerta de permanencia, y unaseverity. Las detecciones rastreadas que cruzan una zona generan eventos de zonaenter/exit/dwellcon un fotograma de evidencia. - Alertas — apunta el notificador de alertas a un webhook (
HELDAR_ALERT_WEBHOOK_URLo la interfaz). Los eventoswarningycritical, incluidos los eventos de zona y los eventos publicados por el worker, se envían a él.
Siguientes pasos
- Despliegue para la disposición de producción con binario único.
- Arquitectura para entender cómo encajan el kernel y las apps.