Loading...
Loading...
Deploy and operate the RTVI-CV-3D stack (also known as MV3DT, Multi-View 3D Tracking, or RTVI-CV-MV3DT) — per-camera DeepStream perception plus BEV Fusion over multiple calibrated cameras. Use when the user says "deploy RTVI-CV-3D", "deploy rtvi-cv-3d", "deploy MV3DT", "deploy multi-view 3D tracking", "deploy rtvi-cv-mv3dt", "enable multi-camera tracking", "enable multi camera tracking", "set up multi-camera tracking", "multi-camera tracking", "run RTVI-CV-3D on my videos", "run MV3DT on my videos", "run RTVI-CV-3D / MV3DT on RTSP", "run on the sample dataset", "set up 3D tracking", or provides a 4-camera warehouse video/RTSP set. Routes between sample-data, custom-videos, and custom-RTSP flows; auto-chains to `vss-generate-video-calibration` when calibration data is missing.
npx skill4agent add nvidia/skills vss-deploy-detection-tracking-3dvss-rtvi-cv-mv3dtvss-rtvi-cv-bev-fusiondeploy/docker/industry-profiles/warehouse-operations/warehouse-mv3dt-app/vss-video-analytics-api-mv3dtvss-kibana-init-mv3dtvss-import-calibration-output-mv3dt| User answer | | 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 | | 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-gated service comes up together (ES, Logstash, Kibana, video-analytics-api, kibana-init, import-calibration).${MINIMAL_PROFILE:+_extended}'sbashparameter expansion produces the:+suffix when_extendedis set; extended switches the gating string back to plainMINIMAL_PROFILEwhich the active compose profile already matches. Either you accept the full extended bundle or you stay minimal.bp_wh_kafka_mv3dt
samplewarehouse-4cams-20mx20m-synthetic*.mp4auto_calibsamplevideosrtspDATASET="${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/nullconfigure-cameras.mdcalibration.jsonresnettransformer/v1/calibrate/<id>vss-generate-video-calibration/SKILL.md:48-62SAMPLE_VIDEO_DATASETcustomer-aisle-4cams.env| Q1 | Q2 result | Path |
|---|---|---|
| (cal ships in-tree) | |
| cal present | |
| cal missing | |
| cal present | |
| cal missing | |
references/verify-and-view.mdup -dreferences/troubleshooting.mdreferences/teardown.md../vss-deploy-profile/references/warehouse.mdvideo-search-and-summarization/<repo>/deploy/docker/$NGC_CLI_API_KEYnvidia/vss-core/*nvstaging/vss-core/*vss-deploy-profile/references/ngc.mdngc config set$NGC_CLI_API_KEYNGC_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"industry-profiles/warehouse-operations/.env:164NGC_CLI_API_KEY=...upHARDWARE_PROFILEThe canonicalkeys live inHARDWARE_PROFILE(lines 592–642). Use the slug from the table below — e.g. on an RTX A6000 (Ampere) host the value isindustry-profiles/warehouse-operations/blueprint-configurator/blueprint_config.yml.RTXA6000
nvidia-smi --query-gpu=name --format=csv,noheader| GPU name | | MV3DT |
|---|---|---|
| RTX PRO 6000 Blackwell | | 18 |
| H100 (NVL, SXM HBM3) | | 13 |
| RTX A6000 Ada Generation | | 6 |
| L40S | | 7 |
| L4 | | 2 |
| RTX A6000 (Ampere) | | 2 |
| IGX Thor | | 7 |
| DGX Spark | | 4 |
vss-configurator-mv3dtfinal_stream_count = min(NUM_STREAMS, max_streams_supported)keep_count${VSS_DATA_DIR}/videos/${SAMPLE_VIDEO_DATASET}/final_stream_count.mp4mv3dtmdx-rawmdx-bevVSS_DATA_DIRvss-warehouse-app-datadeploy/docker/CreatedDATA_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, then open perms.
# kafka / elasticsearch / redis run as different non-root UIDs against
# bind-mounted host paths — without 777 the daemons exit with
# "Permission denied" (kafka cluster_id), "AccessDeniedException" (ES),
# or "Can't open the log file" (redis). chmod 777 is the documented fix;
# do NOT recursive-chown — see data-directory.md for the per-UID rationale.
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"
chmod -R 777 "${DATA_DIR}/data_log"Easy miss, hard to recover from. The+mkdir -pstep onchmod -R 777is required, not optional. Newly extracted${DATA_DIR}/data_logtrees are owned by the extracting user (whoever ranvss-warehouse-app-data) and container UIDs won't match. The deeper per-container UID table lives intar -xvf; the same doc explains why recursive chown is the wrong fix.../vss-deploy-profile/references/data-directory.md
ngc registry resource download-version "nvidia/vss-warehouse/vss-warehouse-app-data:<version>"tar -xvfreferences/deploy-rtvi-cv-3d-stack.mdnvidia-smidocker info | grep -i runtimesdocker run --rm --gpus all ubuntu:24.04 nvidia-smivss-deploy-profile/references/prerequisites.mdstun.l.google.com:19302references/verify-and-view.md#browser-reachability:5000VSS_AUTO_CALIBRATION_PORTSKILL.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
│ └─ lands calibration files at warehouse-mv3dt-app/calibration/sample-data/<slug>/
├─> configure-cameras.md (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)vss-generate-video-calibrationauto_calib/v1/result/.../mv3dt_resultcalibration-workflow.mdvss-deploy-profilevss-manage-video-io-storageconfigure-cameras.md../vss-deploy-profile/references/warehouse.md