opción
HogarHogar Skill DevOps y CI/CD vss-deploy-detection-tracking-3d

vss-deploy-detection-tracking-3d

NVIDIA/skills NVIDIA/skills

Implementar y poner en funcionamiento el microservicio RTVI-CV-3D para la detección y el seguimiento 3D con múltiples cámaras, compatible con conjuntos de datos de ejemplo, vídeos personalizados y transmisiones RTSP.

...Expandir todo
0
Tiempo actualizado 28 de septiembre de 2026

Objetivo

Implementar y operar el microservicio RTVI-CV-3D como MV3DT (MODE=mv3dt) —percepción DeepStream por cámara más fusión BEV a través de múltiples cámaras calibradas— sobre el conjunto de datos de muestra incluido, vídeos personalizados o RTSP en directo, sin necesidad de la pila completa de agente de almacén / LLM / VLM.

Instrucciones

Trabaja de arriba abajo: responde a las preguntas de enrutamiento (Q0–Q3) en la sección «Routing» y, a continuación, sigue la referencia correspondiente a la ruta elegida. Los procedimientos detallados paso a paso se encuentran en «references/» (implementación, cadena de calibración, configuración de la cámara, verificación, desmontaje y resolución de problemas).

Ejemplos

  • Activa el seguimiento multicámara en el conjunto de datos de muestra.
  • Implementa RTVI-CV-3D en mis vídeos aquí: <ruta/a/los/vídeos>.
  • Ejecuta MV3DT en flujos RTSP tras la calibración.

VSS: Implementación de detección y seguimiento — 3D (RTVI-CV-3D / MV3DT)

Inicie el microservicio RTVI-CV-3D como la pila MV3DT (MODE=mv3dt) a partir del blueprint del almacén: percepción DeepStream por cámara (vss-rtvi-cv-mv3dt) + fusión BEV (vss-rtvi-cv-bev-fusion) + bus MQTT mosquitto + broker + pila de sensores VST — sin el agente ni la pila LLM / VLM que viene con el plano completo del almacén.

El mecanismo de composición propiamente dicho se encuentra en deploy/docker/industry-profiles/warehouse-operations/warehouse-mv3dt-app/. Esta habilidad gestiona las modificaciones del entorno, la cadena de calibración y la verificación.

Enrutamiento

Haz al usuario un máximo de cuatro preguntas y, a continuación, realiza el envío.

P0 — Tamaño del perfil (con superposiciones o sin ellas)

Por defecto, se utiliza el perfil ampliado, a menos que el usuario solicite explícitamente el mínimo. El perfil ampliado implementa ELK + vss-video-analytics-api-mv3dt + vss-kibana-init-mv3dt + vss-import-calibration-output-mv3dt sobre el núcleo de MV3DT; estos son los componentes que necesita el videowall VST para renderizar las superposiciones de cuadros delimitadores. Sin ellos, el videowall funciona, pero muestra las transmisiones sin procesar, sin superposiciones.

Respuesta del usuario MINIMAL_PROFILE Lo que obtienes Cuándo elegir
extendido (por defecto) "" Núcleo MV3DT + ELK + API de análisis + Kibana. Las superposiciones funcionan en el muro de vídeo VST. Recomendado para una experiencia completa de extremo a extremo. «Quiero la experiencia completa de extremo a extremo», «Quiero ver los recuadros delimitadores» o sin preferencia indicada
mínima «true» Solo núcleo MV3DT. Unos 5 contenedores menos. Sin superposiciones en VST. Los metadatos siguen en Kafka/Redis. «Solo necesito los datos», «host perimetral / Thor», «huella mínima»

Nota sobre ELK selectivo: no existe una opción intermedia «mínima + solo ELK» en la configuración actual. Todos los servicios controlados por ${MINIMAL_PROFILE:+_extended} se inician juntos (ES, Logstash, Kibana, video-analytics-api, kibana-init, import-calibration). La expansión del parámetro :+ de bash genera el sufijo _extended cuando se establece MINIMAL_PROFILE; la opción «extended» cambia la cadena de activación de nuevo a la forma simple bp_wh_kafka_mv3dt, con la que ya coincide el perfil de composición activo. O bien aceptas el paquete completo «extended» o te quedas con el mínimo.

P1 — Fuente de datos

