vss-deploy-detection-tracking-3d
NVIDIA/skills
マルチカメラによる3D検出および追跡を行うマイクロサービス「RTVI-CV-3D」をデプロイおよび運用し、サンプルデータセット、カスタム動画、およびRTSPストリームに対応します。
...すべて拡張します目的
RTVI-CV-3DマイクロサービスをMV3DT(MODE=mv3dt)として——カメラごとのDeepStream知覚機能に加え、複数台のキャリブレーション済みカメラによるBEVフュージョン機能——バンドルされたサンプルデータセット、カスタム動画、またはライブRTSP上で、フルウェアハウスエージェント/ LLM/VLMスタックを使用せずに、RTVI-CV-3DマイクロサービスをMV3DT(MODE=mv3dt)として展開・運用する。
手順
上から順に進めてください。「ルーティング」セクションのルーティングに関する質問(Q0~Q3)に答え、選択したパスに関するリファレンスに従ってください。詳細な手順はreferences/ディレクトリ内にあります(デプロイ、キャリブレーションチェーン、カメラ設定、検証、クリーンアップ、トラブルシューティング)。
例
- サンプルデータセットでマルチカメラ追跡を有効にします。
- こちらの動画
<path/to/videos>に RTVI-CV-3D をデプロイしてください。 - キャリブレーション後に、RTSPストリームでMV3DTを実行します。
VSS 検出・追跡のデプロイ — 3D (RTVI-CV-3D / MV3DT)
ウェアハウス・ブループリントから、RTVI-CV-3D マイクロサービスを MV3DT スタック(MODE=mv3dt)として起動します: カメラごとの DeepStream 知覚 (vss-rtvi-cv-mv3dt) + BEV フュージョン (vss-rtvi-cv-bev-fusion) + mosquitto MQTT バス + ブローカー + VST センサースタック — フル倉庫ブループリントに付属するエージェント/ フル倉庫ブループリントに付属するLLM/VLMスタックは含まれません。
実際のコンポーズ機構は、deploy/docker/industry-profiles/warehouse-operations/warehouse-mv3dt-app/ にあります。このスキルは、環境設定の上書き、キャリブレーションチェーン、および検証を駆動します。
ルーティング
ユーザーに最大4つの質問を行い、その後ディスパッチします。
Q0 — プロファイルのサイズ(オーバーレイの有無)
ユーザーが明示的に「最小構成」を要求しない限り、デフォルトは「拡張」とします。拡張構成では、ELK +vss-video-analytics-api-mv3dt+vss-kibana-initがデプロイされます-mv3dt+vss-import-calibration-output-mv3dt をMV3DT コアの上に展開します。これらは、VST ビデオウォールがバウンディングボックスのオーバーレイをレンダリングするために必要なものです。これらがなければ、ビデオウォールは動作しますが、オーバーレイのない生のストリームが表示されます。
| ユーザーの回答 | MINIMAL_PROFILE |
得られるもの | 選択すべき場合 |
|---|---|---|---|
| extended(デフォルト) | "" |
MV3DTコア + ELK + アナリティクスAPI + Kibana。VSTビデオウォールでオーバーレイ機能が動作します。完全なエンドツーエンド(e2e)体験をお求めの方に推奨されます。 | 「完全なエンドツーエンドの体験を希望する」、「バウンディングボックスを表示したい」、または特に指定がない場合 |
| 最小構成 | "true" |
MV3DTコアのみ。コンテナ数が約5つ減少。VSTでのオーバーレイ機能なし。メタデータは引き続きKafka/Redis上に保存されます。 | 「データだけが必要」、「エッジ/Thorホスト」、「最小限のフットプリント」 |
選択的ELKに関する注記:現在のコンポーズには、「最小構成+ELKのみ」という中間的な選択肢は存在しません。
${MINIMAL_PROFILE:+_extended}でゲート制御されたすべてのサービス(ES、Logstash、Kibana、video-analytics-api、kibana-init、import-calibration)が同時に起動します。MINIMAL_PROFILEが設定されている場合、bashの:+パラメータ展開により_extendedというサフィックスが生成されます。extendedを指定すると、ゲート設定文字列が、アクティブなコンポーズプロファイルが既に一致している単純なbp_wh_kafka_mv3dtに戻ります。完全な拡張バンドルを受け入れるか、最小構成のままにするかのいずれかです。
Q1 — データソース
ユーザーの最初のメッセージにデータソースが明示されていない場合は、これを尋ねてください。「deploy rtvi-cv-3d」のような単純なリクエストは、このMV3DTスキル(MODE=mv3dt)にルーティングされますが、
サンプルの存在を意味するものではありません。
- sample— バンドルされた4カメラの合成データセット(
warehouse-4cams-20mx20m-synthetic)。キャリブレーションはツリー内に同梱されており、AMCの実行は不要です。 - videos— ユーザーがローカルの動画ファイル(カメラ名にちなんで命名された任意の
*.mp4ファイル)を所有している場合。キャリブレーションが欠落している場合、スタンドアロンの AMC(auto_calibプロファイル)が実行されます。 - rtsp— ユーザーがライブRTSP URLを保有している場合。VIOS駆動のAMCによるキャリブレーションが行われます。最終的なデプロイには、それらのRTSP URLを含むセンサー情報ファイル(
camera_info.json)も必要です。
Q2 — キャリブレーションの適用範囲(サンプルについてはスキップ)
動画およびRTSPの場合、パーセプションコンテナが期待するマウントパスにキャリブレーションがすでにディスク上に存在するかどうかを確認します:
DATASET="${SAMPLE_VIDEO_DATASET:?}" # ユーザーのデータセットスラッグ;Q3を参照
CAL_DIR="${VSS_APPS_DIR}/industry-profiles/warehouse-operations/warehouse-mv3dt-app/calibration/sample-data/${DATASET}"
# 以下のいずれかを探す: calibration.json、および camInfo/*.yml または *.yaml で、
# ファイル名に 'cam_*' または 'Camera*' を含むもの(同梱のサンプルでは Camera*.yml が使用されていますが、AMC では
# cam_*.yaml が生成される場合があります — 必要に応じて検索範囲を広げてください)
test -f "${CAL_DIR}/calibration.json" \
&& ls "${CAL_DIR}/camInfo/"*.{yml,yaml} 2>/dev/null
ユーザーが自らキャリブレーションパスを指定した場合は、そのパスを検証してください。再計算は行わないでください。カメラ名の正規化および信頼できるカメラ数の検出については、configure-cameras.md を参照してください(calibration.json を解析します)。
Q3 — 検出器 + データセットのスラッグ(Q2がAMCをトリガーした場合のみ)
resnet(デフォルト、高速)またはtransformer(低速、オクルージョン下で性能が向上) — ステップ B で AMC の/v1/calibrate/API に渡されます(vss-generate-video-calibration/SKILL.md:48-62を参照)。SAMPLE_VIDEO_DATASETとして使用される、短いケバブケース形式のデータセットスラグ(例:customer-aisle-4cams)。これはキャリブレーションのマウントパスを指定し、.envに永続化されます。
ルーティングテーブル
| Q1 | Q2の結果 | パス |
|---|---|---|
サンプル |
(cal shipsはツリー内にあり、すでに正規化済み) | references/deploy-rtvi-cv-3d-stack.mdを直接参照 |
動画 |
cal あり | references/configure-cameras.md→references/deploy-rtvi-cv-3d-stack.md |
動画 |
cal 欠落 | references/calibration-workflow.md(動画モード) →references/configure-cameras.md→references/deploy-rtvi-cv-3d-stack.md |
rtsp |
cal あり | references/configure-cameras.md→references/deploy-rtvi-cv-3d-stack.md |
rtsp |
cal 欠落 | references/calibration-workflow.md(rtsp モード) →references/configure-cameras.md→references/deploy-rtvi-cv-3d-stack.md |
up -dの完了後、すべてのパスはreferences/verify-and-view.mdに収束します。references/troubleshooting.mdおよびreferences/teardown.mdはリンクされていますが、正常な処理経路からは外れています。
曖昧さ解消ルール。このスキルにおいて、「RTVI-CV-3D」は MV3DT マイクロサービスのデプロイを意味し、MODE=mv3dt を使用します。 ユーザーが完全な倉庫ブループリント、Sparse4D、MODE=3d、またはwarehouse-3d-app を要求した場合にのみ、../vss-deploy-profile/references/warehouse.mdへルーティングします。このスキルは、エージェントスタック/LLM/VLM を含まないMV3DT 専用です。
前提条件
1. リポジトリパス
ディスク上のvideo-search-and-summarization/ を特定します。すべての compose コマンドは から実行されます。不明な場合は、ユーザーに確認してください。
2. NGC CLI およびキー
$NGC_CLI_API_KEYが設定されており、nvidia/vss-core/*イメージへのアクセス権限が必要です。設定が欠落している場合は、vss-deploy-profile/references/ngc.md を参照してください。
ユーザーが以前に`ngc config set` を実行したにもかかわらず、このシェルで`$NGC_CLI_API_KEY`がエクスポートされていない場合、キーはすでにディスク上に存在します:
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"
キーの値がindustry-profiles/warehouse-operations/.env:164(NGC_CLI_API_KEY=...) にも設定されていることを確認してください。compose は起動時にシェルの環境変数ではなく、この場所からのみ値を読み取ります。
3.HARDWARE_PROFILEスラグ
MV3DTでサポートされているストリーム数の公開情報は、『Warehouseクイックスタートガイド』の「MV3DT Vision AIプロファイルのサポートされているデプロイメントオプション」に記載されています。以下のリストから、該当する
HARDWARE_PROFILEスラグを選択してください。
nvidia-smi --query-gpu=name --format=csv,noheader から選択してください:
| GPU名 | HARDWARE_PROFILE |
MV3DTでサポートされるストリーム数 |
|---|---|---|
| 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 |
ユーザーのGPUがここにリストされていない場合は、industry-profiles/warehouse-operations/.envで利用可能なHARDWARE_PROFILEの値を確認し、blueprint-configurator/blueprint_config.yml内に該当するプロファイルが存在することを確認してから使用してください。スラッグのみからストリーム数を推測しないでください。
GPUごとのMV3DTの上限は、デプロイ時に適用されます。 vss-configurator-mv3dtは、final_stream_count = min(NUM_STREAMS, max_streams_supported)を計算し、${VSS_DATA_DIR}/videos/${SAMPLE_VIDEO_DATASET}/に対してkeep_countファイル管理操作を適用します。これにより、final_stream_count 個の .mp4ファイルのみが残り(辞書順にソートされ、最後の N 個が保持されます)。 お使いの GPU の MV3DT がサポートするストリーム数(上記の表)がカメラの数より少ない場合、perception /mdx-raw/mdx-bevはサポートされているストリーム数で実行されます。サポートされるストリーム数が多い GPU を選択するか、または上限をユーザーに明示的に通知し、どのストリームが処理されるかをユーザーが把握できるようにしてください。
4. ディスク上のアプリデータ
VSS_DATA_DIR は、抽出されたvss-warehouse-app-dataディレクトリ(リポジトリとは別)を指す必要があります。 これをリポジトリの`deploy/docker/`ディレクトリに指定すると、デプロイが停止します。コンフィギュレータがデータセットを見つけられず、Redis がログファイルを開けず、Perception が「Created」の状態のままになります。デプロイ前にパスを確認してください。
デプロイ前の事前チェック:
DATA_DIR="${VSS_DATA_DIR:?VSS_DATA_DIR が .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} が存在しません"; exit 1; }
done
# サンプル/動画モードの場合 — videos ディレクトリが存在している必要があります
test -d "${DATA_DIR}/videos/${DATASET}" \
|| { echo "ERROR: ${DATA_DIR}/videos/${DATASET} が存在しません — スラグが間違っているか、app-data が抽出されていません"; exit 1; }
# 整合性チェック: 動画数はキャリブレーション数と一致している必要があります。
# 公開されているアプリデータのtarballの中には、データセット名から予想されるよりも
# 動画数が少ないサンプルデータセットが含まれていることが知られています。GPUのmv3dtキャパシティが
# すべての動画を処理できるほど十分に高い場合は、不足しているカメラを個別に確認・取得してください。
ls "${DATA_DIR}/videos/${DATASET}/"*.mp4 2>/dev/null | wc -l
# data_log/ 配下のサービスごとのサブディレクトリがすべて存在することを確認してください。kafka / elasticsearch /
# redis / postgres および動画分析 API のアップロードパス (`/web-api-app/files`)
# これらのバインドマウントに対しては、root 以外の UID で実行してください。書き込みアクセス権がない場合、デーモン
# またはキャリブレーション/画像インポートが権限エラーで失敗する可能性があります。
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"
# 特定のコンテナUIDにのみ書き込みアクセス権を付与 — スコープ指定のACLを使用し、777や
# chownは使用しない。UID(data-directory.md に基づく):postgres=70、redis=999、elasticsearch / VST /
# kafka=1000。 最初の呼び出しは既存のファイルを対象とし、2番目の呼び出しは *デフォルト* のACLを設定するため、
# デーモンが実行時に作成するファイルやディレクトリ(例:postgresのPGDATA)は、そのアクセス権を継承します。
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"
chmod 777ではなく、スコープ付き ACL を使用します。これにより、既知のコンテナ UID にのみアクセス権が付与されます。data_logを世界書き込み可能にしたり、chownを行ったりすることはありません(chown を行うと、PostgreSQL や Elasticsearch が初回起動時にディレクトリの所有権を再設定するため、動作しなくなる)。エージェント駆動型の実行や 共有ホストでは、この方法を優先してください。 標準的な../vss-deploy-profile/references/data-directory.mdには、広範囲なchmod -R 777およびコンテナごとの UID テーブルが記載されていますが、このスキルでは代わりにスコープ付き ACL を使用します。ホストの権限を変更する前に、ユーザーに確認を求めてください。POSIX-ACL ファイルシステム(ext4 / xfs — デフォルト)および
aclパッケージ(setfacl)が必要です。 デプロイ後も デーモンが権限エラーをログに記録し続ける場合は、その UID (docker inspect) を確認し、両方の呼び出しに--format '{{.Config.User}}' -m u:追加してください。:rwx を
app-data がまだ抽出されていない場合:ngc レジストリのリソース download-version "nvidia/vss-warehouse/vss-warehouse-app-data:" を使用してダウンロードし、tar -xvfを実行します(タグの特定および完全な手順については、references/deploy-rtvi-cv-3d-stack.md を参照してください)。
5. 事前チェック (システム)
nvidia-smi、NVIDIA Docker ランタイムが認識されていること(docker info | grep -i runtimes)、およびdocker run --rm --gpus all ubuntu:24.04 nvidia-smiのすべての項目が緑色であること。 ドライバー、カーネル、sysctl の完全なチェック内容はvss-deploy-profile/references/prerequisites.md に記載されています。
いずれかのチェックに失敗した場合は、修正してから続行してください。その状態でデプロイに進まないでください。
6. ブラウザからの到達可能性(クラウド/社内VPNホストのみ)
ユーザーがデプロイホストとは異なるネットワーク上のブラウザ(クラウドVM、企業VPN、SSHトンネル経由のセッションなど)からVSTビデオウォールを表示する場合、上流のファイアウォールルールによってVST WebRTC(stun.l.google.com:19302へのSTUN、およびメディア用のランダムなUDP)がブロックされる可能性があります。 症状と回避策については、references/verify-and-view.md#browser-reachability を参照してください。 また、一部のホストでは AMC マイクロサービスのデフォルトポート(TCP/8010)がブロックされる場合があります。ユーザーから「:5000での AMC UI は動作するが、データ呼び出しが失敗する」という報告があった場合は、異なるVSS_AUTO_CALIBRATION_PORT を指定して再試行してください。
トラブルシューティング
デプロイ、キャリブレーション、または検証のいずれかのステップで失敗した場合は、再試行する前に一旦停止し、失敗の原因を特定してください。以下の簡易チェックでは、MV3DTで最も一般的なエラーを網羅しています。 完全な診断コマンドと修正方法についてはreferences/troubleshooting.md を、AMC ワークフローの障害については../vss-generate-video-calibration/SKILL.md を、より広範なウェアハウス・スタックに関する問題については../vss-deploy-profile/references/warehouse-debug.md を参照してください。
| 症状 | 考えられる原因 | 最初の確認または修正 |
|---|---|---|
vss-rtvi-cv-bev-fusionの状態が正常でない、または/tmp/fusion_readyが存在しない |
ブローカーの準備が整っていない、MAX_EXPECTED_SENSORSの不一致、またはSTREAM_TYPEの不一致 |
broker-health-check、docker inspect --format '{{.State.Health.Status}}' vss-rtvi-cv-bev-fusion、およびmdx-raw/mdx-bev を確認してください。ストリーム数が異なる場合は、references/configure-cameras.mdを再実行してください |
Perception に「アクティブなソース:0」、FPS なし、または予想よりもカメラ数が少ないと表示される |
VSTセンサーの状態が古くなっている、データセットのスラッグが間違っている、キャリブレーションが欠落している、またはGPUごとのストリーム上限に達している | SAMPLE_VIDEO_DATASET、NUM_STREAMS、camInfo/、および VST センサーリストを確認してください。古いセンサーが残っている場合は、再デプロイする前にreferences/teardown.mdの手順に従ってください |
vss-rtvi-cv-mv3dt が MqttCommunicatorの「無効なノード」エラーまたはトラッカーの送信失敗により終了する |
動画、calibration.json、およびcamInfo/内のカメラ名が、Camera、Camera_01、... という命名規則と一致していない |
references/configure-cameras.mdのステップ 0 に従ってすべてのカメラ名を統一し、その後、古い VST 状態をクリアして再デプロイしてください |
| AMCプロジェクトの作成、アップロード、キャリブレーション、またはMV3DTのエクスポートに失敗する | この MV3DT デプロイパス外での AutoMagicCalib サービス/API の問題 | ../vss-generate-video-calibration/SKILL.mdを使用して AMC をデプロイ/デバッグし、エクスポートに成功した後、references/calibration-workflow.mdに戻ってください |
vss-behavior-analytics-mv3dt が、キャリブレーションスキーマの検証エラーにより再起動する |
AMCのエクスポートに、グループ、リージョン、またはプレイスのフィールドが空になっている |
references/calibration-workflow.mdのステップ 4a にあるプレースホルダーパッチを適用するか、エクスポート前に AMC でそれらのフィールドに入力してください |
拡張プロファイルにオーバーレイがなく、vss-import-calibration-output-mv3dt が「imageMetadata.json が見つかりません」とログに出力される |
AMC MV3DT エクスポートでimages/Top.pngおよびimages/imageMetadata.json が生成されなかった |
references/calibration-workflow.mdのステップ 4b に従って両方のファイルを生成し、その後、ワンショットインポーターを再起動してください |
| 画像の取得、モデルの読み込み、または初回起動時のエンジン構築に失敗しました | NGC_CLI_API_KEY の欠落または有効期限切れ、VSS_DATA_DIR の設定誤り、BodyPose3DNet ファイルの欠落、または GPU のメモリ不足 (OOM) |
NGCの認証を再確認し、${VSS_DATA_DIR}/models/mv3dt/BodyPose3DNet/ を確認し、vss-rtvi-cv-mv3dtのログをtailし、GPUリソースが枯渇している場合はRT_CV_DEVICE_IDを解放または変更してください |
破壊的な復旧処理(docker compose down -v、data_logのクリア、VSTセンサー状態の削除、またはホストACLの変更)を行う前に、その影響を説明し、ユーザーから確認を得てください。状態リセットの変更を行う前に、失敗したコマンド、関連する.envの値、docker compose ps、および最後のコンテナログを記録してください。
全体構成
SKILL.md(このファイル — Q0/Q1/Q2/Q3のルーティング)
└─ キャリブレーションデータが欠落している場合 ─> calibration-workflow.md
│ └─ vss-generate-video-calibration へのチェーン(デプロイ + ドライブ API)
│ └─ /v1/result/{project_id}/mv3dt_result?result_type=amc を取得(リファイメントが有効な場合は vggt も取得)
│ └─ キャリブレーションファイルを warehouse-mv3dt-app/calibration/sample-data// に保存
├─> configure-cameras.md (カメラ名の正規化、NUM_STREAMS の同期、VST センサーのトリム)
└─> deploy-rtvi-cv-3d-stack.md(bp_wh_kafka_mv3dt および extended/minimal を使用してコンポーズアップ)
└─> verify-and-view.md (FPS、fusion_ready、mdx-bev、VST ビデオウォール + WebRTC チェック)
関連スキル
vss-generate-video-calibration— AMCスキル。AMCのデプロイ、RTSPキャプチャ、キャリブレーションAPI、およびこのスキルが利用する/v1/result/.../mv3dt_resultエクスポートフックを管理します。calibration-workflow.mdはこのスキルにチェーンされます。vss-deploy-profile— プロファイル横断型の包括スキル。ユーザーがMV3DTだけでなく、エージェント/LLM/VLMを含む完全なウェアハウス・ブループリントを必要とする場合は、代わりにこれを使用してください。vss-manage-video-io-storage— VIOS / VST API スキル。VST ビデオウォール(オーバーレイ可視化)や、configure-cameras.mdで参照されるセンサー管理に役立ちます。
このリポジトリの公式なウェアハウス・ブループリントのリファレンス(../vss-deploy-profile/references/warehouse.md)は、完全なウェアハウス・スタック内の 2D / 3D / MV3DT を網羅しています。このスキルは、エージェント/LLM/VLM レイヤーを省いた、MV3DT 専用のコンパニオンです。
---
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.
すべてのファイル
14件のファイルvss-deploy-detection-tracking-3dをインストール
スキルファイルをダウンロードし、.claude/skills/ ディレクトリに解凍してください。
ZIPをダウンロードリポジトリをクローンし、スキルファイルをプロジェクトにコピーしてください。
git clone https://github.com/NVIDIA/skills/tree/main/skills/vss-deploy-detection-tracking-3d # Copy SKILL.md to your .claude/skills/ directory
コピー





家
