Option
HeimHeim Skill DevOps und CI/CD vss-deploy-detection-tracking-3d

vss-deploy-detection-tracking-3d

NVIDIA/skills NVIDIA/skills

Stellen Sie den Microservice „RTVI-CV-3D“ für die 3D-Erkennung und -Verfolgung mit mehreren Kameras bereit und betreiben Sie ihn; dabei werden Beispieldatensätze, benutzerdefinierte Videos und RTSP-Streams unterstützt.

...Alle erweitern
0
Zeit aktualisiert 28. September 2026

Zweck

Bereitstellung und Betrieb des RTVI-CV-3D-Mikroservices als MV3DT (MODE=mv3dt) – kameraspezifische DeepStream-Wahrnehmung plus BEV-Fusion über mehrere kalibrierte Kameras – auf dem mitgelieferten Beispieldatensatz, benutzerdefinierten Videos oder Live-RTSP, ohne den vollständigen Warehouse-Agenten / LLM- und VLM-Stacks.

Anleitung

Gehen Sie von oben nach unten vor: Beantworten Sie die Routing-Fragen (Q0–Q3) unter „Routing“ und folgen Sie anschließend der Anleitung für den gewählten Pfad. Detaillierte Schritt-für-Schritt-Anleitungen finden Sie im Verzeichnis „references/“ (Bereitstellung, Kalibrierungskette, Kamerakonfiguration, Verifizierung, Abbau, Fehlerbehebung).

Beispiele

  • Aktivieren Sie die Mehrkamera-Verfolgung auf dem Beispieldatensatz.
  • Stellen Sie RTVI-CV-3D auf meinen Videos hier bereit: <Pfad/zu/Videos>.
  • Führen Sie MV3DT nach der Kalibrierung auf RTSP-Streams aus.

VSS-Bereitstellung von Erkennung und Verfolgung – 3D (RTVI-CV-3D / MV3DT)

Starten Sie den RTVI-CV-3D-Mikroservice als MV3DT-Stack (MODE=mv3dt) aus dem Warehouse-Blueprint: DeepStream-Wahrnehmung pro Kamera (vss-rtvi-cv-mv3dt) + BEV-Fusion (vss-rtvi-cv-bev-fusion) + Mosquitto-MQTT-Bus + Broker + VST-Sensorsystem – ohne den Agent / LLM- / VLM-Stacks, die zum vollständigen Lager-Blueprint gehören.

Die eigentliche „Compose“-Infrastruktur befindet sich in `deploy/docker/industry-profiles/warehouse-operations/warehouse-mv3dt-app/`. Diese Funktion steuert die Umgehung von Umgebungsvariablen, die Kalibrierungskette und die Verifizierung.

Routing

Stellen Sie dem Benutzer höchstens vier Fragen und leiten Sie die Anfrage anschließend weiter.

F0 – Profilgröße (Overlays oder nicht)

Standardmäßig „erweitert “, es sei denn, der Benutzer fragt ausdrücklich nach „minimal“. Bei „erweitert“ werden ELK + vss-video-analytics-api-mv3dt + vss-kibana-init-mv3dt + vss-import-calibration-output-mv3dt zusätzlich zum MV3DT-Kern bereit – diese Komponenten benötigt die VST-Videowand, um Bounding-Box-Overlays darzustellen. Ohne sie funktioniert die Videowand zwar, zeigt jedoch Rohdatenströme ohne Overlays an.

Antwort des Benutzers MINIMAL_PROFILE Was Sie erhalten Wann sollten Sie
erweitert (Standard) "" MV3DT-Kern + ELK + Analytics-API + Kibana. Overlays funktionieren in der VST-Videowand. Empfohlen für ein umfassendes End-to-End-Erlebnis. „Ich möchte das vollständige End-to-End-Erlebnis“, „Ich möchte Begrenzungsrahmen sehen“ oder keine Angabe
Minimal „true“ Nur MV3DT-Core. ~5 Container weniger. Keine Overlays in VST. Metadaten weiterhin auf Kafka/Redis. „Ich brauche nur die Daten“, „Edge-/Thor-Host“, „minimaler Speicherbedarf“

Hinweis zu selektivem ELK: In der aktuellen Zusammensetzung gibt es keinen Mittelweg „minimal + nur ELK“. Jeder durch ${MINIMAL_PROFILE:+_extended} gesteuerte Dienst wird gemeinsam gestartet (ES, Logstash, Kibana, video-analytics-api, kibana-init, import-calibration). Die :+- Parameterauswertung von bash erzeugt das Suffix _extended, wenn MINIMAL_PROFILE gesetzt ist; „extended“ setzt die Gating-Zeichenkette wieder auf das einfache „bp_wh_kafka_mv3dt“ zurück, dem das aktive Compose-Profil bereits entspricht. Entweder akzeptierst du das vollständige erweiterte Bundle oder du bleibst bei der Minimalvariante.

Frage 1 – Datenquelle

Fragen Sie dies, sofern die Quelle nicht bereits in der ersten Nachricht des Benutzers explizit angegeben ist. Eine einfache Anfrage wie „deploy rtvi-cv-3d“ leitet zu diesem MV3DT-Skill weiter (MODE=mv3dt), impliziert jedoch kein Beispiel.

  • Beispiel — der gebündelte synthetische Datensatz mit 4 Kameras (warehouse-4cams-20mx20m-synthetic). Die Kalibrierung ist im Code enthalten; kein AMC-Lauf erforderlich.
  • videos — Der Nutzer verfügt über lokale Videodateien (beliebige *.mp4-Dateien, benannt nach den jeweiligen Kameras). Ein eigenständiger AMC-Lauf (Profil„auto_calib“ ) wird ausgeführt, falls die Kalibrierung fehlt.
  • rtsp – Der Benutzer verfügt über Live-RTSP-URLs. Kalibrierung über VIOS-gesteuertes AMC; für die endgültige Bereitstellung ist außerdem eine Sensor-Info-Datei (camera_info.json) mit diesen RTSP-URLs erforderlich.