Pregunta esto a menos que la fuente quede explícita en el primer mensaje del usuario. Una solicitud simple como «deploy rtvi-cv-3d» se redirige a esta habilidad MV3DT (MODE=mv3dt), pero no implica una muestra.

  • sample — el conjunto de datos sintéticos empaquetado de 4 cámaras (warehouse-4cams-20mx20m-synthetic). La calibración se incluye en el árbol; no es necesario ejecutar AMC.
  • videos — el usuario dispone de archivos de vídeo locales (cualquier archivo *.mp4 con el nombre de sus cámaras). Se ejecutará un AMC independiente (perfilauto_calib ) si falta la calibración.
  • rtsp: el usuario dispone de URL RTSP en directo. La calibración se realiza mediante AMC controlado por VIOS; la implementación final también requiere un archivo de información del sensor (camera_info.json) con dichas URL RTSP.

P2 — Cobertura de la calibración (omitir para la muestra)

Para vídeos y RTSP, comprueba si la calibración ya se encuentra en el disco en la ruta de montaje que espera el contenedor de percepción:

DATASET="${SAMPLE_VIDEO_DATASET:?}"          # el slug del conjunto de datos del usuario; véase la Pregunta 3
CAL_DIR="${VSS_APPS_DIR}/industry-profiles/warehouse-operations/warehouse-mv3dt-app/calibration/sample-data/${DATASET}"

# Busca CUALQUIERA de los siguientes: calibration.json, además de camInfo/*.yml o *.yaml con
# nombres que contengan «cam_*» o «Camera*» (la muestra incluida utiliza Camera*.yml; AMC puede
# generar cam_*.yml — amplía la búsqueda en consecuencia)
test -f "${CAL_DIR}/calibration.json" \
  && ls "${CAL_DIR}/camInfo/"*.{yml,yaml} 2>/dev/null

Si el usuario ha proporcionado él mismo una ruta de calibración, valida esa ruta en su lugar; no vuelvas a calcularla. Consulta configure-cameras.md para la normalización del nombre de la cámara y la detección fiable del número de cámaras (analiza calibration.json).

P3 — Detector + identificador del conjunto de datos (solo cuando la P2 activa el AMC)

  • resnet (por defecto, rápido) o transformer (más lento, mejor en condiciones de oclusión): se pasa a la API de AMC /v1/calibrate/ en el paso B (véase vss-generate-video-calibration/SKILL.md:48-62).
  • Un slug corto del conjunto de datos en formato «kebab-case» utilizado como SAMPLE_VIDEO_DATASET (p. ej., customer-aisle-4cams). Esto determina la ruta de montaje de la calibración y se guarda en .env.

Tabla de enrutamiento

P1 Resultado de Q2 Ruta
muestra (los datos de cálculo están en el árbol y ya se han normalizado) references/deploy-rtvi-cv-3d-stack.md directamente
vídeos cal presente references/configure-cameras.md → references/deploy-rtvi-cv-3d-stack.md
vídeos cal falta referencias/flujo-de-trabajo-de-calibración.md (modo de vídeos) → referencias/configurar-cámaras.md → referencias/implementar-rtvi-cv-3d-stack.md
rtsp cal presente referencias/configurar-cámaras.md → referencias/implementar-rtvi-cv-3d-stack.md
rtsp cal falta referencias/flujo-de-trabajo-de-calibración.md (modo rtsp) → referencias/configurar-cámaras.md → referencias/implementar-rtvi-cv-3d-stack.md

Todas las rutas convergen en references/verify-and-view.md una vez que se completa «up -d ». references/troubleshooting.md y references/teardown.md están enlazados, pero quedan fuera de la ruta normal.

Regla de desambiguación. En esta skill, «RTVI-CV-3D» se refiere a la implementación del microservicio MV3DT y utiliza MODE=mv3dt. Dirígete a ../vss-deploy-profile/references/warehouse.md solo cuando el usuario solicite el blueprint completo de warehouse, Sparse4D, MODE=3d o warehouse-3d-app. Esta skill es solo para MV3DT, sin la pila de agentes, LLM ni VLM.

Requisitos previos

1. Ruta del repositorio

Localiza «video-search-and-summarization/» en el disco. Todos los comandos de «compose» se ejecutan desde /deploy/docker/. Si se desconoce, pregunta al usuario.

2. CLI de NGC + clave

