vss-deploy-detection-tracking-3d
NVIDIA/skills
Разверните и запустите микросервис RTVI-CV-3D для 3D-обнаружения и отслеживания с использованием нескольких камер, поддерживающий примерные наборы данных, пользовательские видеоролики и потоки RTSP.
...Расширить всеЦель
Развернуть и запустить микросервис RTVI-CV-3D в режиме MV3DT (MODE=mv3dt) — восприятие DeepStream для каждой камеры плюс BEV Fusion на основе нескольких откалиброванных камер — на входящем в комплект наборе примеров данных, пользовательских видеозаписях или потоковом RTSP в реальном времени без использования полного стека warehouse agent / LLM / VLM.
Инструкции
Работайте сверху вниз: ответьте на вопросы по выбору пути (Q0–Q3) в разделе «Routing», затем следуйте инструкциям для выбранного пути. Подробные пошаговые инструкции находятся в папке references/ (развертывание, цепочка калибровки, настройка камер, верификация, демонтаж, устранение неполадок).
Примеры
- Включите отслеживание с использованием нескольких камер на наборе обучающих данных.
- Разверните RTVI-CV-3D на моих видеороликах, расположенных здесь:
<path/to/videos>. - Запустите MV3DT на RTSP-потоках после калибровки.
VSS: развертывание системы обнаружения и отслеживания — 3D (RTVI-CV-3D / MV3DT)
Запустите микросервис RTVI-CV-3D в качестве стека MV3DT (MODE=mv3dt) из шаблона хранилища: перцепция DeepStream для каждой камеры (vss-rtvi-cv-mv3dt) + BEV Fusion (vss-rtvi-cv-bev-fusion) + шина MQTT mosquitto + брокер + стек датчиков VST — без агента / LLM / VLM, входящего в полный шаблон «склад».
Фактический механизм компоновки находится в папке deploy/docker/industry-profiles/warehouse-operations/warehouse-mv3dt-app/. Этот навык управляет переопределениями среды, цепочкой калибровки и верификацией.
Маршрутизация
Задайте пользователю не более четырёх вопросов, затем выполните диспетчеризацию.
Q0 — Размер профиля (с наложениями или без)
По умолчанию используется расширенный вариант, если пользователь явно не запрашивает минимальный. Расширенный вариант развертывает ELK + vss-video-analytics-api-mv3dt + vss-kibana-init-mv3dt + vss-import-calibration-output-mv3dt поверх ядра MV3DT — именно это необходимо видеостене VST для отображения наложений в виде ограничительных прямоугольников. Без них видеостена работает, но показывает необработанные потоки без наложений.
| Ответ пользователя | MINIMAL_PROFILE |
Что вы получаете | Когда выбирать |
|---|---|---|---|
| расширенный (по умолчанию) | "" |
Ядро 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). Расширение параметра:+в bashдобавляет суффикс_extended, когда установленMINIMAL_PROFILE; параметр extended возвращает строку условия обратно к простомуbp_wh_kafka_mv3dt, которому уже соответствует активный профиль compose. Либо вы принимаете полный расширенный пакет, либо остаётесь в минимальном режиме.
Вопрос 1 — Источник данных
Задавайте этот вопрос, если источник не указан явно в первом сообщении пользователя. Простой запрос
типа «deploy rtvi-cv-3d» направляется в этот навык MV3DT (MODE=mv3dt), но
не подразумевает наличие образца.
- sample — входящий в пакет синтетический набор данных с 4 камер (
warehouse-4cams-20mx20m-synthetic). Калибровка входит в состав; запуск AMC не требуется. - videos — у пользователя есть локальные видеофайлы (любые
*.mp4, названные в соответствии с их камерами). Автономный AMC (профильauto_calib) запустится, если калибровка отсутствует. - rtsp — у пользователя есть URL-адреса RTSP с потоковым видео. Калибровка осуществляется через AMC на базе VIOS; для окончательного развертывания также потребуется файл информации о датчиках (
camera_info.json) с этими URL-адресами RTSP.
Вопрос 2 — Покрытие калибровки (пропустить для примера)
Для видео и 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_*.yml — расширьте поиск соответственно)
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(медленнее, лучше справляется с окклюзией) — передаётся в API AMC/v1/calibrate/на этапе B (см.vss-generate-video-calibration/SKILL.md:48-62).- Короткий слэг набора данных в формате «кебаб» (kebab-case), используемый в качестве
SAMPLE_VIDEO_DATASET(например,customer-aisle-4cams). Он определяет путь к калибровочному креплению и сохраняется в файле.env.
Таблица маршрутизации
| Q1 | Результат Q2 | Путь |
|---|---|---|
образец |
(координаты кораблей в дереве и уже нормализованы) | ссылки/deploy-rtvi-cv-3d-stack.md напрямую |
видео |
cal present | references/configure-cameras.md → references/deploy-rtvi-cv-3d-stack.md |
видео |
калибровка отсутствует | ссылки/calibration-workflow.md (режим видео) → ссылки/configure-cameras.md → ссылки/deploy-rtvi-cv-3d-stack.md |
rtsp |
калибровка присутствует | 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 |
Каждый путь сходится к файлу references/verify-and-view.md после завершения команды up -d. Фай лы references/troubleshooting.md и references/teardown.md связаны между собой, но находятся вне основного сценария работы.
Правило устранения неоднозначности. В данном навыке «RTVI-CV-3D» означает развертывание микрослужбы MV3DT и использует MODE=mv3dt. Переход к файлу ../vss-deploy-profile/references/warehouse.md осуществляется только в том случае, если пользователь запрашивает полный блупринт warehouse, Sparse4D, MODE=3d или warehouse-3d-app. Данный навык предназначен исключительно для MV3DT без стека агентов / LLM / VLM.
Необходимые условия
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 "ключ взят из ~/.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 |
Если графический процессор пользователя отсутствует в этом списке, проверьте файл industry-profiles/warehouse-operations/.env на наличие доступных значений HARDWARE_PROFILE, а затем убедитесь, что соответствующий профиль существует в файле blueprint-configurator/blueprint_config.yml, прежде чем использовать его. Не определяйте количество потоков только по слогу.
Ограничение MV3DT на один графический процессор применяется при развертывании. vss-configurator-mv3dt вычисляет final_stream_count = min(NUM_STREAMS, max_streams_supported) и применяет операцию управления файлами keep_count к каталогу ${VSS_DATA_DIR}/videos/${SAMPLE_VIDEO_DATASET/}, чтобы остались только файлы .mp4 с количеством потоков, ра в ным final_stream_count (отсортированные в лексикографическом порядке, сохраняются последние N файлов). Если количество потоков, поддерживаемое MV3DT вашего графического процессора (см. таблицу выше), меньше количества потоков с камеры, то процессы perception / mdx-raw / mdx-bev запускаются с количеством поддерживаемых потоков. Либо выберите графический процессор с более высоким количеством поддерживаемых потоков, либо явно сообщите пользователю об этом ограничении, чтобы он знал, какие потоки будут обработаны.
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 "ОШИБКА: ${DATA_DIR}/${sub} отсутствует"; exit 1; }
done
# Для режимов sample / videos — каталог videos должен существовать
test -d "${DATA_DIR}/videos/${DATASET}" \
|| { echo "ОШИБКА: ${DATA_DIR}/videos/${DATASET} отсутствует — неверный слэг или данные приложения не извлечены"; exit 1; }
# Проверка: количество видео должно совпадать с количеством в калибровке.
# Известно, что в некоторых опубликованных архивах app-data набор данных «sample» содержит
# меньше видео, чем предполагает название набора — проверьте и добавьте отдельно любые отсутствующие
# камеры, если ограничение mv3dt вашего графического процессора достаточно высокое, чтобы использовать их все.
ls "${DATA_DIR}/videos/${DATASET}/"*.mp4 2>/dev/null | wc -l
# Убедитесь, что все подкаталоги для сервисов в data_log/ существуют: kafka / elasticsearch /
# redis / postgres, а также путь для загрузки данных через API видеоаналитики (`/web-api-app/files`)
# работают под учетными записями, отличными от root, на этих привязанных монтируемых каталогах. Без прав на запись демоны
# или процессы калибровки/импорта изображений могут завершиться с ошибками, связанными с правами доступа.
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. Первый вызов распространяется на существующие файлы; второй устанавливает *исходные* списки доступа (ACL), чтобы
# файлы/каталоги, создаваемые демонами во время работы (например, PGDATA для postgres), наследовали эти права доступа.
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 с ограниченной областью действия, а не
chmod 777. Это предоставляет доступ только известным UID контейнеров — это не делаеткаталог data_logдоступным для записи всем пользователям и не выполняет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)
Если пользователь будет просматривать видеостену VST через браузер в сети, отличной от сети хоста развертывания (облачная виртуальная машина, корпоративная VPN, сеанс через SSH-туннель), правила вышестоящего брандмауэра могут блокировать VST WebRTC (STUN на stun.l.google.com:19302, а также случайные UDP-запросы для передачи мультимедиа). См. references/verify-and-view.md#browser-reachability для ознакомления с симптомами и способами обхода. Кроме того: некоторые хосты блокируют порт по умолчанию микрослужбы AMC (TCP/8010); если пользователь сообщает, что интерфейс AMC на :5000 работает, но вызовы данных завершаются сбоем, повторите попытку с другим значением VSS_AUTO_CALIBRATION_PORT.
Устранение неполадок
Если какой-либо этап развертывания, калибровки или проверки завершился сбоем, остановитесь и определите характер сбоя перед повторной попыткой. Приведённые ниже быстрые проверки охватывают наиболее распространённые ошибки MV3DT; используйте файл references/troubleshooting.md для полного списка диагностических команд и способов устранения неполадок, файл ../vss-generate-video-calibration/SKILL.md — при сбоях в рабочем процессе AMC, а файл ../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 показывает «Active sources: 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, ... |
Унифицируйте все названия камер в соответствии с шагом 0 в файле references/configure-cameras.md, затем очистите устаревшее состояние VST и выполните повторное развертывание |
| Сбой при создании проекта AMC, загрузке, калибровке или экспорте MV3DT | Проблема со службой/API AutoMagicCalib вне данного пути развертывания MV3DT | Используйте файл ../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 |
Сгенерируйте оба файла, выполнив шаг 4b из references/calibration-workflow.md, а затем перезапустите импортер one-shot |
| Сбой при загрузке изображений, загрузке модели или при первом запуске сборки движка | Отсутствует или истек срок действия NGC_CLI_API_KEY, неверно указан VSS_DATA_DIR, отсутствуют файлы BodyPose3DNet или произошло исчерпание памяти (OOM) на GPU |
Повторно проверьте авторизацию NGC, убедитесь в наличии каталога ${VSS_DATA_DIRECTORY}/models/mv3dt/BodyPose3DNet/, просмотрите конец журналов vss-rtvi-cv-mv3dt и освободите память или измените значение RT_CV_DEVICE_ID, если память GPU исчерпана |
Перед выполнением операций, приводящих к потере данных (завершение работы docker compose с параметром -v, очистка data_log, удаление состояния датчиков VST или изменение списков доступа хоста), объясните последствия и получите подтверждение от пользователя. Перед выполнением действий, приводящих к сбросу состояния, зафиксируйте неудачную команду, соответствующие значения файла .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 + расширенный/минимальный)
└─> verify-and-view.md (FPS, готовность к слиянию, mdx-bev, видеостена VST + проверки WebRTC)
Связанные навыки
vss-generate-video-calibration— навык AMC. Отвечает за развертывание AMC, захват RTSP, API калибровки и хук экспорта/v1/result/.../mv3dt_result, который использует данный навык. Файл calibration-workflow.mdподключается к нему.vss-deploy-profile— общий профиль для всех профилей. Используйте его вместо этого, если пользователю требуется полный шаблон хранилища (с агентами / LLM / VLM), а не только MV3DT.vss-manage-video-io-storage— навык для API VIOS / VST. Полезен для видеостены VST (накладная визуализация) и для управления датчиками, упомянутого в файле configure-cameras.md.
Авторитетный справочник по чертежу склада в репозитории, расположенный по адресу ../vss-deploy-profile/references/warehouse.md, охватывает 2D, 3D и MV3DT в рамках полного стека склада — данный навык является сопутствующим навыком, предназначенным исключительно для MV3DT, который исключает уровень агентов, 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.
Все файлы
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
Копировать





Дом
