Annexe : AI NVR sur reComputer
Pourquoi cette annexe existe
Le cours principal en 10 sections suit une colonne d'apprentissage : fondations, méthodes, tâches, entraînement, déploiement, concepts système Jetson et perspectives sur les technologies de pointe. Cette annexe est le projet de synthèse qui vient après tout cela : une application complète de vision en edge que vous pouvez construire de bout en bout.
Le projet est un AI NVR (AI Network Video Recorder). Un NVR classique se contente d'enregistrer la vidéo. Un AI NVR y ajoute une analyse en temps réel : il détecte et suit des objets dans les flux en direct, déclenche des événements et conserve des enregistrements que les opérateurs peuvent rechercher et consulter.

Ce guide pas à pas s'appuie sur le tutoriel du wiki de Seeed AI NVR with reServer Jetson. Le wiki a été rédigé et vérifié sous JetPack 6.0 avec un reServer Industrial J4012. Si vous utilisez la base plus récente JetPack 6.2.x de ce cours, le déroulement est identique, même si les versions des services et des images de conteneurs peuvent différer.
Ce que vous allez construire
À la fin de cette annexe, vous disposerez d'un AI NVR local fonctionnel qui :
- intègre une ou plusieurs caméras IP via une interface web
- exécute la détection et le suivi DeepStream sur chaque flux
- superpose les résultats de détection sur la vidéo en direct
- enregistre les séquences avec un stockage configurable
- affiche le tout sur un mur vidéo dans le navigateur

Prérequis
- Un appareil Jetson Orin. Le wiki utilise le reServer Industrial J4012 (Orin NX 16GB), mais n'importe quel module Jetson Orin convient.
- JetPack 6.x flashé sur l'appareil. Pour le reServer, suivez reServer Industrial Getting Started.

- Au moins une caméra IP sur le même réseau (accessible en RTSP). Si vous n'avez pas encore de caméra, vous pouvez d'abord simuler des flux avec
sim_rtsp_stream.pyde la section 4.9. - Un accès réseau depuis votre PC vers l'appareil Jetson, ainsi qu'un navigateur.
Vue d'ensemble de l'architecture
Le projet est assemblé à partir des microservices de Jetson Platform Services (JPS) plutôt qu'écrit de zéro :
VST(Video Storage Toolkit) — intégration des caméras, enregistrement, gestion du stockage et interface webDeepStreamperception — détection d'objets (PeopleNet) et suivi multi-objetsRedis— stockage des métadonnées des événementsIngress(nginx) — route le trafic du navigateur vers le bon service
Chaque élément renvoie à une section antérieure de ce cours :
| Composant | Section du cours associée |
|---|---|
| Flux des caméras comme entrée vidéo | 4.2 Comment les Ordinateurs Représentent les Images |
| Détection et suivi comme tâches de vision | 4.5 Tâches de Vision par Ordinateur en Deep Learning |
| Modèle de détection pré-entraîné | 4.6 Entraîner et déployer votre propre modèle de vision |
| Moteur TensorRT pour le module cible | 4.7 Exportation de modèles et déploiement sur l'edge |
| Graphe de pipeline GStreamer/DeepStream | 4.8 Frameworks de pipeline de vision en temps réel |
| DeepStream et services Jetson | 4.9 DeepStream et Jetson |
Étape 1. Installer Jetson Platform Services
Connectez l'appareil Jetson au réseau, à une souris, un clavier et un moniteur (ou accédez-y en SSH), puis installez le paquet JPS :
sudo apt update
sudo apt install nvidia-jetson-servicesAprès l'installation, les microservices se trouvent sous /opt/nvidia/jetson/services/ :

Étape 2. Ajouter le routage Ingress pour l'interface de l'AI NVR
Créez le fichier /opt/nvidia/jetson/services/ingress/config/ai-nvr-nginx.conf avec le contenu suivant, afin que l'ingress route le frontend web de l'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";
}Étape 3. Choisir l'emplacement de stockage des enregistrements (facultatif)
Par défaut, VST stocke les enregistrements dans son propre répertoire. Pour les stocker ailleurs, modifiez /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
}Adaptez les chemins et le quota de stockage à l'organisation de votre disque.
Étape 4. Démarrer les services principaux
VST dépend des autres services, il faut donc les démarrer ensemble :
sudo systemctl start jetson-redis
sudo systemctl start jetson-ingress
sudo systemctl start jetson-vstLe démarrage de ces unités lance les conteneurs Docker correspondants :

