Anhang: AI NVR auf reComputer
Warum es diesen Anhang gibt
Der Hauptkurs mit seinen 10 Abschnitten folgt einem Lernpfad: Grundlagen, Methoden, Aufgaben, Training, Bereitstellung, Jetson-Systemkonzepte und ein Ausblick auf aktuelle Entwicklungen. Dieser Anhang ist das Abschlussprojekt, das auf all dem aufbaut: eine vollständige Edge-Vision-Anwendung, die Sie von Anfang bis Ende selbst erstellen können.
Das Projekt ist ein AI NVR (AI Network Video Recorder). Ein herkömmlicher NVR zeichnet nur Video auf. Ein AI NVR ergänzt eine Echtzeitanalyse: Er erkennt und verfolgt Objekte in Live-Streams, löst Ereignisse aus und behält Aufnahmen, die Bediener durchsuchen und prüfen können.

Diese Anleitung basiert auf dem Seeed-Wiki-Tutorial AI NVR with reServer Jetson. Das Wiki wurde mit JetPack 6.0 auf einem reServer Industrial J4012 erstellt und verifiziert. Wenn Sie die neuere JetPack 6.2.x-Basis aus diesem Kurs verwenden, ist der Ablauf derselbe, auch wenn sich die Versionen der Dienste und Container-Images unterscheiden können.
Was Sie bauen werden
Am Ende dieses Anhangs haben Sie einen funktionierenden lokalen AI NVR, der:
- eine oder mehrere IP-Kameras über eine Web-Oberfläche einbindet
- DeepStream-Erkennung und -Tracking auf jedem Stream ausführt
- Erkennungsergebnisse in das Live-Video einblendet
- Aufnahmen mit konfigurierbarem Speicher aufzeichnet
- alles auf einer Video Wall im Browser anzeigt

Voraussetzungen
- Ein Jetson-Orin-Gerät. Das Wiki verwendet den reServer Industrial J4012 (Orin NX 16GB), aber jedes Jetson-Orin-Modul funktioniert.
- Auf dem Gerät installiertes JetPack 6.x. Für den reServer folgen Sie reServer Industrial Getting Started.

- Mindestens eine IP-Kamera im selben Netzwerk (per RTSP erreichbar). Falls Sie noch keine Kamera haben, können Sie Streams zunächst mit
sim_rtsp_stream.pyaus Abschnitt 4.9 simulieren. - Netzwerkzugriff von Ihrem PC auf das Jetson-Gerät sowie ein Browser.
Architekturüberblick
Das Projekt wird nicht von Grund auf neu geschrieben, sondern aus Microservices der Jetson Platform Services (JPS) zusammengesetzt:
VST(Video Storage Toolkit) — Kameraeinbindung, Aufzeichnung, Speicherverwaltung und Web-OberflächeDeepStream-Perzeption — Objekterkennung (PeopleNet) und Multi-Objekt-TrackingRedis— Metadatenspeicher für EreignisseIngress(nginx) — leitet den Browser-Traffic an den richtigen Dienst weiter
Jeder Baustein lässt sich auf einen früheren Abschnitt dieses Kurses zurückführen:
| Komponente | Zugehöriger Kursabschnitt |
|---|---|
| Kamera-Streams als Videoeingabe | 4.2 Wie Computer Bilder darstellen |
| Erkennung und Tracking als Vision-Aufgaben | 4.5 Computer-Vision-Aufgaben mit Deep Learning |
| Vortrainiertes Erkennungsmodell | 4.6 Trainieren und Bereitstellen Ihres eigenen Vision-Modells |
| TensorRT-Engine für das Zielmodul | 4.7 Modellexport und Edge-Bereitstellung |
| GStreamer/DeepStream-Pipeline-Graph | 4.8 Echtzeit-Vision-Pipeline-Frameworks |
| DeepStream und Jetson-Dienste | 4.9 DeepStream und Jetson |
Schritt 1. Jetson Platform Services installieren
Verbinden Sie das Jetson-Gerät mit Netzwerk, Maus, Tastatur und Monitor (oder greifen Sie per SSH darauf zu) und installieren Sie dann das JPS-Paket:
sudo apt update
sudo apt install nvidia-jetson-servicesNach der Installation befinden sich die Microservices unter /opt/nvidia/jetson/services/:

Schritt 2. Ingress-Routing für die AI-NVR-Oberfläche hinzufügen
Erstellen Sie die Datei /opt/nvidia/jetson/services/ingress/config/ai-nvr-nginx.conf mit dem folgenden Inhalt, damit der Ingress das AI-NVR-Web-Frontend routet:
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";
}Schritt 3. Speicherort für Aufnahmen wählen (optional)
Standardmäßig speichert VST Aufnahmen im eigenen Verzeichnis. Um sie an einem anderen Ort zu speichern, bearbeiten Sie /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
}Passen Sie die Pfade und das Speicherkontingent an Ihre Laufwerksaufteilung an.
Schritt 4. Kerndienste starten
VST hängt von den anderen Diensten ab, starten Sie sie daher gemeinsam:
sudo systemctl start jetson-redis
sudo systemctl start jetson-ingress
sudo systemctl start jetson-vstDas Starten dieser Units zieht die entsprechenden Docker-Container hoch:

