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.

Übersicht über den AI NVR

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

Video Wall mit Erkennungsergebnissen

Voraussetzungen

JetPack auf dem reServer flashen

  • 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.py aus 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äche
  • DeepStream-Perzeption — Objekterkennung (PeopleNet) und Multi-Objekt-Tracking
  • Redis — Metadatenspeicher für Ereignisse
  • Ingress (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:

KomponenteZugehöriger Kursabschnitt
Kamera-Streams als Videoeingabe4.2 Wie Computer Bilder darstellen
Erkennung und Tracking als Vision-Aufgaben4.5 Computer-Vision-Aufgaben mit Deep Learning
Vortrainiertes Erkennungsmodell4.6 Trainieren und Bereitstellen Ihres eigenen Vision-Modells
TensorRT-Engine für das Zielmodul4.7 Modellexport und Edge-Bereitstellung
GStreamer/DeepStream-Pipeline-Graph4.8 Echtzeit-Vision-Pipeline-Frameworks
DeepStream und Jetson-Dienste4.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:

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

Nach der Installation befinden sich die Microservices unter /opt/nvidia/jetson/services/:

JPS-Diensteverzeichnis

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:

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";
}

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:

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:

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

Das Starten dieser Units zieht die entsprechenden Docker-Container hoch:

Laufende JPS-Container

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

VST-Web-Oberfläche

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:

NGC-Downloadseite

Entpacken Sie das Paket anschließend auf dem Jetson-Gerät:

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

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

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

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

Die Anwendung erstellt die übrigen Container, einschließlich DeepStream:

AI-NVR-Container

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 ManagementAdd device manuallySubmit, unter Verwendung der RTSP-Adresse der Kamera.

Sensor Management

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 deepstream enthalten, 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:

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

Eine 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

  1. Welche Teile dieses Projekts hängen von der Modellqualität ab und welche vom Systemdesign?
  2. Was würde in einer realen Bereitstellung zuerst versagen: das Modell, der Stream, der Speicher oder der Bedienerworkflow?
  3. Was bringt Ihnen die Microservice-Architektur hier ein, und was kostet sie?
  4. 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.

Referenzen