Frage 2 – Kalibrierungsabdeckung (bei Beispiel überspringen)

Prüfen Sie bei Videos und RTSP, ob die Kalibrierung bereits auf der Festplatte unter dem vom Perception-Container erwarteten Einhängepfad vorhanden ist:

DATASET="${SAMPLE_VIDEO_DATASET:?}"          # der Slug des Datensatzes des Benutzers; siehe Q3
CAL_DIR="${VSS_APPS_DIR}/industry-profiles/warehouse-operations/warehouse-mv3dt-app/calibration/sample-data/${DATASET}"

# Suche nach EINEM der folgenden Dateien: „calibration.json“ sowie „camInfo/*.yml“ oder „*.yaml“ mit der Bezeichnung
# „cam_*“ oder „Camera*“ (das mitgelieferte Beispiel verwendet „Camera*.yml“, AMC kann
# „cam_*.yml“ erzeugen – den Suchbereich entsprechend erweitern)
test -f "${CAL_DIR}/calibration.json" \
  && ls "${CAL_DIR}/camInfo/"*.{yml,yaml} 2>/dev/null

Falls der Benutzer selbst einen Kalibrierungspfad angegeben hat, diesen Pfad stattdessen validieren – nicht neu berechnen. Siehe configure-cameras.md für die Normalisierung von Kameranamen und die Ermittlung der verbindlichen Kameranzahl (analysiert calibration.json).

Q3 – Detektor + Datensatz-Slug (nur wenn Q2 AMC auslöst)

  • resnet (Standard, schnell) oder transformer (langsamer, besser bei Okklusion) – wird in Schritt B an die AMC-API „/v1/calibrate/ “ übergeben (siehe vss-generate-video-calibration/SKILL.md:48-62).
  • Ein kurzer Datensatz-Slug in Kebab-Case-Schreibweise, der als SAMPLE_VIDEO_DATASET verwendet wird (z. B. customer-aisle-4cams). Dieser bestimmt den Pfad zur Kalibrierungshalterung und wird in .env gespeichert.

Routing-Tabelle

Q1 Q2-Ergebnis Pfad
Beispiel (berechnete Schiffe im Baum und bereits normalisiert) direkt auf„references/deploy-rtvi-cv-3d-stack.md“
Videos Kalibrierung vorhanden references/configure-cameras.md → references/deploy-rtvi-cv-3d-stack.md
Videos Kalibrierung fehlt references/calibration-workflow.md (Videomodus) → references/configure-cameras.md → references/deploy-rtvi-cv-3d-stack.md
RTSP Kalibrierung vorhanden references/configure-cameras.md → references/deploy-rtvi-cv-3d-stack.md
rtsp Kalibrierung fehlt references/calibration-workflow.md (RTSP-Modus) → references/configure-cameras.md → references/deploy-rtvi-cv-3d-stack.md

Alle Pfade führen zu „references/verify-and-view.md“, sobald „up -d“ abgeschlossen ist. „references/troubleshooting.md“ und „references/teardown.md“ sind verlinkt, liegen jedoch außerhalb des Happy Paths.

Regel zur Begriffsklärung: In diesem Skill bezeichnet „RTVI-CV-3D“ die Bereitstellung des MV3DT-Mikroservices und verwendet MODE=mv3dt. Leiten Sie nur dann zu „../vss-deploy-profile/references/warehouse.md“ weiter, wenn der Nutzer nach dem vollständigen Warehouse-Blueprint, „Sparse4D“, „MODE=3d“ oder „warehouse-3d-app“ fragt. Diese Skill ist ausschließlich für MV3DT ohne Agent-Stack / LLM / VLM vorgesehen.

Voraussetzungen

1. Repo-Pfad

Suchen Sie „video-search-and-summarization/“ auf der Festplatte. Alle „compose“-Befehle werden von „/deploy/docker/“ aus ausgeführt . Falls unbekannt, fragen Sie den Benutzer.

2. NGC-CLI + Schlüssel

