Bijlage: AI NVR op reComputer

Waarom deze bijlage bestaat

De hoofdcursus van tien secties volgt een duidelijke leerlijn: fundamenten, methoden, taken, training, implementatie, Jetson-systeemconcepten en een vooruitstrevende vooruitblik. Deze bijlage is het afsluitende project dat na al die onderdelen komt: een complete edge-visieapplicatie die je van begin tot eind zelf kunt bouwen.

Het project is een AI NVR (AI Network Video Recorder). Een traditionele NVR neemt alleen video op. Een AI NVR voegt daar realtime analyse aan toe: hij detecteert en volgt objecten in live streams, activeert events en bewaart opnames die operators kunnen doorzoeken en terugkijken.

AI NVR-overzicht

Deze walkthrough is gebaseerd op de wiki-tutorial AI NVR with reServer Jetson van Seeed. De wiki is geschreven en geverifieerd op JetPack 6.0 met een reServer Industrial J4012. Gebruik je de nieuwere JetPack 6.2.x-basis van deze cursus, dan is de workflow hetzelfde, al kunnen de serviceversies en containerimages verschillen.

Wat je gaat bouwen

Aan het einde van deze bijlage heb je een werkende lokale AI NVR die:

  • een of meer IP-camera's aanmeldt via een web-UI
  • DeepStream-detectie en -tracking draait op elke stream
  • detectieresultaten over de live video legt
  • beelden opneemt met configureerbare opslag
  • alles toont op een Video Wall in de browser

Video Wall met detectieresultaten

Vereisten

JetPack flashen op reServer

  • Minstens één IP-camera in hetzelfde netwerk (toegankelijk via RTSP). Heb je nog geen camera, dan kun je eerst streams simuleren met sim_rtsp_stream.py uit sectie 4.9.
  • Netwerktoegang vanaf je pc naar het Jetson-apparaat, plus een browser.

Architectuuroverzicht

Het project is samengesteld uit microservices van Jetson Platform Services (JPS) in plaats van vanaf nul geschreven:

  • VST (Video Storage Toolkit) — camera-onboarding, opname, opslagbeheer en de web-UI
  • DeepStream perception — objectdetectie (PeopleNet) en multi-object tracking
  • Redis — metadata-opslag voor events
  • Ingress (nginx) — routeert browserverkeer naar de juiste service

Elk onderdeel sluit aan bij een eerdere sectie van deze cursus:

ComponentGerelateerde cursussectie
Camerastreams als video-invoer4.2 Hoe Computers Beelden Representeren
Detectie en tracking als visietaken4.5 Computer Vision-Taken met Deep Learning
Voorgetraind detectiemodel4.6 Train en implementeer je eigen visiemodel
TensorRT-engine voor de doelmodule4.7 Modelexport en edge-implementatie
GStreamer/DeepStream-pipelinegrafiek4.8 Real-time vision pipeline-frameworks
DeepStream en Jetson-diensten4.9 DeepStream en Jetson

Stap 1. Installeer Jetson Platform Services

Sluit het Jetson-apparaat aan op het netwerk, muis, toetsenbord en monitor (of bereik het via SSH) en installeer daarna het JPS-pakket:

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

Na installatie staan de microservices onder /opt/nvidia/jetson/services/:

JPS-servicesmap

Stap 2. Voeg ingress-routing toe voor de AI NVR-UI

Maak het bestand /opt/nvidia/jetson/services/ingress/config/ai-nvr-nginx.conf met de volgende inhoud, zodat de ingress het AI NVR-webfrontend routeert:

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

Stap 3. Kies de opslaglocatie voor opnames (optioneel)

Standaard slaat VST opnames op in zijn eigen map. Om ze elders op te slaan, bewerk je /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
}

Pas de paden en de opslagquota aan op jouw schijfindeling.

Stap 4. Start de kerndiensten

VST is afhankelijk van de andere diensten, dus start je ze samen:

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

Het starten van deze units brengt de bijbehorende Docker-containers omhoog:

Draaiende JPS-containers

Open http://<ip-of-jetson>:81/ in een browser op het lokale netwerk om te controleren of de VST-web-UI actief is:

VST-web-UI

Stap 5. Haal de AI NVR-referentieworkflow op