Öffnen Sie http://<ip-of-jetson>:81/ in einem Browser im lokalen Netzwerk, um zu prüfen, dass die VST-Web-Oberfläche erreichbar ist:

Schritt 5. Den AI-NVR-Referenzworkflow beziehen
NVIDIA veröffentlicht den AI-NVR-Referenzworkflow auf NGC. Öffnen Sie die Downloadseite des JPS-Referenzworkflows, wählen Sie Download und dann den direkten Browser-Download:

Entpacken Sie das Paket anschließend auf dem Jetson-Gerät:
cd <path-of-download>
unzip files.zip
cd files
tar -xvf ai_nvr-1.1.0.tar.gz
cd ai_nvrSchritt 6. DeepStream-Ausgabe konfigurieren
Um die Inferenzergebnisse in Echtzeit zu sehen, sollte die DeepStream-Pipeline einen RTSP-Stream ausgeben. Bearbeiten Sie in <path-of-ai_nvr>/config/deepstream/pn26/service-maker/ die Konfigurationsdatei, die zu Ihrem Modul passt — für einen Orin NX 16GB ist das ds-config-0_nx16.yaml — und stellen Sie sicher, dass die Pipeline mit einem RTSP-Sink auf Port 8555 endet. Die vollständige Konfiguration finden Sie im Wiki-Tutorial.
Bearbeiten Sie außerdem die Compose-Datei, die zu Ihrem Modul passt (für Orin NX 16GB: compose_nx16.yaml), und fügen Sie die folgende Zeile unter dem SDR-Dienst ein, damit die DeepStream-Container nicht als Kameras erkannt werden:
WDM_WL_NAME_IGNORE_REGEX: ".*deepstream.*"Schritt 7. Die AI-NVR-Anwendung starten
Wählen Sie die Compose-Datei für Ihr Modul und starten Sie den Stack:
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-recreateDie Anwendung erstellt die übrigen Container, einschließlich DeepStream:

Schritt 8. Kameras hinzufügen und die Video Wall öffnen
Öffnen Sie http://<ip-of-jetson>:30080/vst/ im Browser und fügen Sie Ihre IP-Kamera hinzu: Sensor Management → Add device manually → Submit, unter Verwendung der RTSP-Adresse der Kamera.

Fügen Sie den DeepStream-Ausgabestream als zweite Quelle hinzu, zum Beispiel rtsp://<ip-of-jetson>:8555/ds-test. Zwei Details aus dem Wiki sind hier wichtig:
- Die Stream-Adresse hängt von Ihrer DeepStream-Konfiguration ab.
- Der Kameraname der DeepStream-Quelle muss das Wort
deepstreamenthalten, sonst wird das Overlay nicht angewendet.
Gehen Sie abschließend zu Video Wall, wählen Sie alle Quellen aus und drücken Sie Start. Sie sollten das originale Kamerabild neben dem analysierten Stream mit Erkennungs-Overlays sehen.
Projekt stoppen
Beenden Sie zuerst die AI-NVR-Anwendung und stoppen Sie dann die Plattformdienste:
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-vstEine leichtere Alternative: Die Pipeline selbst bauen
Wenn Sie jede Komponente verstehen möchten, statt fertige Dienste zusammenzusetzen, enthält Abschnitt 4.9 eine kleinere DIY-Version derselben Idee: eine DeepStream-Pipeline, die von deepstream-app gesteuert wird, gespeist aus simulierten RTSP-Streams (sim_rtsp_stream.py), mit einem Metadatenpfad für Ereignisse über einen Message Broker. Die Skripte liegen im Kurs-Repository unter 4-Computer-Vision/4.9-DeepStream-and-Jetson/code/ai-nvr. Das ist ein guter Zwischenschritt, falls der vollständige Referenzworkflow auf einmal zu viel erscheint.
Weiterführendes
- Tauschen Sie das Erkennungsmodell aus oder trainieren Sie es für eigene Klassen nach und vergleichen Sie dann Genauigkeit und Durchsatz mit dem Standard-PeopleNet-Modell.
- Ergänzen Sie Ereignislogik auf Basis der Metadaten: Linienüberquerung, Bereichsverletzung oder Aufenthaltsdauer-Alarme.
- Kombinieren Sie die Pipeline mit einem VLM für Alarme auf Szenenebene, wie in Seeeds Demo Industrial Vision Monitoring.
- Probieren Sie eine Open-Source-Alternative wie Frigate on Jetson und vergleichen Sie deren Architektur mit der JPS-basierten.
Reflexionsfragen
- Welche Teile dieses Projekts hängen von der Modellqualität ab und welche vom Systemdesign?
- Was würde in einer realen Bereitstellung zuerst versagen: das Modell, der Stream, der Speicher oder der Bedienerworkflow?
- Was bringt Ihnen die Microservice-Architektur hier ein, und was kostet sie?
- Wie würden Sie dieses Setup zu einem Produktionspiloten mit mehreren Jetson-Geräten erweitern?
Zusammenfassung
Dieser Anhang macht aus der Bereitstellungshälfte des Kurses ein konkretes System: Kameras hinein, DeepStream-Analyse in der Mitte, und Aufnahmen, Ereignisse sowie eine Video Wall heraus. Die Arbeit daran zeigt, wie die Konzepte aus 4.2 bis 4.9 in einer echten Edge-Anwendung zusammenwirken.