$NGC_CLI_API_KEY muss gesetzt sein und Zugriff auf die Images „nvidia/vss-core/*“ haben. Informationen zur Einrichtung finden Sie in „vss-deploy-profile/references/ngc.md“, falls der Schlüssel fehlt.

Wenn der Benutzer zuvor „ngc config set “ ausgeführt hat, $NGC_CLI_API_KEY in dieser Shell jedoch nicht exportiert ist, befindet sich der Schlüssel bereits auf der Festplatte:

NGC_CLI_API_KEY=$(awk -F'= ' '/^apikey/{print $2}' ~/.ngc/config 2>/dev/null)
test -n "${NGC_CLI_API_KEY}" && echo "Schlüssel aus ~/.ngc/config übernommen"

Stellen Sie sicher, dass der Schlüsselwert auch in ` industry-profiles/warehouse-operations/.env:164 ` (NGC_CLI_API_KEY=...) steht – `compose` liest ihn beim Start nur von dort, nicht aus Ihrer Shell-Umgebung.

3. HARDWARE_PROFILE -Slug

Die Anzahl der öffentlich unterstützten MV3DT-Streams ist im Warehouse-Schnellstartleitfaden unter „MV3DT Vision AI Profile Supported Deployment Options“ aufgeführt. Verwenden Sie den entsprechenden HARDWARE_PROFILE -Slug aus der folgenden Liste.

Wählen Sie aus nvidia-smi --query-gpu=name --format=csv,noheader:

GPU-Name HARDWARE_PROFILE Von MV3DT unterstützte Streams
RTX PRO 6000 Blackwell RTXPRO6000BW 18
H100 (NVL, SXM HBM3) H100 13
L40S L40S 7
IGX Thor IGX-THOR 4
DGX Spark DGX-SPARK 4

Falls die GPU des Benutzers hier nicht aufgeführt ist, überprüfen Sie die Datei „industry-profiles/warehouse-operations/.env“ auf verfügbare HARDWARE_PROFILE-Werte und vergewissern Sie sich anschließend, dass das entsprechende Profil in der Datei „blueprint-configurator/blueprint_config.yml“ vorhanden ist, bevor Sie es verwenden. Leiten Sie die Anzahl der Streams nicht allein aus dem Slug ab.

Die MV3DT-Obergrenze pro GPU wird zum Zeitpunkt der Bereitstellung durchgesetzt. vss-configurator-mv3dt berechnet final_stream_count = min(NUM_STREAMS, max_streams_supported) und wendet eine „keep_count“-Dateiverwaltungsoperation auf ${VSS_DATA_DIR}/videos/${SAMPLE_VIDEO_DATASET}/ an, sodass nur final_stream_count .mp4 -Dateien übrig bleiben (lexikografisch sortiert, die letzten N werden beibehalten). Wenn die von der MV3DT Ihrer GPU unterstützte Stream-Anzahl (siehe Tabelle oben) unter Ihrer Kamera-Anzahl liegt, werden „perception“, „mdx-raw“ und „mdx-bev“ mit der unterstützten Stream-Anzahl ausgeführt. Wählen Sie entweder eine GPU mit einer höheren unterstützten Stream-Anzahl oder machen Sie dem Benutzer die Obergrenze explizit deutlich, damit er weiß, welche Streams verarbeitet werden.

4. App-Daten auf der Festplatte

VSS_DATA_DIR muss auf das extrahierte Verzeichnis „vss-warehouse-app-data“ verweisen (separat vom Repo). Wird der Pfad auf „deploy/docker/“ im Repo gesetzt, kommt die Bereitstellung zum Stillstand: Der Konfigurator kann den Datensatz nicht finden, Redis kann seine Protokolldatei nicht öffnen und „Perception“ bleibt im Status „Created“. Überprüfen Sie den Pfad vor der Bereitstellung.

Vorabprüfung vor der Bereitstellung:

DATA_DIR="${VSS_DATA_DIR:?VSS_DATA_DIR nicht in .env gesetzt}"
DATASET="${SAMPLE_VIDEO_DATASET:-warehouse-4cams-20mx20m-synthetic}"

for sub in videos models data_log; do
  test -d "${DATA_DIR}/${sub}" || { echo "FEHLER: ${DATA_DIR}/${sub} fehlt"; exit 1; }
done

# Für die Modi „sample“ und „videos“ – das Verzeichnis „videos“ muss vorhanden sein
test -d "${DATA_DIR}/videos/${DATASET}" \
  || { echo "FEHLER: ${DATA_DIR}/videos/${DATASET} fehlt – falscher Slug oder App-Daten wurden nicht extrahiert"; exit 1; }

# Plausibilitätsprüfung: Die Anzahl der Videos sollte mit der Anzahl der Kalibrierungsdaten übereinstimmen.
# Es ist bekannt, dass einige veröffentlichte App-Daten-Tarballs den Beispiel-Datensatz mit
# weniger Videos enthalten, als der Name des Datensatzes vermuten lässt – überprüfe dies und füge fehlende
# Kameras separat hinzu, sofern die mv3dt-Kapazität deiner GPU hoch genug ist, um sie alle zu nutzen.
ls "${DATA_DIR}/videos/${DATASET}/"*.mp4 2>/dev/null | wc -l

# Stelle sicher, dass jedes dienstbezogene Unterverzeichnis unter „data_log/“ vorhanden ist. Kafka / Elasticsearch /
# redis / postgres sowie der Upload-Pfad der Video-Analytics-API (`/web-api-app/files`)
# werden mit Nicht-Root-UIDs auf diesen Bind-Mounts ausgeführt. Ohne Schreibzugriff können die Daemons
# oder die Kalibrierung/der Bildimport aufgrund von Berechtigungsfehlern fehlschlagen.
mkdir -p \
  "${DATA_DIR}/data_log/analytics_cache" \
  "${DATA_DIR}/data_log/calibration_toolkit" \
  "${DATA_DIR}/data_log/elastic/data" \
  "${DATA_DIR}/data_log/elastic/logs" \
  "${DATA_DIR}/data_log/kafka" \
  "${DATA_DIR}/data_log/redis/data" \
  "${DATA_DIR}/data_log/redis/log" \
  "${DATA_DIR}/data_log/vss_video_analytics_api"

# Schreibzugriff nur für die spezifischen Container-UIDs gewähren – bereichsbezogene ACLs, NICHT 777 und
# NICHT chown. UIDs (gemäß data-directory.md): postgres=70, redis=999, elasticsearch / VST /
# kafka=1000. Der erste Aufruf betrifft vorhandene Dateien; der zweite legt *Standard*-ACLs fest, sodass
# Dateien/Verzeichnisse, die die Daemons zur Laufzeit erstellen (z. B. postgres PGDATA), die Zugriffsrechte erben.
ACL='u:70:rwx,u:999:rwx,u:1000:rwx'
setfacl -R    -m "$ACL" "${DATA_DIR}/data_log"
setfacl -R -d -m "$ACL" "${DATA_DIR}/data_log"

Bereichsbezogene ACLs statt chmod 777. Dies gewährt nur den bekannten Container-UIDs Zugriff – es macht „data_log“nicht für alle schreibbar und es wird kein chown (was Postgres / Elasticsearch beeinträchtigen würde, da diese ihre Verzeichnisse beim ersten Start neu zuweisen). Bevorzugen Sie diese Vorgehensweise für agentengesteuerte Ausführungen und gemeinsam genutzte Hosts. Das Referenzdokument ../vss-deploy-profile/references/data-directory.md beschreibt das pauschale `chmod -R 777 ` und die UID-Tabelle pro Container; diese Skill verwendet stattdessen das Äquivalent mit bereichsbezogenen ACLs. Frage den Benutzer vor der Änderung der Host-Berechtigungen um Bestätigung.

Erfordert ein POSIX-ACL-Dateisystem (ext4 / xfs – die Standardeinstellung) und das acl -Paket (setfacl). Falls ein Daemon nach der Bereitstellung weiterhin einen Berechtigungsfehler protokolliert, ermitteln Sie dessen UID (`docker inspect --format '{{.Config.User}}'`) und fügen Sie `-m u::rwx ` zu beiden Aufrufen hinzu.

Falls „app-data“ noch nicht extrahiert wurde: Laden Sie es über die NGC-Registry-Ressource herunter : ` download-version "nvidia/vss-warehouse/vss-warehouse-app-data: “ herunter und führen Sie „tar -xvf“ aus (siehe „references/deploy-rtvi-cv-3d-stack.md“ für die Tag-Ermittlung und die vollständigen Schritte).

5. Vorabprüfung (System)

nvidia-smi, NVIDIA-Docker-Laufzeitumgebung sichtbar (docker info | grep -i runtimes) und docker run --rm --gpus all ubuntu:24.04 – alle nvidia-smi-Werte im grünen Bereich. Die vollständigen Treiber-/Kernel-/sysctl-Prüfungen finden Sie in vss-deploy-profile/references/prerequisites.md.

Sollte eine Prüfung fehlschlagen, beheben Sie den Fehler, bevor Sie fortfahren – fahren Sie nicht mit der Bereitstellung fort.

6. Erreichbarkeit über den Browser (nur Cloud-/Unternehmens-VPN-Hosts)

Wenn der Benutzer die VST-Videowand über einen Browser in einem anderen Netzwerk als dem Bereitstellungshost (Cloud-VM, Unternehmens-VPN, SSH-Tunnel-Sitzung) betrachtet, können vorgelagerte Firewall-Regeln VST WebRTC blockieren (STUN an stun.l.google.com:19302 sowie zufällige UDP-Verbindungen für Medien). Siehe references/verify-and-view.md#browser-reachability für Symptome und Workarounds. Außerdem: Einige Hosts blockieren den Standardport des AMC-Mikroservices (TCP/8010); wenn der Benutzer meldet, dass die AMC-Benutzeroberfläche unter :5000 funktioniert, die Datenaufrufe jedoch fehlschlagen, versuchen Sie es erneut mit einem anderen VSS_AUTO_CALIBRATION_PORT.

Fehlerbehebung

Wenn ein Schritt bei der Bereitstellung, Kalibrierung oder Überprüfung fehlschlägt, brechen Sie den Vorgang ab und analysieren Sie die Fehlerursache, bevor Sie es erneut versuchen. Die folgenden Schnellprüfungen decken die häufigsten MV3DT-Fehler ab; Verwenden Sie „references/troubleshooting.md“ für vollständige Diagnosebefehle und Lösungen, „../vss-generate-video-calibration/SKILL.md“ für Fehler im AMC-Workflow und „../vss-deploy-profile/references/warehouse-debug.md“ für allgemeinere Probleme mit dem Warehouse-Stack.

Symptom Mögliche Ursache Erste Überprüfung oder Behebung
„vss-rtvi-cv-bev-fusion“ ist fehlerhaft oder „/tmp/fusion_ready“ fehlt Broker nicht bereit, Abweichung bei „MAX_EXPECTED_SENSORS“ oder Abweichung bei „STREAM_TYPE“ Überprüfen Sie „broker-health-check“, führen Sie „docker inspect --format '{{.State.Health.Status}}' vss-rtvi-cv-bev-fusion“ sowie „mdx-raw“ bzw. „mdx-bev“ aus; führen Sie anschließend „references/configure-cameras.md“ erneut aus, falls die Stream-Anzahlen voneinander abweichen
Perception zeigt „Aktive Quellen: 0“, keine FPS oder weniger Kameras als erwartet an Veralteter VST-Sensorzustand, falscher Datensatz-Slug, fehlende Kalibrierung oder Stream-Begrenzung pro GPU Überprüfen Sie SAMPLE_VIDEO_DATASET, NUM_STREAMS, camInfo/ und die VST-Sensorliste; sollten alte Sensoren vorhanden sein, befolgen Sie die An weisungen in references/teardown.md, bevor Sie die Bereitstellung erneut durchführen
vss-rtvi-cv-mv3dt wird mit der Meldung „invalid node“ des MqttCommunicators oder Fehlern beim Übermitteln von Tracker-Daten beendet Die Kameranamen in den Videos, in „calibration.json“ und in „camInfo/“ entsprechen nicht der Konvention „Camera“, „Camera_01“, … Normalisieren Sie alle Kameranamen gemäß „references/configure-cameras.md “, Schritt 0, löschen Sie anschließend den veralteten VST-Status und führen Sie eine erneute Bereitstellung durch
Die Erstellung, der Upload, die Kalibrierung oder der MV3DT-Export des AMC-Projekts schlägt fehl Problem mit dem AutoMagicCalib-Dienst/der API außerhalb dieses MV3DT-Bereitstellungspfads Verwenden Sie ../vss-generate-video-calibration/SKILL.md, um AMC bereitzustellen/zu debuggen, und kehren Sie anschließend nach erfolgreichem Export zu references/calibration-workflow.md zurück
„vss-behavior-analytics-mv3dt“ startet mit Validierungsfehlern des Kalibrierungsschemas neu Der AMC-Export enthält leere Felder für „Gruppe“, „Region“ oder „Ort“ Wenden Sie den Platzhalter-Patch in „references/calibration-workflow.md“, Schritt 4a, an oder füllen Sie diese Felder vor dem Export in AMC aus
Das erweiterte Profil enthält keine Overlays, und vss-import-calibration-output-mv3dt meldet, dass imageMetadata.json nicht gefunden wurde Der AMC-MV3DT-Export hat die Dateien „images/Top.png“ und „images/imageMetadata.json“ nicht erzeugt Erstellen Sie beide Dateien gemäß Schritt 4b in „references/calibration-workflow.md“ und starten Sie anschließend den One-Shot-Importer neu
Fehler beim Abrufen von Bildern, beim Laden des Modells oder beim Erstellen der Engine beim ersten Start Fehlender oder abgelaufener NGC_CLI_API_KEY, falsches VSS_DATA_DIR, fehlende BodyPose3DNet-Dateien oder GPU-OOM Überprüfen Sie die NGC-Authentifizierung erneut, vergewissern Sie sich, dass ${VSS_DATA_DIR}/models/mv3dt/BodyPose3DNet/ vorhanden ist, sehen Sie sich die vss-rtvi-cv-mv3dt- Protokolle an und geben Sie Speicher frei oder ändern Sie RT_CV_DEVICE_ID, falls die GPU ausgelastet ist

Erläutern Sie vor einer destruktiven Wiederherstellung (docker compose down -v, Löschen von data_log, Löschen des VST-Sensorstatus oder Ändern der Host-ACLs) die Auswirkungen und holen Sie die Bestätigung des Benutzers ein. Erfassen Sie den fehlgeschlagenen Befehl, relevante .env-Werte, docker compose ps und die letzten Container-Protokolle, bevor Sie Änderungen zum Zurücksetzen des Zustands vornehmen.

Wie alles zusammenpasst

SKILL.md (diese Datei – Q0/Q1/Q2/Q3-Routing)
  └─ falls „cal“ fehlt ─> calibration-workflow.md
  │                     └─ Verknüpfungen zu „vss-generate-video-calibration“ (Bereitstellung + Drive-API)
  │                     └─ ruft /v1/result/{project_id}/mv3dt_result?result_type=amc ab (plus vggt, wenn die Verfeinerung aktiviert ist)
  │                     └─ speichert Kalibrierungsdateien unter warehouse-mv3dt-app/calibration/sample-data//
  ├─> configure-cameras.md (Normalisierung der Kameranamen, Synchronisation von NUM_STREAMS, VST-Sensor-Trimmung)
  └─> deploy-rtvi-cv-3d-stack.md (Aufbau mit bp_wh_kafka_mv3dt + erweitert/minimal)
        └─> verify-and-view.md (FPS, „fusion_ready“, mdx-bev, VST-Videowand + WebRTC-Prüfungen)

Verwandte Skills

  • vss-generate-video-calibration – das AMC-Skill. Verantwortlich für die AMC-Bereitstellung, die RTSP-Erfassung, die Kalibrierungs-API und den Export-Hook /v1/result/.../mv3dt_result, den dieses Skill nutzt. calibration-workflow.md ist damit verknüpft.
  • vss-deploy-profile – übergreifendes Profil. Verwenden Sie dieses stattdessen, wenn der Benutzer den vollständigen Warehouse-Blueprint (mit Agenten / LLM / VLM) wünscht, nicht nur MV3DT.
  • vss-manage-video-io-storage — VIOS-/VST-API-Skill. Nützlich für die VST-Videowand (Overlay-Visualisierung) und für die Sensorverwaltung, auf die in ` configure-cameras.md` verwiesen wird.

Die maßgebliche Referenz zum „Warehouse-Blueprint“ im Repository unter ../vss-deploy-profile/references/warehouse.md deckt 2D / 3D / MV3DT innerhalb des gesamten Warehouse-Stacks ab – diese Skill ist die reine MV3DT-Variante, bei der die Agent-/LLM-/VLM-Ebene weggelassen wird.

Auf GitHub ansehen
---
name: vss-deploy-detection-tracking-3d
description: Deploy and operate the RTVI-CV-3D microservice for multi-camera 3D detection and tracking, supporting sample datasets, custom videos, and RTSP streams.
license: Apache-2.0
---

## Purpose

Deploy and operate the RTVI-CV-3D microservice as MV3DT (`MODE=mv3dt`) — per-camera DeepStream perception plus BEV Fusion over multiple calibrated cameras — on the bundled sample dataset, custom videos, or live RTSP, without the full warehouse agent / LLM / VLM stack.

## Instructions

Work top-to-bottom: answer the routing questions (Q0–Q3) under [Routing](#routing), then follow the reference for the chosen path. Detailed step-by-step procedures live in `references/` (deploy, calibration chain, camera configuration, verification, teardown, troubleshooting).

## Examples

- Enable multi-camera tracking on the sample dataset.
- Deploy RTVI-CV-3D on my videos here: `<path/to/videos>`.
- Run MV3DT on RTSP streams after calibration.

# VSS Deploy Detection & Tracking — 3D (RTVI-CV-3D / MV3DT)

Bring up the RTVI-CV-3D microservice as the MV3DT stack (`MODE=mv3dt`) from the warehouse blueprint: per-camera DeepStream perception (`vss-rtvi-cv-mv3dt`) + BEV Fusion (`vss-rtvi-cv-bev-fusion`) + mosquitto MQTT bus + broker + VST sensor stack — without the agent / LLM / VLM stack that comes with the full warehouse blueprint.

The actual compose machinery lives in `deploy/docker/industry-profiles/warehouse-operations/warehouse-mv3dt-app/`. This skill drives the env overrides, calibration chain, and verification.

## Routing

Ask the user **at most four questions**, then dispatch.

### Q0 — Profile size (overlays or not)

Default to **extended** unless the user explicitly asks for minimal. Extended deploys ELK + `vss-video-analytics-api-mv3dt` + `vss-kibana-init-mv3dt` + `vss-import-calibration-output-mv3dt` on top of MV3DT core — these are what the VST video wall needs to render bounding-box overlays. Without them, the video wall works but shows raw streams without overlays.

| User answer | `MINIMAL_PROFILE` | What you get | When to choose |
|---|---|---|---|
| **extended** (default) | `""` | MV3DT core + ELK + analytics API + Kibana. **Overlays work in VST video wall.** Recommended for a complete e2e experience. | "I want the full e2e experience", "I want to see bounding boxes", or no preference stated |
| **minimal** | `"true"` | MV3DT core only. ~5 fewer containers. **No overlays in VST.** Metadata still on Kafka/Redis. | "I only need the data", "edge / Thor host", "minimum footprint" |

> **Note on selective ELK:** there's no "minimal + ELK only" middle path in the current compose. Every `${MINIMAL_PROFILE:+_extended}`-gated service comes up together (ES, Logstash, Kibana, video-analytics-api, kibana-init, import-calibration). `bash`'s `:+` parameter expansion produces the `_extended` suffix when `MINIMAL_PROFILE` is set; extended switches the gating string back to plain `bp_wh_kafka_mv3dt` which the active compose profile already matches. Either you accept the full extended bundle or you stay minimal.

### Q1 — Data source

Ask this unless the source is explicit in the user's first message. A bare request
like "deploy rtvi-cv-3d" routes to this MV3DT skill (`MODE=mv3dt`), but does
**not** imply `sample`.

- **sample** — the bundled 4-camera synthetic dataset (`warehouse-4cams-20mx20m-synthetic`). Calibration ships in-tree; no AMC run needed.
- **videos** — the user has local video files (any `*.mp4` named after their cameras). Standalone AMC (`auto_calib` profile) will run if calibration is missing.
- **rtsp** — the user has live RTSP URLs. Calibration via VIOS-driven AMC; final deploy also needs a Sensor Info File (`camera_info.json`) with those RTSP URLs.

### Q2 — Calibration coverage (skip for `sample`)

For `videos` and `rtsp`, check whether calibration is already on disk at the mount path the perception container expects:

```bash
DATASET="${SAMPLE_VIDEO_DATASET:?}"          # the user's dataset slug; see Q3
CAL_DIR="${VSS_APPS_DIR}/industry-profiles/warehouse-operations/warehouse-mv3dt-app/calibration/sample-data/${DATASET}"

# Look for ANY of: calibration.json, plus camInfo/*.yml or *.yaml with either
# 'cam_*' or 'Camera*' naming (the shipped sample uses Camera*.yml, AMC may
# produce cam_*.yaml — broaden accordingly)
test -f "${CAL_DIR}/calibration.json" \
  && ls "${CAL_DIR}/camInfo/"*.{yml,yaml} 2>/dev/null
```

If the user supplied a calibration path themselves, validate that path instead — don't recompute. See `configure-cameras.md` for camera-name normalization and authoritative camera-count discovery (parses `calibration.json`).

### Q3 — Detector + dataset slug (only when Q2 triggers AMC)

- `resnet` (default, fast) or `transformer` (slower, better under occlusion) — passed to the AMC `/v1/calibrate/<id>` API at Step B (see `vss-generate-video-calibration/SKILL.md:48-62`).
- A short kebab-case dataset slug used as `SAMPLE_VIDEO_DATASET` (e.g. `customer-aisle-4cams`). This drives the calibration mount path and gets persisted in `.env`.

### Routing table

| Q1 | Q2 result | Path |
|---|---|---|
| `sample` | (cal ships in-tree and already normalized) | [`references/deploy-rtvi-cv-3d-stack.md`](references/deploy-rtvi-cv-3d-stack.md) directly |
| `videos` | cal present | [`references/configure-cameras.md`](references/configure-cameras.md) → [`references/deploy-rtvi-cv-3d-stack.md`](references/deploy-rtvi-cv-3d-stack.md) |
| `videos` | cal missing | [`references/calibration-workflow.md`](references/calibration-workflow.md) (videos mode) → [`references/configure-cameras.md`](references/configure-cameras.md) → [`references/deploy-rtvi-cv-3d-stack.md`](references/deploy-rtvi-cv-3d-stack.md) |
| `rtsp` | cal present | [`references/configure-cameras.md`](references/configure-cameras.md) → [`references/deploy-rtvi-cv-3d-stack.md`](references/deploy-rtvi-cv-3d-stack.md) |
| `rtsp` | cal missing | [`references/calibration-workflow.md`](references/calibration-workflow.md) (rtsp mode) → [`references/configure-cameras.md`](references/configure-cameras.md) → [`references/deploy-rtvi-cv-3d-stack.md`](references/deploy-rtvi-cv-3d-stack.md) |

Every path converges on [`references/verify-and-view.md`](references/verify-and-view.md) once `up -d` completes. [`references/troubleshooting.md`](references/troubleshooting.md) and [`references/teardown.md`](references/teardown.md) are linked but off the happy path.

**Disambiguation rule.** In this skill, "RTVI-CV-3D" means the MV3DT microservice deployment and uses `MODE=mv3dt`. Route to [`../vss-deploy-profile/references/warehouse.md`](../vss-deploy-profile/references/warehouse.md) only when the user asks for the full warehouse blueprint, Sparse4D, `MODE=3d`, or `warehouse-3d-app`. This skill is for **MV3DT only** without the agent stack / LLM / VLM.

## Prerequisites

### 1. Repo path

Locate `video-search-and-summarization/` on disk. All compose commands run from `<repo>/deploy/docker/`. If unknown, ask the user.

### 2. NGC CLI + key

`$NGC_CLI_API_KEY` must be set and must have access to `nvidia/vss-core/*` images. See `vss-deploy-profile/references/ngc.md` for setup if missing.

If the user previously ran `ngc config set` but `$NGC_CLI_API_KEY` isn't exported in this shell, the key is already on disk:

```bash
NGC_CLI_API_KEY=$(awk -F'= ' '/^apikey/{print $2}' ~/.ngc/config 2>/dev/null)
test -n "${NGC_CLI_API_KEY}" && echo "key sourced from ~/.ngc/config"
```

Make sure the key value also lands in `industry-profiles/warehouse-operations/.env:164` (`NGC_CLI_API_KEY=...`) — compose only reads it from there at `up` time, not from your shell env.

### 3. `HARDWARE_PROFILE` slug

> The public MV3DT supported stream counts are listed in the Warehouse Quickstart Guide under "MV3DT Vision AI Profile Supported Deployment Options." Use the matching `HARDWARE_PROFILE` slug below.

Pick from `nvidia-smi --query-gpu=name --format=csv,noheader`:

| GPU name | `HARDWARE_PROFILE` | MV3DT supported streams |
|---|---|---|
| RTX PRO 6000 Blackwell | `RTXPRO6000BW` | 18 |
| H100 (NVL, SXM HBM3) | `H100` | 13 |
| L40S | `L40S` | 7 |
| IGX Thor | `IGX-THOR` | 4 |
| DGX Spark | `DGX-SPARK` | 4 |

If the user's GPU is not listed here, check `industry-profiles/warehouse-operations/.env` for available `HARDWARE_PROFILE` values, then confirm the matching profile exists in `blueprint-configurator/blueprint_config.yml` before using it. Do not infer a stream count from the slug alone.

**The per-GPU MV3DT cap is enforced at deploy time.** `vss-configurator-mv3dt` computes `final_stream_count = min(NUM_STREAMS, max_streams_supported)` and applies a `keep_count` file-management op against `${VSS_DATA_DIR}/videos/${SAMPLE_VIDEO_DATASET}/` so only `final_stream_count` `.mp4` files remain (sorted lexicographically, last N kept). If your GPU's MV3DT supported stream count (above table) is below your camera count, perception / `mdx-raw` / `mdx-bev` run with the supported stream count. Either pick a GPU with a higher supported stream count or surface the cap explicitly to the user so they're aware which streams will be processed.

### 4. App data on disk

`VSS_DATA_DIR` must point at the **extracted `vss-warehouse-app-data` directory** (separate from the repo). Pointing it at the repo's `deploy/docker/` causes the deploy to stall: the configurator can't find the dataset, redis can't open its log file, and perception stays in `Created`. Verify the path before deploy.

Pre-flight check before deploy:

```bash
DATA_DIR="${VSS_DATA_DIR:?VSS_DATA_DIR not set in .env}"
DATASET="${SAMPLE_VIDEO_DATASET:-warehouse-4cams-20mx20m-synthetic}"

for sub in videos models data_log; do
  test -d "${DATA_DIR}/${sub}" || { echo "ERROR: ${DATA_DIR}/${sub} missing"; exit 1; }
done

# For sample / videos modes — videos directory must exist
test -d "${DATA_DIR}/videos/${DATASET}" \
  || { echo "ERROR: ${DATA_DIR}/videos/${DATASET} missing — wrong slug or app-data not extracted"; exit 1; }

# Sanity: video count should match calibration count.
# Some published app-data tarballs are known to ship the sample dataset with
# fewer videos than the dataset name implies — verify and source any missing
# cams separately if your GPU's mv3dt cap is high enough to use them all.
ls "${DATA_DIR}/videos/${DATASET}/"*.mp4 2>/dev/null | wc -l

# Ensure every per-service subdir under data_log/ exists. kafka / elasticsearch /
# redis / postgres and the video-analytics API upload path (`/web-api-app/files`)
# run as non-root UIDs against these bind mounts. Without write access the daemons
# or calibration/image import can fail with permission errors.
mkdir -p \
  "${DATA_DIR}/data_log/analytics_cache" \
  "${DATA_DIR}/data_log/calibration_toolkit" \
  "${DATA_DIR}/data_log/elastic/data" \
  "${DATA_DIR}/data_log/elastic/logs" \
  "${DATA_DIR}/data_log/kafka" \
  "${DATA_DIR}/data_log/redis/data" \
  "${DATA_DIR}/data_log/redis/log" \
  "${DATA_DIR}/data_log/vss_video_analytics_api"

# Grant write access to the specific container UIDs only — scoped ACLs, NOT 777 and
# NOT chown. UIDs (per data-directory.md): postgres=70, redis=999, elasticsearch / VST /
# kafka=1000. The first call covers existing files; the second sets *default* ACLs so
# files/dirs the daemons create at runtime (e.g. postgres PGDATA) inherit the access.
ACL='u:70:rwx,u:999:rwx,u:1000:rwx'
setfacl -R    -m "$ACL" "${DATA_DIR}/data_log"
setfacl -R -d -m "$ACL" "${DATA_DIR}/data_log"
```

> **Scoped ACLs, not `chmod 777`.** This grants only the known container UIDs access — it does
> **not** make `data_log` world-writable, and it does **not** `chown` (which would break postgres /
> Elasticsearch, since they re-own their dirs on first start). Prefer this for agent-driven runs and
> shared hosts. The canonical [`../vss-deploy-profile/references/data-directory.md`](../vss-deploy-profile/references/data-directory.md)
> documents the broad `chmod -R 777` and the per-container UID table; this skill uses the scoped-ACL
> equivalent instead. **Ask the user for confirmation before changing host permissions.**
>
> Requires a POSIX-ACL filesystem (ext4 / xfs — the default) and the `acl` package (`setfacl`). If a
> daemon still logs a permission error after deploy, find its UID
> (`docker inspect <container> --format '{{.Config.User}}'`) and add `-m u:<uid>:rwx` to both calls.

If app-data isn't extracted yet: download via `ngc registry resource download-version "nvidia/vss-warehouse/vss-warehouse-app-data:<version>"` and `tar -xvf` (see [`references/deploy-rtvi-cv-3d-stack.md`](references/deploy-rtvi-cv-3d-stack.md) for tag discovery and full steps).

### 5. Pre-flight (system)

`nvidia-smi`, NVIDIA Docker runtime visible (`docker info | grep -i runtimes`), and `docker run --rm --gpus all ubuntu:24.04 nvidia-smi` all green. Full driver / kernel / sysctl checks live in `vss-deploy-profile/references/prerequisites.md`.

If any check fails, fix before continuing — don't proceed to deploy.

### 6. Browser reachability (cloud / corp-VPN hosts only)

If the user will view the VST video wall through a browser on a different network than the deploy host (cloud VM, corp VPN, ssh-tunnelled session), upstream firewall rules may block VST WebRTC (STUN to `stun.l.google.com:19302`, plus random UDP for media). See [`references/verify-and-view.md#browser-reachability`](references/verify-and-view.md) for symptoms and workarounds. Also: some hosts block the AMC microservice's default port (TCP/8010); if the user reports the AMC UI on `:5000` works but its data calls fail, retry with a different `VSS_AUTO_CALIBRATION_PORT`.

## Troubleshooting

When any deploy, calibration, or verification step fails, stop and classify the failure before retrying. The quick checks below cover the most common MV3DT errors; use [`references/troubleshooting.md`](references/troubleshooting.md) for full diagnostic commands and fixes, [`../vss-generate-video-calibration/SKILL.md`](../vss-generate-video-calibration/SKILL.md) for AMC workflow failures, and [`../vss-deploy-profile/references/warehouse-debug.md`](../vss-deploy-profile/references/warehouse-debug.md) for broader warehouse-stack issues.

| Symptom | Likely cause | First check or fix |
|---|---|---|
| `vss-rtvi-cv-bev-fusion` is unhealthy or `/tmp/fusion_ready` is missing | Broker not ready, `MAX_EXPECTED_SENSORS` mismatch, or `STREAM_TYPE` mismatch | Check `broker-health-check`, `docker inspect --format '{{.State.Health.Status}}' vss-rtvi-cv-bev-fusion`, and `mdx-raw` / `mdx-bev`; then re-run [`references/configure-cameras.md`](references/configure-cameras.md) if stream counts differ |
| Perception shows `Active sources : 0`, no FPS, or fewer cameras than expected | Stale VST sensor state, wrong dataset slug, missing calibration, or per-GPU stream cap | Verify `SAMPLE_VIDEO_DATASET`, `NUM_STREAMS`, `camInfo/`, and the VST sensor list; if old sensors remain, follow [`references/teardown.md`](references/teardown.md) before redeploying |
| `vss-rtvi-cv-mv3dt` exits with `MqttCommunicator` "invalid node" or tracker submit failures | Camera names in videos, `calibration.json`, and `camInfo/` do not match the `Camera`, `Camera_01`, ... convention | Normalize all camera names together with [`references/configure-cameras.md`](references/configure-cameras.md) Step 0, then clear stale VST state and redeploy |
| AMC project creation, upload, calibration, or MV3DT export fails | AutoMagicCalib service/API issue outside this MV3DT deploy path | Use [`../vss-generate-video-calibration/SKILL.md`](../vss-generate-video-calibration/SKILL.md) to deploy/debug AMC, then return to [`references/calibration-workflow.md`](references/calibration-workflow.md) after export succeeds |
| `vss-behavior-analytics-mv3dt` restarts with calibration schema validation errors | AMC export has empty `group`, `region`, or `place` fields | Apply the placeholder patch in [`references/calibration-workflow.md`](references/calibration-workflow.md) Step 4a, or populate those fields in AMC before export |
| Extended profile has no overlays and `vss-import-calibration-output-mv3dt` logs `imageMetadata.json not found` | AMC MV3DT export did not produce `images/Top.png` and `images/imageMetadata.json` | Synthesize both files with [`references/calibration-workflow.md`](references/calibration-workflow.md) Step 4b, then restart the one-shot importer |
| Image pulls, model load, or first-start engine build fail | Missing / expired `NGC_CLI_API_KEY`, incorrect `VSS_DATA_DIR`, missing BodyPose3DNet files, or GPU OOM | Re-check NGC auth, confirm `${VSS_DATA_DIR}/models/mv3dt/BodyPose3DNet/`, tail `vss-rtvi-cv-mv3dt` logs, and free or change `RT_CV_DEVICE_ID` if the GPU is exhausted |

Before destructive recovery (`docker compose down -v`, clearing `data_log`, deleting VST sensor state, or changing host ACLs), explain the impact and get user confirmation. Capture the failing command, relevant `.env` values, `docker compose ps`, and the last container logs before making state-reset changes.

## How it fits together

```
SKILL.md (this file — Q0/Q1/Q2/Q3 routing)
  └─ if cal missing ─> calibration-workflow.md
  │                     └─ chains to vss-generate-video-calibration (deploy + drive API)
  │                     └─ fetches /v1/result/{project_id}/mv3dt_result?result_type=amc (plus vggt when refinement is enabled)
  │                     └─ lands calibration files at warehouse-mv3dt-app/calibration/sample-data/<slug>/
  ├─> configure-cameras.md (camera-name normalization, NUM_STREAMS sync, VST sensor trim)
  └─> deploy-rtvi-cv-3d-stack.md (compose up with bp_wh_kafka_mv3dt + extended/minimal)
        └─> verify-and-view.md (FPS, fusion_ready, mdx-bev, VST video wall + WebRTC checks)
```

## Related Skills

- [`vss-generate-video-calibration`](../vss-generate-video-calibration/SKILL.md) — the AMC skill. Owns AMC deployment, RTSP capture, calibration API, and the `/v1/result/.../mv3dt_result` export hook this skill consumes. `calibration-workflow.md` chains into it.
- [`vss-deploy-profile`](../vss-deploy-profile/SKILL.md) — cross-profile umbrella. Use that instead when the user wants the **full warehouse blueprint** (with agents / LLM / VLM), not just MV3DT.
- [`vss-manage-video-io-storage`](../vss-manage-video-io-storage/SKILL.md) — VIOS / VST API skill. Useful for the VST video wall (overlay viz) and for sensor management referenced in `configure-cameras.md`.

The repo's authoritative warehouse-blueprint reference at [`../vss-deploy-profile/references/warehouse.md`](../vss-deploy-profile/references/warehouse.md) covers 2D / 3D / MV3DT inside the full warehouse stack — this skill is the **MV3DT-only** companion that trims the agent / LLM / VLM layer.

vss-deploy-detection-tracking-3d installieren

Laden Sie die Skill-Dateien herunter und entpacken Sie sie in Ihr Verzeichnis „.claude/skills/“.

ZIP herunterladen

Klonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.

git clone https://github.com/NVIDIA/skills/tree/main/skills/vss-deploy-detection-tracking-3d # Copy SKILL.md to your .claude/skills/ directory

Kopieren Kopieren
Schnelle Einrichtung: Kopieren Sie den Skill-Ordner nach .claude/skills/ Claude erkennt den Skill automatisch und nutzt ihn.
Repository NVIDIA/skills

Ähnliche Skills

klingai-upgrade-migration
Zeit aktualisiert 3. Juli 2026
Verification &amp; Quality Assurance
Zeit aktualisiert 29. Juni 2026
base44-cli
Zeit aktualisiert 29. Juni 2026
Railway CLI Management
Zeit aktualisiert 2. Juli 2026
OR