NVIDIA publiceert de AI NVR-referentieworkflow op NGC. Open de downloadpagina voor de JPS-referentieworkflow, kies Download en daarna directe browserdownload:

NGC-downloadpagina

Pak het daarna uit op het Jetson-apparaat:

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

Stap 6. Configureer de DeepStream-uitvoer

Om inferentieresultaten in realtime te zien, moet de DeepStream-pipeline een RTSP-stream uitvoeren. Bewerk in <path-of-ai_nvr>/config/deepstream/pn26/service-maker/ het configuratiebestand dat bij jouw module hoort — voor een Orin NX 16GB is dat ds-config-0_nx16.yaml — en zorg dat de pipeline eindigt met een RTSP-sink op poort 8555. De volledige configuratie staat in de wiki-tutorial.

Bewerk ook het compose-bestand dat bij jouw module hoort (voor Orin NX 16GB: compose_nx16.yaml) en voeg de volgende regel toe onder de SDR-service, zodat de DeepStream-containers niet als camera's worden opgepikt:

yaml
WDM_WL_NAME_IGNORE_REGEX: ".*deepstream.*"

Stap 7. Start de AI NVR-applicatie

Kies het compose-bestand voor jouw module en start de 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

De applicatie maakt de resterende containers aan, waaronder DeepStream:

AI NVR-containers

Stap 8. Voeg camera's toe en open de Video Wall

Open http://<ip-of-jetson>:30080/vst/ in je browser en voeg je IP-camera toe: Sensor ManagementAdd device manuallySubmit, met het RTSP-adres van de camera.

Sensor Management

Voeg de DeepStream-uitvoerstream toe als tweede bron, bijvoorbeeld rtsp://<ip-of-jetson>:8555/ds-test. Twee details uit de wiki zijn hier belangrijk:

  • Het streamadres hangt af van je DeepStream-configuratie.
  • De cameranaam van de DeepStream-bron moet het woord deepstream bevatten, anders wordt de overlay niet toegepast.

Ga tot slot naar Video Wall, selecteer alle bronnen en druk op Start. Je ziet dan de originele camerabeelden naast de geanalyseerde stream met detectie-overlays.

Het project stoppen

Breek eerst de AI NVR-applicatie af en stop daarna de platformdiensten:

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

Een lichter alternatief: bouw de pipeline zelf

Wil je elke component begrijpen in plaats van kant-en-klare services in elkaar te zetten, dan bevat sectie 4.9 een kleinere doe-het-zelfversie van hetzelfde idee: een DeepStream-pipeline aangestuurd door deepstream-app, gevoed door gesimuleerde RTSP-streams (sim_rtsp_stream.py), met een metadata-pad voor events via een message broker. De scripts staan in de cursusrepository onder 4-Computer-Vision/4.9-DeepStream-and-Jetson/code/ai-nvr. Het is een goede tussenstap als de volledige referentieworkflow te veel tegelijk voelt.

Verder gaan

  • Verwissel of hertrain het detectiemodel voor je eigen klassen en vergelijk daarna nauwkeurigheid en doorvoer met het standaard PeopleNet-model.
  • Voeg event-logica toe bovenop de metadata: lijnoverschrijding, regio-intrusie of verblijfsduurmeldingen.
  • Combineer de pipeline met een VLM voor alarmen op scèneniveau, zoals in Seeed's demo Industrial Vision Monitoring.
  • Probeer een open-source alternatief zoals Frigate on Jetson en vergelijk de architectuur ervan met de JPS-gebaseerde variant.

Reflectievragen

  1. Welke delen van dit project zijn afhankelijk van modelkwaliteit en welke van systeemontwerp?
  2. Wat zou in een echte implementatie als eerste falen: het model, de stream, de opslag of de operatorworkflow?
  3. Wat levert de microservice-architectuur je hier op, en wat kost het je?
  4. Hoe zou je deze opstelling uitbreiden tot een productiepilot met meerdere Jetson-apparaten?

Samenvatting

Deze bijlage maakt van het implementatiedeel van de cursus één concreet systeem: camera's erin, DeepStream-analyse in het midden, en opnames, events en een Video Wall eruit. Door het project te doorlopen zie je hoe de concepten uit 4.2 tot 4.9 samenkomen in een echte edge-applicatie.

Referenties