vss-deploy-detection-tracking-3d
NVIDIA/skills
Implantar e operar o microsserviço RTVI-CV-3D para detecção e rastreamento 3D com múltiplas câmeras, com suporte a conjuntos de dados de amostra, vídeos personalizados e fluxos RTSP.
...Expandir tudoObjetivo
Implantar e operar o microsserviço RTVI-CV-3D como MV3DT (MODE=mv3dt) — percepção DeepStream por câmera, além da fusão BEV em várias câmeras calibradas — no conjunto de dados de amostra incluído, em vídeos personalizados ou em RTSP ao vivo, sem a pilha completa do agente de armazenamento / LLM / VLM.
Instruções
Trabalhe de cima para baixo: responda às perguntas de roteamento (Q0–Q3) na seção “Routing” e, em seguida, siga a referência para o caminho escolhido. Os procedimentos detalhados passo a passo estão disponíveis em references/ (implantação, cadeia de calibração, configuração da câmera, verificação, desmontagem, solução de problemas).
Exemplos
- Habilite o rastreamento com múltiplas câmeras no conjunto de dados de amostra.
- Implemente o RTVI-CV-3D nos meus vídeos aqui:
<caminho/para/vídeos>. - Execute o MV3DT em fluxos RTSP após a calibração.
Implantação de detecção e rastreamento no VSS — 3D (RTVI-CV-3D / MV3DT)
Inicie o microsserviço RTVI-CV-3D como a pilha MV3DT (MODE=mv3dt) a partir do blueprint do warehouse: percepção DeepStream por câmera (vss-rtvi-cv-mv3dt) + BEV Fusion (vss-rtvi-cv-bev-fusion) + barramento MQTT mosquitto + broker + pilha de sensores VST — sem a pilha de agentes / LLM / VLM que vem com o blueprint completo do armazém.
A estrutura de composição propriamente dita está localizada em deploy/docker/industry-profiles/warehouse-operations/warehouse-mv3dt-app/. Essa habilidade controla as substituições de ambiente, a cadeia de calibração e a verificação.
Roteamento
Faça no máximo quatro perguntas ao usuário e, em seguida, encaminhe.
P0 — Tamanho do perfil (sobreposições ou não)
O padrão é “extended”, a menos que o usuário solicite explicitamente “minimal”. A configuração “extended” implementa ELK + vss-video-analytics-api-mv3dt + vss-kibana-init-mv3dt + vss-import-calibration-output-mv3dt sobre o núcleo do MV3DT — esses são os componentes necessários para que o video wall VST renderize sobreposições de caixas delimitadoras. Sem eles, o video wall funciona, mas exibe fluxos brutos sem sobreposições.
| Resposta do usuário | MINIMAL_PROFILE |
O que você obtém | Quando escolher |
|---|---|---|---|
| extended (padrão) | "" |
Núcleo MV3DT + ELK + API de análise + Kibana. As sobreposições funcionam no video wall VST. Recomendado para uma experiência completa de ponta a ponta. | “Quero a experiência completa de ponta a ponta”, “Quero ver caixas delimitadoras” ou nenhuma preferência indicada |
| mínimo | "true" |
Apenas núcleo MV3DT. Cerca de 5 contêineres a menos. Sem sobreposições no VST. Metadados ainda no Kafka/Redis. | “Só preciso dos dados”, “host de borda/Thor”, “ocupação mínima” |
Observação sobre o ELK seletivo: não há um caminho intermediário “mínimo + somente ELK” na composição atual. Todos os serviços controlados por
${MINIMAL_PROFILE:+_extended}são iniciados juntos (ES, Logstash, Kibana, video-analytics-api, kibana-init, import-calibration). A expansão do parâmetro:+do bashgera o sufixo_extendedquandoMINIMAL_PROFILEestá definido; o sufixo “extended” altera a string de restrição de volta paraosimplesbp_wh_kafka_mv3dt, com o qual o perfil de composição ativo já é compatível. Ou você aceita o pacote completo “extended” ou permanece no modo “minimal”.
P1 — Fonte de dados
Faça essa pergunta, a menos que a fonte esteja explícita na primeira mensagem do usuário. Uma solicitação simples
como “deploy rtvi-cv-3d” é direcionada para esta skill MV3DT (MODE=mv3dt), mas
não implica em amostra.
- sample — o conjunto de dados sintéticos agrupado de 4 câmeras (
warehouse-4cams-20mx20m-synthetic). A calibração vem incluída no código; não é necessária a execução do AMC. - videos — o usuário possui arquivos de vídeo locais (qualquer
*.mp4com nomes correspondentes às suas câmeras). O AMC autônomo (perfilauto_calib) será executado se a calibração estiver ausente. - rtsp — o usuário possui URLs RTSP ao vivo. Calibração via AMC controlado pelo VIOS; a implantação final também requer um arquivo de informações do sensor (
camera_info.json) com essas URLs RTSP.
Q2 — Cobertura da calibração (pular para o exemplo)
Para vídeos e RTSP, verifique se a calibração já está no disco no caminho de montagem esperado pelo contêiner de percepção:
DATASET="${SAMPLE_VIDEO_DATASET:?}" # o slug do conjunto de dados do usuário; consulte Q3
CAL_DIR="${VSS_APPS_DIR}/industry-profiles/warehouse-operations/warehouse-mv3dt-app/calibration/sample-data/${DATASET}"
# Procure por QUALQUER um dos seguintes: calibration.json, além de camInfo/*.yml ou *.yaml com
# nomes do tipo 'cam_*' ou 'Camera*' (a amostra fornecida usa Camera*.yml; o AMC pode
# gerar cam_*.yml — amplie a busca de acordo)
test -f "${CAL_DIR}/calibration.json" \
&& ls "${CAL_DIR}/camInfo/"*.{yml,yaml} 2>/dev/null
Se o usuário tiver fornecido um caminho de calibração por conta própria, valide esse caminho em vez de recalcular. Consulte configure-cameras.md para normalização do nome da câmera e descoberta confiável do número de câmeras (analisa o arquivo calibration.json).
Q3 — Detector + slug do conjunto de dados (somente quando Q2 aciona o AMC)
resnet(padrão, rápido) outransformer(mais lento, melhor sob oclusão) — passado para a API do AMC/v1/calibrate/na Etapa B (consultevss-generate-video-calibration/SKILL.md:48-62).- Um slug curto do conjunto de dados em formato “kebab-case” usado como
SAMPLE_VIDEO_DATASET(por exemplo,customer-aisle-4cams). Isso define o caminho de montagem da calibração e é persistido no arquivo.env.
Tabela de roteamento
| Q1 | Resultado de Q2 | Caminho |
|---|---|---|
amostra |
(os dados de cálculo vêm na árvore e já estão normalizados) | references/deploy-rtvi-cv-3d-stack.md diretamente |
vídeos |
cal presente | references/configure-cameras.md → references/deploy-rtvi-cv-3d-stack.md |
vídeos |
cal ausente | referências/fluxo-de-trabalho-de-calibração.md (modo de vídeos) → referências/configurar-câmeras.md → referências/implantar-rtvi-cv-3d-stack.md |
rtsp |
cal presente | references/configure-cameras.md → references/deploy-rtvi-cv-3d-stack.md |
rtsp |
cal ausente | referências/fluxo-de-trabalho-de-calibração.md (modo rtsp) → referências/configurar-câmeras.md → referências/implantar-rtvi-cv-3d-stack.md |
Todos os caminhos convergem para references/verify-and-view.md assim que o comando `up -d ` for concluído. Os arquivos references/troubleshooting.md e references/teardown.md estão vinculados, mas fora do caminho normal.
Regra de desambiguação. Nesta skill, “RTVI-CV-3D” significa a implantação do microsserviço MV3DT e utiliza MODE=mv3dt. Redirecione para ../vss-deploy-profile/references/warehouse.md somente quando o usuário solicitar o blueprint completo do warehouse, Sparse4D, MODE=3d ou warehouse-3d-app. Esta habilidade destina-se exclusivamente ao MV3DT, sem a pilha de agentes / LLM / VLM.
Pré-requisitos
1. Caminho do repositório
Localize video-search-and-summarization/ no disco. Todos os comandos de compilação são executados a partir de Se desconhecido, pergunte ao usuário.
2. CLI do NGC + chave
$NGC_CLI_API_KEY deve estar definida e deve ter acesso às imagens nvidia/vss-core/*. Consulte vss-deploy-profile/references/ngc.md para a configuração, caso esteja faltando.
Se o usuário tiver executado anteriormente o comando ` ngc config set `, mas $NGC_CLI_API_KEY não estiver exportada neste shell, a chave já está no disco:
NGC_CLI_API_KEY=$(awk -F'= ' '/^apikey/{print $2}' ~/.ngc/config 2>/dev/null)
test -n "${NGC_CLI_API_KEY}" && echo "chave obtida de ~/.ngc/config"
Certifique-se de que o valor da chave também seja inserido em industry-profiles/warehouse-operations/.env:164 (NGC_CLI_API_KEY=...) — o `compose` só o lê desse local durante a operação, e não do ambiente de seu shell.
3. Slug HARDWARE_PROFILE
As contagens públicas de fluxos suportados pelo MV3DT estão listadas no Guia de Iniciação Rápida do Warehouse, na seção “Opções de implantação suportadas pelo perfil de IA de visão MV3DT”. Use o slug
HARDWARE_PROFILEcorrespondente abaixo.
Escolha a partir de ` nvidia-smi --query-gpu=name --format=csv,noheader`:
| Nome da GPU | HARDWARE_PROFILE |
Fluxos suportados pelo 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 |
Se a GPU do usuário não estiver listada aqui, verifique o arquivo industry-profiles/warehouse-operations/.env para ver os valores disponíveis de HARDWARE_PROFILE e, em seguida, confirme se o perfil correspondente existe no arquivo blueprint-configurator/blueprint_config.yml antes de usá-lo. Não deduza a contagem de fluxos apenas a partir do slug.
O limite de MV3DT por GPU é aplicado no momento da implantação. O vss-configurator-mv3dt calcula final_stream_count = min(NUM_STREAMS, max_streams_supported) e aplica uma operação de gerenciamento de arquivos keep_count ao diretório ${VSS_DATA_DIR}/videos/${SAMPLE_VIDEO_DATASET}/, de modo que apenas os arquivos .mp4 correspondentes a final_stream_count permaneçam (classificados lexicograficamente, mantendo-se os últimos N). Se a contagem de fluxos suportada pelo MV3DT da sua GPU (tabela acima) for inferior à contagem da sua câmera, os processos perception / mdx-raw / mdx-bev serão executados com a contagem de fluxos suportada. Escolha uma GPU com uma contagem de fluxos suportada maior ou informe explicitamente o limite ao usuário para que ele saiba quais fluxos serão processados.
4. Dados do aplicativo no disco
VSS_DATA_DIR deve apontar para o diretório vss-warehouse-app-data extraído (separado do repositório). Apontá-lo para a pasta `deploy/docker/` do repositório faz com que a implantação pare: o configurador não consegue encontrar o conjunto de dados, o Redis não consegue abrir seu arquivo de log e o perception permanece no status “Criado”. Verifique o caminho antes da implantação.
Verificação prévia antes da implantação:
DATA_DIR="${VSS_DATA_DIR:?VSS_DATA_DIR não definido em .env}"
DATASET="${SAMPLE_VIDEO_DATASET:-warehouse-4cams-20mx20m-synthetic}"
for sub in videos models data_log; do
test -d "${DATA_DIR}/${sub}" || { echo "ERRO: ${DATA_DIR}/${sub} ausente"; exit 1; }
done
# Para os modos sample / videos — o diretório videos deve existir
test -d "${DATA_DIR}/videos/${DATASET}" \
|| { echo "ERRO: ${DATA_DIR}/videos/${DATASET} ausente — slug incorreto ou dados do aplicativo não extraídos"; exit 1; }
# Verificação: a contagem de vídeos deve corresponder à contagem de calibração.
# Sabe-se que alguns pacotes tar de dados de aplicativos publicados vêm com o conjunto de dados de amostra contendo
# menos vídeos do que o nome do conjunto de dados sugere — verifique e obtenha separadamente quaisquer
# câmeras ausentes, caso o limite mv3dt da sua GPU seja alto o suficiente para usá-las todas.
ls "${DATA_DIR}/videos/${DATASET}/"*.mp4 2>/dev/null | wc -l
# Certifique-se de que todos os subdiretórios por serviço em data_log/ existam. kafka / elasticsearch /
# redis / postgres e o caminho de upload da API de análise de vídeo (`/web-api-app/files`)
# sejam executados com UIDs não-root nessas montagens bind. Sem acesso de gravação, os daemons
# ou a calibração/importação de imagens podem falhar devido a erros de permissão.
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"
# Conceda acesso de gravação apenas aos UIDs específicos dos contêineres — ACLs com escopo, NÃO 777 e
# NÃO chown. UIDs (conforme data-directory.md): postgres=70, redis=999, elasticsearch / VST /
# kafka=1000. A primeira chamada abrange arquivos existentes; a segunda define ACLs *padrão* para que
# os arquivos/diretórios que os daemons criam em tempo de execução (por exemplo, PGDATA do Postgres) herdem o acesso.
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"
ACLs com escopo, em vez de
chmod 777. Isso concede acesso apenas aos UIDs conhecidos dos contêineres —não tornao diretório data_loggravável por todos e nãoaltera a propriedade(o que prejudicaria o Postgres / Elasticsearch, já que eles reatribuem a propriedade de seus diretórios na primeira inicialização). Prefira isso para execuções orientadas por agente e servidores compartilhados. O documento canônico../vss-deploy-profile/references/data-directory.mddocumenta ochmod -R 777geral e a tabela de UIDs por contêiner; esta técnica utiliza o equivalente em ACL com escopo em vez disso. Solicite a confirmação do usuário antes de alterar as permissões do host.Requer um sistema de arquivos POSIX-ACL (ext4 / xfs — o padrão) e o pacote
acl(setfacl). Se um daemon ainda registrar um erro de permissão após a implantação, identifique seu UID (docker inspect) e adicione--format '{{.Config.User}}' -m u:a ambas as chamadas.:rwx
Se os dados do aplicativo ainda não tiverem sido extraídos: faça o download por meio do recurso do registro ngc download-version "nvidia/vss-warehouse/vss-warehouse-app-data: " e execute ` tar -xvf ` (consulte references/deploy-rtvi-cv-3d-stack.md para descobrir a tag e ver todas as etapas).
5. Verificação prévia (sistema)
nvidia-smi, runtime do NVIDIA Docker visível (docker info | grep -i runtimes) e docker run --rm --gpus all ubuntu:24.04 nvidia-smi com todos os indicadores verdes. As verificações completas de driver/kernel/sysctl estão disponíveis em vss-deploy-profile/references/prerequisites.md.
Se alguma verificação falhar, corrija antes de continuar — não prossiga com a implantação.
6. Acessibilidade pelo navegador (apenas para hosts na nuvem ou em VPN corporativa)
Se o usuário for visualizar o video wall do VST por meio de um navegador em uma rede diferente da do host de implantação (VM na nuvem, VPN corporativa, sessão com túnel SSH), as regras do firewall upstream podem bloquear o WebRTC do VST (STUN para stun.l.google.com:19302, além de UDP aleatório para mídia). Consulte references/verify-and-view.md#browser-reachability para conhecer os sintomas e soluções alternativas. Além disso: alguns hosts bloqueiam a porta padrão do microsserviço AMC (TCP/8010); se o usuário relatar que a interface do usuário do AMC na porta :5000 funciona, mas suas chamadas de dados falham, tente novamente com um valor diferente para VSS_AUTO_CALIBRATION_PORT.
Solução de problemas
Quando qualquer etapa de implantação, calibração ou verificação falhar, interrompa o processo e classifique a falha antes de tentar novamente. As verificações rápidas abaixo abrangem os erros mais comuns do MV3DT; use references/troubleshooting.md para comandos de diagnóstico completos e correções, ../vss-generate-video-calibration/SKILL.md para falhas no fluxo de trabalho do AMC e ../vss-deploy-profile/references/warehouse-debug.md para problemas mais amplos na pilha do warehouse.
| Sintoma | Causa provável | Primeira verificação ou correção |
|---|---|---|
O vss-rtvi-cv-bev-fusion está com problema ou o arquivo /tmp/fusion_ready está ausente |
Broker não está pronto, incompatibilidade de MAX_EXPECTED_SENSORS ou incompatibilidade de STREAM_TYPE |
Verifique o broker-health-check, execute o comando `docker inspect --format '{{.State.Health.Status}}' vss-rtvi-cv-bev-fusion` e `mdx-raw ` / `mdx-bev`; em seguida, execute novamente o arquivo `references/configure-cameras.md` caso o número de streams difira |
O Perception mostra Fontes ativas: 0, sem FPS ou menos câmeras do que o esperado |
Estado desatualizado do sensor VST, slug incorreto do conjunto de dados, calibração ausente ou limite de fluxos por GPU | Verifique SAMPLE_VIDEO_DATASET, NUM_STREAMS, camInfo/ e a lista de sensores VST; se ainda houver sensores antigos, siga as instruções em references/teardown.md antes de reimplantar |
O vss-rtvi-cv-mv3dt encerra com o erro “nó inválido” do MqttCommunicator ou falhas no envio do rastreador |
Os nomes das câmeras nos vídeos, no arquivo calibration.json e em camInfo/ não seguem a convenção Camera, Camera_01, ... |
Normalize todos os nomes das câmeras seguindo o Passo 0 do arquivo references/configure-cameras.md, depois limpe o estado obsoleto do VST e reimplante |
| Falha na criação, upload, calibração ou exportação para MV3DT do projeto AMC | Problema no serviço/API do AutoMagicCalib fora deste caminho de implantação do MV3DT | Use ../vss-generate-video-calibration/SKILL.md para implantar/depurar o AMC e, em seguida, retorne ao arquivo references/calibration-workflow.md após a exportação ser bem-sucedida |
O vss-behavior-analytics-mv3dt reinicia com erros de validação do esquema de calibração |
A exportação do AMC apresenta campos de grupo, região ou local vazios |
Aplique o patch de espaço reservado no passo 4a do arquivo references/calibration-workflow.md ou preencha esses campos no AMC antes da exportação |
O perfil estendido não possui sobreposições e o vss-import-calibration-output-mv3dt registra que o arquivo imageMetadata.json não foi encontrado |
A exportação do AMC MV3DT não gerou os arquivos images/Top.png e images/imageMetadata.json |
Gere ambos os arquivos conforme descrito no passo 4b do arquivo references/calibration-workflow.md e, em seguida, reinicie o importador one-shot |
| Falha na obtenção de imagens, no carregamento do modelo ou na compilação do mecanismo na primeira inicialização | NGC_CLI_API_KEY ausente ou expirada, VSS_DATA_DIR incorreto, arquivos BodyPose3DNet ausentes ou OOM da GPU |
Verifique novamente a autenticação NGC, confirme ${VSS_DATA_DIR}/models/mv3dt/BodyPose3DNet/, analise os logs do vss-rtvi-cv-mv3dt e libere ou altere o RT_CV_DEVICE_ID se a GPU estiver esgotada |
Antes de realizar uma recuperação destrutiva (docker compose down -v, limpar o data_log, excluir o estado do sensor VST ou alterar as ACLs do host), explique o impacto e obtenha a confirmação do usuário. Registre o comando com falha, os valores relevantes do .env, o comando docker compose ps e os últimos logs do contêiner antes de realizar alterações que redefina o estado.
Como tudo se encaixa
SKILL.md (este arquivo — roteamento Q0/Q1/Q2/Q3)
└─ se cal estiver ausente ─> calibration-workflow.md
│ └─ encadeia para vss-generate-video-calibration (implantação + API do drive)
│ └─ busca /v1/result/{project_id}/mv3dt_result?result_type=amc (mais vggt quando o refinamento estiver habilitado)
│ └─ armazena os arquivos de calibração em warehouse-mv3dt-app/calibration/sample-data//
├─> configure-cameras.md (normalização do nome da câmera, sincronização de NUM_STREAMS, ajuste do sensor VST)
└─> deploy-rtvi-cv-3d-stack.md (montagem com bp_wh_kafka_mv3dt + modo estendido/mínimo)
└─> verify-and-view.md (FPS, fusion_ready, mdx-bev, parede de vídeo VST + verificações WebRTC)
Habilidades relacionadas
vss-generate-video-calibration— a habilidade AMC. É responsável pela implantação do AMC, captura RTSP, API de calibração e pelo gancho de exportação/v1/result/.../mv3dt_resultque esta habilidade utiliza.O arquivo calibration-workflow.mdestá acoplado a ela.vss-deploy-profile— estrutura abrangente para vários perfis. Use-a quando o usuário desejar o projeto completo do warehouse (com agentes / LLM / VLM), e não apenas o MV3DT.vss-manage-video-io-storage— habilidade de API VIOS/VST. Útil para o video wall VST (visualização sobreposta) e para o gerenciamento de sensores mencionado emconfigure-cameras.md.
A referência oficial ao blueprint do warehouse no repositório, em ../vss-deploy-profile/references/warehouse.md, abrange 2D / 3D / MV3DT dentro da pilha completa do warehouse — esta habilidade é o complemento exclusivo para MV3DT que elimina a camada de agente / LLM / VLM.
---
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.
Todos os arquivos
14 arquivosInstalar vss-deploy-detection-tracking-3d
Baixe e descompacte os arquivos de habilidades no diretório .claude/skills/.
Baixar ZIPClone o repositório e copie os arquivos da habilidade para o seu projeto.
git clone https://github.com/NVIDIA/skills/tree/main/skills/vss-deploy-detection-tracking-3d # Copy SKILL.md to your .claude/skills/ directory
Copiar





Lar
