Apéndice: AI NVR en reComputer
Por qué existe este apéndice
El curso principal de 10 secciones sigue una columna de aprendizaje: fundamentos, métodos, tareas, entrenamiento, despliegue, conceptos de sistema Jetson y una mirada a la frontera. Este apéndice es el proyecto de cierre que llega después de todo ello: una aplicación completa de visión en el edge que puedes construir de principio a fin.
El proyecto es un AI NVR (grabador de vídeo en red con IA). Un NVR tradicional solo graba vídeo. Un AI NVR añade análisis en tiempo real encima: detecta y sigue objetos en streams en vivo, dispara eventos y conserva grabaciones que los operadores pueden buscar y revisar.

Este tutorial paso a paso se basa en el tutorial de la wiki de Seeed AI NVR with reServer Jetson. La wiki se escribió y verificó con JetPack 6.0 en un reServer Industrial J4012. Si usas la línea base más reciente de JetPack 6.2.x de este curso, el flujo de trabajo es el mismo, aunque las versiones de los servicios y las imágenes de los contenedores pueden diferir.
Qué vas a construir
Al final de este apéndice tendrás un AI NVR local funcional que:
- incorpora una o más cámaras IP a través de una interfaz web
- ejecuta detección y seguimiento con DeepStream sobre cada stream
- superpone los resultados de detección sobre el vídeo en vivo
- graba metraje con almacenamiento configurable
- muestra todo en un video wall en el navegador

Requisitos previos
- Un dispositivo Jetson Orin. La wiki usa el reServer Industrial J4012 (Orin NX 16GB), pero sirve cualquier módulo Jetson Orin.
- JetPack 6.x flasheado en el dispositivo. Para el reServer, sigue reServer Industrial Getting Started.

- Al menos una cámara IP en la misma red (accesible por RTSP). Si todavía no tienes una cámara, puedes simular streams primero con
sim_rtsp_stream.pyde la sección 4.9. - Acceso por red desde tu PC al dispositivo Jetson, además de un navegador.
Descripción general de la arquitectura
El proyecto se ensambla a partir de microservicios de Jetson Platform Services (JPS) en lugar de escribirse desde cero:
VST(Video Storage Toolkit) — incorporación de cámaras, grabación, gestión del almacenamiento y la interfaz web- Percepción
DeepStream— detección de objetos (PeopleNet) y seguimiento multiobjeto Redis— almacenamiento de metadatos de eventosIngress(nginx) — enruta el tráfico del navegador hacia el servicio correcto
Cada pieza corresponde a una sección anterior de este curso:
| Componente | Sección relacionada del curso |
|---|---|
| Streams de cámara como entrada de vídeo | 4.2 Cómo los Computadores Representan Imágenes |
| Detección y seguimiento como tareas de visión | 4.5 Tareas de Visión por Computadora con Deep Learning |
| Modelo de detección preentrenado | 4.6 Entrena y despliega tu propio modelo de visión |
| Motor TensorRT para el módulo objetivo | 4.7 Exportación de modelos y despliegue en el edge |
| Grafo de pipeline GStreamer/DeepStream | 4.8 Frameworks de pipeline de visión en tiempo real |
| DeepStream y servicios Jetson | 4.9 DeepStream y Jetson |
Paso 1. Instalar Jetson Platform Services
Conecta el dispositivo Jetson a la red, ratón, teclado y monitor (o accede a él por SSH), y luego instala el paquete de JPS:
sudo apt update
sudo apt install nvidia-jetson-servicesTras la instalación, los microservicios se encuentran en /opt/nvidia/jetson/services/:

