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.

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

Vereisten
- Een Jetson Orin-apparaat. De wiki gebruikt de reServer Industrial J4012 (Orin NX 16GB), maar elk Jetson Orin-module werkt.
- JetPack 6.x geflasht op het apparaat. Volg voor reServer de handleiding reServer Industrial Getting Started.

- 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.pyuit 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-UIDeepStreamperception — objectdetectie (PeopleNet) en multi-object trackingRedis— metadata-opslag voor eventsIngress(nginx) — routeert browserverkeer naar de juiste service
Elk onderdeel sluit aan bij een eerdere sectie van deze cursus:
| Component | Gerelateerde cursussectie |
|---|---|
| Camerastreams als video-invoer | 4.2 Hoe Computers Beelden Representeren |
| Detectie en tracking als visietaken | 4.5 Computer Vision-Taken met Deep Learning |
| Voorgetraind detectiemodel | 4.6 Train en implementeer je eigen visiemodel |
| TensorRT-engine voor de doelmodule | 4.7 Modelexport en edge-implementatie |
| GStreamer/DeepStream-pipelinegrafiek | 4.8 Real-time vision pipeline-frameworks |
| DeepStream en Jetson-diensten | 4.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:
sudo apt update
sudo apt install nvidia-jetson-servicesNa installatie staan de microservices onder /opt/nvidia/jetson/services/:

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:
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:
{
"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:
sudo systemctl start jetson-redis
sudo systemctl start jetson-ingress
sudo systemctl start jetson-vstHet starten van deze units brengt de bijbehorende Docker-containers omhoog:

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

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:

Pak het daarna uit op het Jetson-apparaat:
cd <path-of-download>
unzip files.zip
cd files
tar -xvf ai_nvr-1.1.0.tar.gz
cd ai_nvrStap 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:
WDM_WL_NAME_IGNORE_REGEX: ".*deepstream.*"Stap 7. Start de AI NVR-applicatie
Kies het compose-bestand voor jouw module en start de 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-recreateDe applicatie maakt de resterende containers aan, waaronder DeepStream:

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 Management → Add device manually → Submit, met het RTSP-adres van de camera.

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
deepstreambevatten, 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:
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-vstEen 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
- Welke delen van dit project zijn afhankelijk van modelkwaliteit en welke van systeemontwerp?
- Wat zou in een echte implementatie als eerste falen: het model, de stream, de opslag of de operatorworkflow?
- Wat levert de microservice-architectuur je hier op, en wat kost het je?
- 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.