Se debe establecer$NGC_CLI_API_KEY y debe tener acceso a las imágenes nvidia/vss-core/*. Consulte vss-deploy-profile/references/ngc.md para la configuración si falta.

Si el usuario ha ejecutado previamente «ngc config set», pero $NGC_CLI_API_KEY no está exportada en este shell, la clave ya se encuentra en el disco:

NGC_CLI_API_KEY=$(awk -F'= ' '/^apikey/{print $2}' ~/.ngc/config 2>/dev/null)
test -n "${NGC_CLI_API_KEY}" && echo "clave obtenida de ~/.ngc/config"

Asegúrate de que el valor de la clave también se incluya en industry-profiles/warehouse-operations/.env:164 (NGC_CLI_API_KEY=...) — Compose solo lo lee de ahí durante el tiempo de actividad, no del entorno de tu shell.

3. Slug de HARDWARE_PROFILE

El número de flujos compatibles con MV3DT que se ha hecho público figura en la Guía de inicio rápido de Warehouse, en el apartado «Opciones de implementación compatibles con el perfil de IA de visión MV3DT». Utiliza el slug HARDWARE_PROFILE correspondiente que se indica a continuación.

Selecciona a partir de nvidia-smi --query-gpu=nombre --format=csv,noheader:

Nombre de la GPU HARDWARE_PROFILE Flujos compatibles con 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

Si la GPU del usuario no aparece en esta lista, comprueba en industry-profiles/warehouse-operations/.env los valores disponibles de HARDWARE_PROFILE y, a continuación, confirma que el perfil correspondiente existe en blueprint-configurator/blueprint_config.yml antes de utilizarlo. No deduzcas el número de flujos basándote únicamente en el slug.

El límite de MV3DT por GPU se aplica en el momento de la implementación. vss-configurator-mv3dt calcula final_stream_count = min(NUM_STREAMS, max_streams_supported) y aplica una operación de gestión de archivos «keep_count» a ${VSS_DATA_DIR}/videos/${SAMPLE_VIDEO_DATASET}/, de modo que solo queden los archivos .mp4 correspondientes a final_stream_count (ordenados lexicográficamente, conservándose los últimos N). Si el número de flujos admitidos por el MV3DT de tu GPU (tabla anterior) es inferior al número de cámaras, perception / mdx-raw / mdx-bev se ejecutarán con el número de flujos admitidos. Elige una GPU con un mayor número de flujos admitidos o indica explícitamente el límite al usuario para que sepa qué flujos se procesarán.

4. Datos de la aplicación en el disco

VSS_DATA_DIR debe apuntar al directorio vss-warehouse-app-data extraído (separado del repositorio). Si se apunta a la carpeta «deploy/docker/» del repositorio, la implementación se bloquea: el configurador no encuentra el conjunto de datos, Redis no puede abrir su archivo de registro y «perception» permanece en el estado «Created». Comprueba la ruta antes de la implementación.

Comprobación previa a la implementación:

DATA_DIR="${VSS_DATA_DIR:?VSS_DATA_DIR no está definido en .env}"
DATASET="${SAMPLE_VIDEO_DATASET:-warehouse-4cams-20mx20m-synthetic}"

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

# Para los modos «sample» y «videos»: el directorio «videos» debe existir
test -d "${DATA_DIR}/videos/${DATASET}" \
  || { echo "ERROR: Falta ${DATA_DIR}/videos/${DATASET} — slug incorrecto o datos de la aplicación no extraídos"; exit 1; }

# Comprobación: el recuento de vídeos debe coincidir con el recuento de calibración.
# Se sabe que algunos archivos tar de datos de la aplicación publicados incluyen el conjunto de datos de muestra con
# menos vídeos de los que sugiere el nombre del conjunto de datos — comprueba y obtén por separado cualquier
# cámara que falte si la capacidad mv3dt de tu GPU es lo suficientemente alta como para utilizarlas todas.
ls "${DATA_DIR}/videos/${DATASET}/"*.mp4 2>/dev/null | wc -l

# Asegúrate de que existan todos los subdirectorios por servicio dentro de data_log/. Kafka, Elasticsearch,
# redis / postgres y la ruta de subida de la API de análisis de vídeo (`/web-api-app/files`)
# se ejecutan con UID que no son de root en estos montajes vinculados. Sin acceso de escritura, los demonios
# o la calibración/importación de imágenes pueden fallar con errores de permisos.
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"

# Conceder acceso de escritura únicamente a los UID específicos de los contenedores: ACL con ámbito de aplicación, NO 777 y
# NO chown. UID (según data-directory.md): postgres=70, redis=999, elasticsearch / VST /
# kafka=1000. La primera llamada abarca los archivos existentes; la segunda establece las ACL *por defecto* para que
# los archivos y directorios que los demonios crean en tiempo de ejecución (por ejemplo, PGDATA de Postgres) hereden los permisos.
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"

ACL con ámbito de aplicación, en lugar de chmod 777. Esto solo concede acceso a los UID de contenedores conocidos;no hace que data_log sea escribible para todos, y no cambia el propietario (lo que provocaría errores en PostgreSQL o Elasticsearch, ya que estos se reasignan a sí mismos la propiedad de sus directorios al iniciarse por primera vez). Es preferible utilizar esta opción para ejecuciones controladas por agentes y servidores compartidos. El documento canónico ../vss-deploy-profile/references/data-directory.md describe el chmod -R 777 general y la tabla de UID por contenedor; esta habilidad utiliza, en su lugar, el equivalente con ACL de ámbito limitado. Solicita confirmación al usuario antes de modificar los permisos del host.

Requiere un sistema de archivos POSIX-ACL (ext4 / xfs —el predeterminado—) y el paquete acl (setfacl). Si un demonio sigue registrando un error de permisos tras la implementación, averigua su UID (docker inspect --format '{{.Config.User}}') y añade -m u::rwx a ambas llamadas.

Si los datos de la aplicación aún no se han extraído: descárgalos a través del registro ngc con el recurso download-version «nvidia/vss-warehouse/vss-warehouse-app-data: » y ejecuta «tar -xvf» (consulta references/deploy-rtvi-cv-3d-stack.md para la identificación de etiquetas y los pasos completos).

5. Comprobación previa (sistema)

nvidia-smi, tiempo de ejecución de NVIDIA Docker visible (docker info | grep -i runtimes) y docker run --rm --gpus all ubuntu:24.04 nvidia-smi todo en verde. Las comprobaciones completas de controladores, kernel y sysctl se encuentran en vss-deploy-profile/references/prerequisites.md.

Si falla alguna comprobación, corrígelo antes de continuar; no sigas con la implementación.

6. Accesibilidad desde el navegador (solo para hosts en la nube o con VPN corporativa)

Si el usuario va a visualizar el muro de vídeo de VST a través de un navegador en una red diferente a la del host de implementación (máquina virtual en la nube, VPN corporativa, sesión con túnel SSH), es posible que las reglas del cortafuegos de nivel superior bloqueen VST WebRTC (STUN a stun.l.google.com:19302, además de UDP aleatorio para los medios). Consulta references/verify-and-view.md#browser-reachability para conocer los síntomas y las soluciones alternativas. Además: algunos servidores bloquean el puerto predeterminado del microservicio AMC (TCP/8010); si el usuario informa de que la interfaz de usuario de AMC en el puerto :5000 funciona, pero sus llamadas de datos fallan, vuelve a intentarlo con un VSS_AUTO_CALIBRATION_PORT diferente.

Solución de problemas

Cuando falle cualquier paso de implementación, calibración o verificación, detén el proceso y clasifica el fallo antes de volver a intentarlo. Las comprobaciones rápidas que se indican a continuación cubren los errores más comunes de MV3DT; utilice references/troubleshooting.md para consultar los comandos de diagnóstico completos y las soluciones, ../vss-generate-video-calibration/SKILL.md para fallos en el flujo de trabajo de AMC, y ../vss-deploy-profile/references/warehouse-debug.md para problemas más generales relacionados con la pila de Warehouse.

Síntoma Causa probable Primera comprobación o solución
vss-rtvi-cv-bev-fusion no funciona correctamente o falta /tmp/fusion_ready El broker no está listo, discrepancia en MAX_EXPECTED_SENSORS o discrepancia en STREAM_TYPE Comprueba broker-health-check, ejecuta` docker inspect --format '{{.State.Health.Status}}' vss-rtvi-cv-bev-fusion` y `mdx-raw ` o ` mdx-bev`; a continuación, vuelve a ejecutar ` references/configure-cameras.md ` si el número de flujos difiere
Perception muestra «Fuentes activas: 0», «sin FPS» o un número de cámaras inferior al esperado Estado obsoleto del sensor VST, slug del conjunto de datos incorrecto, calibración ausente o límite de transmisiones por GPU Comprueba SAMPLE_VIDEO_DATASET, NUM_STREAMS, camInfo/ y la lista de sensores VST; si quedan sensores antiguos, sigue las instrucciones de references/teardown.md antes de volver a implementar
vss-rtvi-cv-mv3dt se cierra con el error «nodo no válido» de MqttCommunicator o con fallos en el envío del rastreador Los nombres de las cámaras en los vídeos, en calibration.json y en camInfo/ no se ajustan a la convención Camera, Camera_01, ... Normaliza todos los nombres de las cámaras siguiendo el paso 0 de references/configure-cameras.md; a continuación, borra el estado VST obsoleto y vuelve a implementar
Falla la creación del proyecto AMC, la subida, la calibración o la exportación a MV3DT Problema con el servicio o la API de AutoMagicCalib fuera de esta ruta de implementación de MV3DT Utiliza ../vss-generate-video-calibration/SKILL.md para implementar/depurar AMC y, a continuación, vuelve a references/calibration-workflow.md una vez que la exportación se haya realizado correctamente
vss-behavior-analytics-mv3dt se reinicia con errores de validación del esquema de calibración La exportación de AMC tiene campos de grupo, región o ubicación vacíos Aplica el parche del marcador de posición en el paso 4a de references/calibration-workflow.md, o rellena esos campos en AMC antes de la exportación
El perfil ampliado no tiene superposiciones y vss-import-calibration-output-mv3dt registra que no se ha encontrado imageMetadata.json La exportación de AMC MV3DT no ha generado los archivos images/Top.png e images/imageMetadata.json Sintetice ambos archivos siguiendo el paso 4b de references/calibration-workflow.md y, a continuación, reinicie el importador de una sola ejecución
Error al recuperar imágenes, cargar el modelo o al compilar el motor en el primer inicio Falta la clave NGC_CLI_API_KEY o ha caducado, VSS_DATA_IR incorrecto, faltan archivos de BodyPose3DNet o se ha agotado la memoria de la GPU Vuelve a comprobar la autenticación de NGC, confirma ${VSS_DATA_DIR}/models/mv3dt/BodyPose3DNet/, revisa los registros de vss-rtvi-cv-mv3dt y libera o cambia RT_CV_DEVICE_ID si la GPU está agotada

Antes de realizar una recuperación destructiva (docker compose down -v, borrar data_log, eliminar el estado del sensor VST o modificar las ACL del host), explique las consecuencias y obtenga la confirmación del usuario. Registre el comando que ha fallado, los valores relevantes de .env, el comando docker compose ps y los últimos registros del contenedor antes de realizar cambios que restablezcan el estado.

Cómo encaja todo

SKILL.md (este archivo — enrutamiento Q0/Q1/Q2/Q3)
  └─ si falta la calibración ─> calibration-workflow.md
  │                     └─ encadena a vss-generate-video-calibration (implementación + API de la unidad)
  │                     └─ recupera /v1/result/{project_id}/mv3dt_result?result_type=amc (más vggt cuando el refinamiento está habilitado)
  │                     └─ almacena los archivos de calibración en warehouse-mv3dt-app/calibration/sample-data//
  ├─> configure-cameras.md (normalización del nombre de la cámara, sincronización de NUM_STREAMS, ajuste del sensor VST)
  └─> deploy-rtvi-cv-3d-stack.md (compilación con bp_wh_kafka_mv3dt + modo ampliado/mínimo)
        └─> verify-and-view.md (FPS, fusion_ready, mdx-bev, muro de vídeo VST + comprobaciones de WebRTC)

Habilidades relacionadas

  • vss-generate-video-calibration: la habilidad AMC. Se encarga del despliegue de AMC, la captura RTSP, la API de calibración y el gancho de exportación /v1/result/.../mv3dt_result que utiliza esta habilidad. calibration-workflow.md se encadena a ella.
  • vss-deploy-profile — estructura global para todos los perfiles. Utilízala en su lugar cuando el usuario desee el plano completo del almacén (con agentes / LLM / VLM), no solo MV3DT.
  • vss-manage-video-io-storage: habilidad de la API de VIOS/VST. Útil para el muro de vídeo VST (visualización superpuesta) y para la gestión de sensores a la que se hace referencia en configure-cameras.md.

La referencia oficial del «warehouse-blueprint» del repositorio, en ../vss-deploy-profile/references/warehouse.md, abarca 2D, 3D y MV3DT dentro de la pila completa del almacén; esta habilidad es la versión complementaria exclusiva para MV3DT que elimina la capa de agentes, LLM y VLM.

Ver en GitHub
---
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.

Instalar vss-deploy-detection-tracking-3d

Descarga y descomprime los archivos de habilidades en tu directorio .claude/skills/.

Descargar ZIP

Clona el repositorio y copia los archivos de la habilidad a tu proyecto.

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

Copiar Copiar
Configuración rápida: Copia la carpeta de la habilidad en .claude/skills/ Claude detectará y utilizará automáticamente la habilidad
Repositorio NVIDIA/skills

Habilidades relacionadas

klingai-upgrade-migration
Tiempo actualizado 3 de julio de 2026
Verification &amp; Quality Assurance
Tiempo actualizado 29 de junio de 2026
base44-cli
Tiempo actualizado 29 de junio de 2026
Railway CLI Management
Tiempo actualizado 2 de julio de 2026
OR