Ouvrez http://<ip-of-jetson>:81/ dans un navigateur du réseau local pour vérifier que l'interface web de VST est en ligne :

Étape 5. Récupérer le workflow de référence de l'AI NVR
NVIDIA publie le workflow de référence de l'AI NVR sur NGC. Ouvrez la page de téléchargement du workflow de référence JPS, choisissez Download puis le téléchargement direct depuis le navigateur :

Décompressez-le ensuite sur l'appareil Jetson :
cd <path-of-download>
unzip files.zip
cd files
tar -xvf ai_nvr-1.1.0.tar.gz
cd ai_nvrÉtape 6. Configurer la sortie de DeepStream
Pour voir les résultats d'inférence en temps réel, le pipeline DeepStream doit émettre un flux RTSP. Dans <path-of-ai_nvr>/config/deepstream/pn26/service-maker/, modifiez le fichier de configuration correspondant à votre module — pour un Orin NX 16GB, il s'agit de ds-config-0_nx16.yaml — et vérifiez que le pipeline se termine par un sink RTSP sur le port 8555. La configuration complète figure dans le tutoriel du wiki.
Modifiez également le fichier compose correspondant à votre module (pour l'Orin NX 16GB : compose_nx16.yaml) et ajoutez la ligne suivante sous le service SDR, afin que les conteneurs DeepStream ne soient pas pris pour des caméras :
WDM_WL_NAME_IGNORE_REGEX: ".*deepstream.*"Étape 7. Lancer l'application AI NVR
Choisissez le fichier compose correspondant à votre module et démarrez la pile :
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-recreateL'application crée les conteneurs restants, y compris DeepStream :

Étape 8. Ajouter les caméras et ouvrir le mur vidéo
Ouvrez http://<ip-of-jetson>:30080/vst/ dans votre navigateur et ajoutez votre caméra IP : Sensor Management → Add device manually → Submit, en utilisant l'adresse RTSP de la caméra.

Ajoutez le flux de sortie de DeepStream comme seconde source, par exemple rtsp://<ip-of-jetson>:8555/ds-test. Deux précisions du wiki comptent ici :
- L'adresse du flux dépend de votre configuration DeepStream.
- Le nom de caméra de la source DeepStream doit contenir le mot
deepstream, sinon la superposition ne sera pas appliquée.
Enfin, allez sur Video Wall, sélectionnez toutes les sources et appuyez sur Start. Vous devriez voir le flux original de la caméra à côté du flux analysé avec les superpositions de détection.
Arrêter le projet
Arrêtez d'abord l'application AI NVR, puis les services de la plateforme :
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-vstUne alternative plus légère : construire le pipeline soi-même
Si vous préférez comprendre chaque composant plutôt qu'assembler des services prêts à l'emploi, la section 4.9 propose une version DIY plus modeste de la même idée : un pipeline DeepStream piloté par deepstream-app, alimenté par des flux RTSP simulés (sim_rtsp_stream.py), avec un chemin de métadonnées d'événements passant par un broker de messages. Les scripts se trouvent dans le dépôt du cours sous 4-Computer-Vision/4.9-DeepStream-and-Jetson/code/ai-nvr. C'est une bonne étape intermédiaire si le workflow de référence complet semble trop volumineux d'un coup.
Pour aller plus loin
- Remplacez ou réentraînez le modèle de détection avec vos propres classes, puis comparez la précision et le débit avec le modèle PeopleNet d'origine.
- Ajoutez une logique d'événements au-dessus des métadonnées : franchissement de ligne, intrusion de zone ou alertes de temps de présence.
- Combinez le pipeline avec un VLM pour des alertes au niveau de la scène, comme dans la démo Industrial Vision Monitoring de Seeed.
- Essayez une alternative open source telle que Frigate sur Jetson et comparez son architecture avec celle basée sur JPS.
Questions de réflexion
- Quelles parties de ce projet dépendent de la qualité du modèle, et lesquelles dépendent de la conception du système ?
- Dans un déploiement réel, qu'est-ce qui échouerait en premier : le modèle, le flux, le stockage ou le flux de travail de l'opérateur ?
- Que vous apporte l'architecture en microservices ici, et que vous coûte-t-elle ?
- Comment étendriez-vous cette installation en un pilote de production avec plusieurs appareils Jetson ?
Résumé
Cette annexe transforme la moitié déploiement du cours en un système concret : des caméras en entrée, l'analyse DeepStream au milieu, et en sortie des enregistrements, des événements et un mur vidéo. En la parcourant, on voit comment les concepts des sections 4.2 à 4.9 s'articulent dans une application edge réelle.