Paso 2. Añadir enrutamiento de ingress para la interfaz del AI NVR
Crea el archivo /opt/nvidia/jetson/services/ingress/config/ai-nvr-nginx.conf con el siguiente contenido, para que el ingress enrute el frontend web del AI NVR:
location /emdx/ {
rewrite ^/emdx/?(.*)$ /$1 break;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log /var/log/nginx/access.log timed_combined;
proxy_pass http://emdx_api;
}
location /ws-emdx/ {
rewrite ^/ws-emdx/?(.*)$ /$1 break;
proxy_set_header Host $host;
proxy_pass http://emdx_websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}Paso 3. Elegir la ubicación de almacenamiento de las grabaciones (opcional)
Por defecto, VST guarda las grabaciones dentro de su propio directorio. Para guardarlas en otro lugar, edita /opt/nvidia/jetson/services/vst/config/vst_storage.json:
{
"data_path": "/home/seeed/VST/storage/data/",
"video_path": "/home/seeed/VST/storage/video/",
"total_video_storage_size_MB": 10000
}Ajusta las rutas y la cuota de almacenamiento según la distribución de tu disco.
Paso 4. Iniciar los servicios principales
VST depende de los demás servicios, así que inícialos juntos:
sudo systemctl start jetson-redis
sudo systemctl start jetson-ingress
sudo systemctl start jetson-vstIniciar estas unidades levanta los contenedores Docker correspondientes:

Abre http://<ip-of-jetson>:81/ en un navegador dentro de la red local para comprobar que la interfaz web de VST está activa:

Paso 5. Obtener el flujo de trabajo de referencia del AI NVR
NVIDIA publica el flujo de trabajo de referencia del AI NVR en NGC. Abre la página de descarga del flujo de trabajo de referencia de JPS, elige Download y luego la descarga directa en el navegador:

Después descomprímelo en el dispositivo Jetson:
cd <path-of-download>
unzip files.zip
cd files
tar -xvf ai_nvr-1.1.0.tar.gz
cd ai_nvrPaso 6. Configurar la salida de DeepStream
Para ver los resultados de la inferencia en tiempo real, el pipeline de DeepStream debe emitir un stream RTSP. En <path-of-ai_nvr>/config/deepstream/pn26/service-maker/, edita el archivo de configuración que corresponda a tu módulo —para un Orin NX 16GB es ds-config-0_nx16.yaml— y asegúrate de que el pipeline termina con un sink RTSP en el puerto 8555. La configuración completa está incluida en el tutorial de la wiki.
Edita también el archivo compose que corresponda a tu módulo (para Orin NX 16GB: compose_nx16.yaml) y añade la siguiente línea bajo el servicio SDR, para que los contenedores de DeepStream no se tomen como cámaras:
WDM_WL_NAME_IGNORE_REGEX: ".*deepstream.*"Paso 7. Lanzar la aplicación AI NVR
Elige el archivo compose de tu módulo e inicia la pila:
cd <path-of-download>/files/ai_nvr
# Orin AGX:
# sudo docker compose -f compose_agx.yaml up -d --force-recreate
# Orin NX 16GB:
sudo docker compose -f compose_nx16.yaml up -d --force-recreate
# Orin NX 8GB:
# sudo docker compose -f compose_nx8.yaml up -d --force-recreate
# Orin Nano:
# sudo docker compose -f compose_nano.yaml up -d --force-recreateLa aplicación crea los contenedores restantes, incluido DeepStream:

Paso 8. Añadir cámaras y abrir el video wall
Abre http://<ip-of-jetson>:30080/vst/ en tu navegador y añade tu cámara IP: Sensor Management → Add device manually → Submit, usando la dirección RTSP de la cámara.

Añade el stream de salida de DeepStream como segunda fuente, por ejemplo rtsp://<ip-of-jetson>:8555/ds-test. Aquí importan dos detalles de la wiki:
- La dirección del stream depende de tu configuración de DeepStream.
- El nombre de la cámara de la fuente de DeepStream debe contener la palabra
deepstream; de lo contrario, la superposición no se aplicará.
Por último, ve a Video Wall, selecciona todas las fuentes y pulsa Start. Deberías ver la imagen original de la cámara junto al stream analizado con las superposiciones de detección.
Detener el proyecto
Desmonta primero la aplicación AI NVR y luego detén los servicios de la plataforma:
cd <path-of-download>/files/ai_nvr
sudo docker compose -f compose_nx16.yaml down --remove-orphans
sudo systemctl stop jetson-redis
sudo systemctl stop jetson-ingress
sudo systemctl stop jetson-vstUna alternativa más ligera: construye el pipeline tú mismo
Si quieres entender cada componente en lugar de ensamblar servicios preconstruidos, la sección 4.9 incluye una versión DIY más pequeña de la misma idea: un pipeline de DeepStream manejado por deepstream-app, alimentado por streams RTSP simulados (sim_rtsp_stream.py), con una ruta de metadatos de eventos a través de un broker de mensajes. Los scripts están en el repositorio del curso, en 4-Computer-Vision/4.9-DeepStream-and-Jetson/code/ai-nvr. Es un buen paso intermedio si el flujo de trabajo de referencia completo te parece demasiado de golpe.
Para ir más allá
- Sustituye o reentrena el modelo de detección con tus propias clases y luego compara la precisión y el rendimiento frente al modelo PeopleNet de serie.
- Añade lógica de eventos sobre los metadatos: cruce de líneas, intrusión en regiones o alertas por tiempo de permanencia.
- Combina el pipeline con un VLM para alertas a nivel de escena, como en la demo Industrial Vision Monitoring de Seeed.
- Prueba una alternativa de código abierto como Frigate on Jetson y compara su arquitectura con la basada en JPS.
Preguntas de reflexión
- ¿Qué partes de este proyecto dependen de la calidad del modelo y cuáles dependen del diseño del sistema?
- En un despliegue real, ¿qué fallaría primero: el modelo, el stream, el almacenamiento o el flujo de trabajo del operador?
- ¿Qué te aporta aquí la arquitectura de microservicios y qué te cuesta?
- ¿Cómo extenderías esta configuración a un piloto de producción con varios dispositivos Jetson?
Resumen
Este apéndice convierte la mitad de despliegue del curso en un único sistema concreto: cámaras como entrada, análisis con DeepStream en el medio, y como salida grabación, eventos y un video wall. Recorrerlo muestra cómo los conceptos de 4.2 a 4.9 encajan en una aplicación real de edge.