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.

Descripción general de AI NVR

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

Video wall con resultados de detección

Requisitos previos

Flashear JetPack en reServer

  • 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.py de 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 eventos
  • Ingress (nginx) — enruta el tráfico del navegador hacia el servicio correcto

Cada pieza corresponde a una sección anterior de este curso:

ComponenteSección relacionada del curso
Streams de cámara como entrada de vídeo4.2 Cómo los Computadores Representan Imágenes
Detección y seguimiento como tareas de visión4.5 Tareas de Visión por Computadora con Deep Learning
Modelo de detección preentrenado4.6 Entrena y despliega tu propio modelo de visión
Motor TensorRT para el módulo objetivo4.7 Exportación de modelos y despliegue en el edge
Grafo de pipeline GStreamer/DeepStream4.8 Frameworks de pipeline de visión en tiempo real
DeepStream y servicios Jetson4.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:

bash
sudo apt update
sudo apt install nvidia-jetson-services

Tras la instalación, los microservicios se encuentran en /opt/nvidia/jetson/services/:

Directorio de servicios de JPS

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:

nginx
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:

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:

bash
sudo systemctl start jetson-redis
sudo systemctl start jetson-ingress
sudo systemctl start jetson-vst

Iniciar estas unidades levanta los contenedores Docker correspondientes:

Contenedores de JPS en ejecución

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

Interfaz web de VST

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:

Página de descarga de NGC

Después descomprímelo en el dispositivo Jetson:

bash
cd <path-of-download>
unzip files.zip
cd files
tar -xvf ai_nvr-1.1.0.tar.gz
cd ai_nvr

Paso 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:

yaml
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:

bash
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-recreate

La aplicación crea los contenedores restantes, incluido DeepStream:

Contenedores de AI NVR

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 ManagementAdd device manuallySubmit, usando la dirección RTSP de la cámara.

Gestión de sensores

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:

bash
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-vst

Una 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

  1. ¿Qué partes de este proyecto dependen de la calidad del modelo y cuáles dependen del diseño del sistema?
  2. En un despliegue real, ¿qué fallaría primero: el modelo, el stream, el almacenamiento o el flujo de trabajo del operador?
  3. ¿Qué te aporta aquí la arquitectura de microservicios y qué te cuesta?
  4. ¿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.

Referencias