Détection et suivi du déploiement VSS 3D
Quand utiliser cette compétence
Déployez la stack MV3DT RT-CV-3D autonome depuis services/rtvi/rt-cv-3d/rt-cv-mv3dt.
C'est le chemin par défaut pour les demandes MV3DT / RTVI-CV-3D / suivi multi-caméra.
Ne dérivez pas les services MV3DT du blueprint warehouse pour cette compétence. Utilisez
vss-deploy-profile uniquement lorsque l'utilisateur demande explicitement warehouse MV3DT,
le blueprint warehouse, un profil bp_wh*, des fichiers compose warehouse, ou la stack
d'application warehouse combinée. Lors du routage d'une demande MV3DT warehouse explicite,
énoncez également la limite : MV3DT générique utilise RT-CV-3D autonome, tandis que
warehouse MV3DT utilise le déploiement warehouse/profil. Pour la détection ou le suivi 2D
mono-caméra, utilisez plutôt les compétences de suivi 2D ou DeepStream.
Documentation publique : https://docs.nvidia.com/vss/latest/object-detection-tracking.html.
Exemples
Exemples de prompts opérationnels :
- « Déployez MV3DT sur mon dataset MP4 à quatre caméras calibré et sauvegardez la sortie. »
- « Déployez MV3DT sur le dataset exemple. »
- « Activez le suivi multi-caméra sur le dataset exemple 4-cam. »
- « Exécutez RTVI-CV-3D sur ces flux RTSP après calibrage. »
- « Déployez le suivi multi-cam ; s'il n'y a pas d'affichage, sauvegardez les vidéos. »
- « Utilisez un courtier MQTT externe et Kafka externe pour ce déploiement RT-CV-3D. »
- « Vérifiez le déploiement RT-CV-3D autonome et affichez les chemins de sortie. »
- « Arrêtez tout pour MV3DT autonome. »
Permissions de sortie
Limitez les permissions de sortie aux chemins runtime autonomes. Si les écritures de sortie échouent, signalez plutôt le propriétaire/mode du répertoire, l'utilisateur du conteneur et les logs pertinents au lieu d'assouplir largement les permissions.
Ce que cela déploie
Le fichier compose autonome est services/rtvi/rt-cv-3d/rt-cv-mv3dt/docker/compose.yml.
Il déploie :
| Service | Conteneur | Rôle |
|---|---|---|
perception |
vss-rtvi-cv-mv3dt |
Perception RT-DETR plus MV3DT DeepStream ; publie les mesures 3D par caméra sur le topic Kafka mdx-raw et utilise l'échange tracklet MQTT /trck/*. |
bev-fusion |
vss-rtvi-cv-bev-fusion |
Consomme mdx-raw, fusionne les mesures de même objet entre caméras et publie mdx-bev. |
mosquitto |
vss-mosquitto-mv3dt |
Courtier MQTT bundlé optionnel, activé par le profil compose mosquitto. |
kafka |
kafka |
Courtier Kafka bundlé optionnel, activé par le profil compose kafka. |
kafka-topic-init |
kafka-topic-init |
Initialisateur de topic à usage unique optionnel pour mdx-raw et mdx-bev, activé par le profil compose kafka. |
La stack autonome ne déploie pas VST, VIOS, NvStreamer, Elasticsearch, Kibana, Logstash, video-analytics-api, analytique comportementale, contrôleur SDR, configurateur warehouse, agents, LLM ou services VLM.
Règles fondamentales
- Utilisez par défaut les courtiers bundlés et
COMPOSE_PROFILES=mosquitto,kafkapour les opérations Compose avec courtiers bundlés. Avantgenerate-configs.sh,stage-configs.shou lancement bundlé, exécutez le précontrôle de ressources bundlé : réutilisez les conteneurs autonomes existants de cette app sans réécrire les ports, rejetez les collisions de conteneurs de nom fixe étrangères, et pour un nouveau départ sélectionnez les ports Kafka, MQTT et DeepStream REST libres dans ledocker/.envautonome. N'utilisez pasdocker compose up -dfull-stack comme chemin de lancement en mode fichier générique ; le mode fichier doit démarrer les services support, capturer les lignes de base Kafka, optionnellement prémarrer BEV, et seulement ensuite démarrerperceptionavec--no-deps. - Pour les demandes de courtier externe explicites, collectez, exportez et validez
MQTT_HOST,MQTT_PORTetKAFKA_BOOTSTRAP; définissezUSE_EXTERNAL_BROKERS=1; générez la config pub/sub avecMQTT_BROKERS="${MQTT_HOST}:${MQTT_PORT}" ./scripts/generate-configs.sh; vérifiez quemdx-rawetmdx-bevexistent déjà sur Kafka externe aveckafka-topics --describeborné ; utilisez le mode Compose courtier-externe sans profils bundlés ; et vérifiez les offsets Kafka contre leKAFKA_BOOTSTRAPexterne. Les exécutions en mode fichier courtier-externe suivent toujours le même ordre à deux phases. Déléguez uniquement les variantes TLS/auth à la section custom-broker du README autonome. - Exigez une entrée multi-caméra calibrée et synchronisée en temps. MV3DT nécessite au moins deux caméras ; les sources à 30 FPS doivent être synchronisées à environ une durée de frame près.
- Pour les fichiers enregistrés, utilisez
INPUT_MODE=file; chaque nom.mp4doit correspondre à un id de capteur danscalibration.jsonet lacamInfogénérée. L'entrée fichier est une exécution de batch finie : dites à l'utilisateur d'avance quevss-rtvi-cv-mv3dts'arrête après fin de flux et que les conteneurs support restants sont arrêtés après vérification réussie sauf si l'utilisateur demande de les conserver. - Pour le dataset exemple / dataset exemple 4-cam, chargez
references/sample-dataset.md. Utilisez le flux exemple autonome : app-data warehouse NGC pour modèles/vidéos, exemple de repocalibration.jsonetTop.pngpour calibrage/carte BEV, transformations générées,INPUT_MODE=file,NUM_CAMS=4, courtiers bundlés, puis la décision d'affichage normal : décision affichage/sauvegarde : OSD live plus BEV fusionné live quand un affichage fonctionnel est trouvé et l'utilisateur n'a pas demandé à sauvegarder ; grille sauvegardée plus BEV fusionné sauvegardé quand sans tête ou demandé explicitement. - Quand l'utilisateur fournit des chemins MP4, préservez-les comme entrées de déploiement. Utilisez leur répertoire comme
VIDEO_DIRquand les noms de base correspondent déjà aux ids de capteurs ; sinon créez des symlinks générés nommés<sensor_id>.mp4uniquement quand le mappage est explicite ou sans ambiguïté par count/ordre. Ne mutez pas les vidéos source. - Pour RTSP live, utilisez
INPUT_MODE=stream. L'enregistrement REST dynamique est le premier chemin ; les clés de flux doivent correspondre aux ids de capteurs de calibrage. Utilisez le bloc d'enregistrement REST direct dansreferences/configure-cameras.mdpour que le JSON de readiness soit analysé indépendamment de l'espace blanc. Ne traitez pasSTREAM_ADD_SUCCESSoustream-countseul comme succès. Un déploiement RTSP live réussit seulement quand les sources attendues deviennent actives, chaque caméra a un FPS récent non-nul, et les offsetsmdx-raw/mdx-bevaugmentent. - Quand l'utilisateur fournit des URLs RTSP, préservez-les comme entrées de déploiement et enregistrez-les après que le service compose en mode flux soit exécuté avec le bloc REST direct dans
references/configure-cameras.md; le bloc attend/api/v1/readypour queds-readydevienneYES, donc la ligne logds-ready: YESest preuve diagnostique optionnelle. N'arrêtez pas en disant à l'utilisateur d'exécuter l'enregistrement manuellement. Demandez le mappage uniquement si les URLs nues ne peuvent pas être mises en correspondance avec les ids de capteurs de calibrage par count/ordre. Si l'enregistrement dynamique accepte les flux mais que les sources actives, FPS ou croissance Kafka restent zéro après vérification bornée, traitez l'ajout dynamique comme échoué et utilisez le fallback RTSP statique générique[source-list]dansreferences/configure-cameras.mdavec les mêmes mappagessensor_id=rtsp://...fournis par l'utilisateur. Ne substituez pas l'exemple de calibrage ou les mappages de caméras exemple sauf si l'utilisateur a explicitement demandé le dataset exemple. - Si le calibrage est manquant, transmettez à
vss-generate-video-calibrationet exécutez son précontrôle de plateforme AMC avant VIOS, capture, upload ou travail de calibrage. Si le précontrôle échoue, arrêtez et demandez à l'utilisateur de fournir les artefacts de calibrage existant/généré ou de choisir un hôte de calibragex86_64dGPU/NVENC supporté. Pour le calibrage RTSP, utilisezvss-manage-video-io-storageuniquement pour apporter ou vérifier le prérequis VIOS quand VIOS n'est pas déjà déployé/accessible ; AMC possède le calibrage et le câblage envVIOS_BASE_URLune fois VIOS disponible. - N'utilisez pas VST pour la visualisation. Utilisez le chemin OSD autonome/save-video et les scripts visualiseur BEV.
- Exécutez toujours la sonde d'affichage réelle dans
references/configure-cameras.mdavant de choisirOSD=0comme fallback sans tête ; n'inférez pas le mode sans tête seulement à partir de la présence GPU, de l'installationxdpyinfoou d'unDISPLAYobsolète/manquant. Traitez le mode d'affichage comme deux fenêtres live par défaut : la grille de caméras OSD DeepStream et le visualiseur BEV fusionné séparé. Traitezsave video,save outputet fallback sans tête confirmé comme grille de perception sauvegardée plus BEV fusionné sauvegardé par défaut. Avant lancement, précontrôlez les outils hôte nécessaires pour la sortie sélectionnée :ffprobepour vérification d'artefacts sauvegardés, et les dépendances Python/OpenCV/Kafka du visualiseur BEV quand la visualisation/enregistrement BEV est activé. Avant de promettre BEV, résolvezBEV_DATASET_PATHen un répertoire contenant à la foismap.pngettransforms.yml; si l'un manque, demandez l'asset BEV manquant ou signalez explicitement la sortie perception-grid-only. - La vidéo BEV n'est pas émise par le conteneur perception. Elle est produite par le consommateur Kafka
scripts/bev-visualizer.shcôté hôte séparé. Pour l'entrée fichier finie, gardez le processus BEV sous la même session/shell long-lived qui démarre la perception, attend l'EOS, vérifie les offsets/artefacts, finalise BEV et effectue le nettoyage ; ne démarrez pas BEV dans un appel outil court séparé et ne supposez pas quenohup ... &survivra au nettoyage de groupe de processus runner. Attendez l'affectation Kafka et vérifiez que le PID est encore vivant immédiatement avant la perception en mode fichier ou l'enregistrement de flux RTSP. Pour les exécutions live d'entrée fichier fini avec affichage, démarrez le BEV fusionné live avant la perception et, après l'EOS, dites à l'utilisateur d'appuyer surqdans la fenêtre BEV ou arrêtez uniquement le PID BEV du run courant suivi via le flux de teardown sûr.
Workflow
Utilisez le tableau de sélection de workflow et les stages de run ci-dessous. Chargez uniquement les références nécessaires pour le chemin sélectionné de l'utilisateur pour entrée, courtier, visualisation, calibrage et vérification.
Sélection de workflow
Chargez les références minimales nécessaires pour la demande actuelle :
| Intention utilisateur | Références |
|---|---|
Configuration initiale, prérequis, modèles/assets, .env |
references/deploy-rtvi-cv-3d-stack.md |
| Dataset exemple, dataset exemple 4-cam, dataset synthétique warehouse 4-caméra | references/sample-dataset.md, puis references/configure-cameras.md, references/deploy-rtvi-cv-3d-stack.md et references/verify-and-view.md |
| Calibrage existant ou nouvellement généré ; entrée MP4 locale ou config RTSP | references/configure-cameras.md |
| Calibrage manquant | references/calibration-workflow.md, puis references/configure-cameras.md |
| Lancer ou redéployer la stack | references/deploy-rtvi-cv-3d-stack.md |
| Ajouter/lister/supprimer des flux RTSP live | references/configure-cameras.md |
| Vérifier les conteneurs, logs, topics Kafka ou artefacts de sortie | references/verify-and-view.md |
| OSD live, vidéo perception sauvegardée, BEV live ou vidéo BEV sauvegardée | references/verify-and-view.md |
| Nettoyage post-run de services support d'entrée fichier terminé ; arrêtez, tarez tout ou nettoyez l'état généré | references/teardown.md |
| Diagnostiquer les défaillances | references/troubleshooting.md |
Stages de run
Suivez ces stages pour le travail de déploiement :
- Résolvez
RTCV3D_APPenservices/rtvi/rt-cv-3d/rt-cv-mv3dt. - Identifiez le mode d'entrée :
filepour les MP4 locaux oustreampour RTSP. - Si l'utilisateur a demandé le dataset exemple ou le dataset exemple 4-cam, chargez d'abord
references/sample-dataset.md. Résolvez/téléchargez app-data, définissezMODELS_DIR,VIDEO_DIR=<APP_DATA_DIR>/videos/warehouse-4cams-20mx20m-synthetic,CALIBRATION_JSON,BEV_DATASET_PATH,NUM_CAMS=4etINPUT_MODE=file, puis continuez avec la validation des caméras et la décision affichage/sauvegarde normale avant de définirOSD,SAVE_VIDEOouBEV_SAVE_VIDEO. - Validez ou obtenez
calibration.json. Si manquant, transmettez àvss-generate-video-calibrationpar nom et ne dupliquez pas le workflow AMC inline. Incluez explicitement le chemin d'échec du précontrôle de plateforme AMC : arrêtez et demandez les artefacts de calibrage existant/généré ou un hôte de calibragex86_64dGPU/NVENC supporté. Après la fin d'AMC, récupérez le ZIP d'export MV3DT AMC, exportezcalibration.json, validez le JSON en filtrant les capteurs oùtype == "camera"et exigez au moins deux IDs de caméra uniques non-vides et sûrs, puis staged les assets BEV avant de continuer. Pour la sortie sauvegardée ou la visualisation BEV, résolvezBEV_DATASET_PATHen un répertoire contenant à la foismap.pngettransforms.ymlavant le lancement. - Définissez les valeurs requises dans
docker/.env:MODELS_DIR,NUM_CAMS,INPUT_MODE,VIDEO_DIRpour l'entrée fichier et les valeurs image/GPU optionnelles. Pour les chemins MP4 fournis, pointezVIDEO_DIRsur le répertoire source correspondant ou sur un répertoire de symlink généré avec un<sensor_id>.mp4par caméra. - Initialisez le mode courtier avant la génération ou le staging de configs. Pour le mode bundlé, exécutez maintenant le précontrôle de ressources bundlé dans
references/deploy-rtvi-cv-3d-stack.mdpour queMQTT_PORT,KAFKA_PORTetKAFKA_BOOTSTRAPsélectionnés soient déjà dansdocker/.env. Pour le mode externe, validez les endpoints du courtier et les topics requis avant le lancement. - Générez
generated/camInfo/etgenerated/pub_sub_info_config.ymldepuiscalibration.jsonavec lescripts/generate-configs.shautonome, en utilisant l'endpoint MQTT sélectionné ; ne montez pas les répertoires de calibrage MV3DT warehouse. - Exécutez la sonde d'affichage concrète depuis
references/configure-cameras.mdavant le staging de configs ; elle doit tester leDISPLAYcourant et les candidats de socket X découverts tels que:0/:1, exporter unDISPLAYfonctionnel quand trouvé, et imprimerRTCV3D_DISPLAY_AVAILABLE. Puis choisissez la visualisation :- Si un affichage fonctionnel est détecté et l'utilisateur n'a pas demandé à sauvegarder, staged avec
OSD=1 SAVE_VIDEO=0, définissezBEV_SAVE_VIDEO=0 BEV_SOURCE=fusedet utilisez la visualisation BEV fusionnée live quand les assets BEV sont présents. - Si aucun affichage n'est détecté, utilisez la sortie sauvegardée comme fallback par défaut : définissez
SAVE_VIDEO=1et sauvegardez le BEV fusionné après queBEV_DATASET_PATHse résolve avec les deux fichiers requis. - Si l'utilisateur a demandé à sauvegarder la sortie, définissez
SAVE_VIDEO=1même quand un affichage existe et sauvegardez aussi le BEV fusionné par défaut après queBEV_DATASET_PATHse résolve avec les deux fichiers requis. - Si l'utilisateur a demandé à la fois l'affichage live et la sortie sauvegardée, utilisez
OSD=1 SAVE_VIDEO=1et démarrez le BEV fusionné sauvegardé en parallèle.
- Si un affichage fonctionnel est détecté et l'utilisateur n'a pas demandé à sauvegarder, staged avec
- Staged les configs DeepStream avec
scripts/stage-configs.sh, puis assertez quegenerated/configs/ds-main-config-mv3dt.txtcontient unemsg-broker-conn-strKafka correspondant àKAFKA_BOOTSTRAPsélectionné etRAW_TOPIC. PourINPUT_MODE=file, assertez aussi que la config staged désactive le drop de latence live :[source-list] low-latency-mode=0,[source-attr-all] drop-on-latency=0et[source-attr-all] latency=100000. - Précontrôlez la sortie/outillage et la capacité d'écriture du cache de modèles. Les constructions froides de moteurs TensorRT peuvent prendre 5-10 minutes et doivent pouvoir persister les moteurs sous les répertoires de modèles montés. Énoncez cet avertissement et le motif de remédiation ACL scopé dans le statut/rapport visible par l'utilisateur. Si un cache de modèles n'est pas inscriptible par le UID/GID du conteneur, arrêtez et demandez l'approbation avant d'appliquer une ACL à seulement le répertoire de modèles affecté, par exemple
sudo setfacl -m u:<uid>:rwx -m d:u:<uid>:rwx <model-dir>; n'utilisez pas largechmod 777ou largechownrécursif. - Pour chaque exécution
INPUT_MODE=file, démarrez les courtiers sélectionnés etbev-fusion, attendez la readiness du courtier/topic-init/BEV Fusion, puis capturez les lignes de base Kafka avant de démarrerperception. Faites cela même quand la sortie sauvegardée ou la visualisation BEV n'est pas demandée. - Si le BEV sauvegardé est sélectionné/par défaut, ou si l'entrée fichier a besoin d'une visualisation BEV live/sauvegardée, utilisez le lancement à deux phases dans
references/deploy-rtvi-cv-3d-stack.md: après la readiness support et les lignes de base fichier, démarrez le visualiseur/enregistreur BEV dans la même session/shell long-lived qui démarreraperception, attendez l'EOS, vérifiez les sorties et finalisez BEV. Attendez l'affectation du groupe de consommateurs Kafka, vérifiez que le PID de l'enregistreur est encore vivant, puis démarrezperceptionavec--no-deps. La sortie sauvegardée utiliseBEV_SAVE_VIDEO=1 BEV_SOURCE=fusedpar défaut ; la sortie affichage-only utiliseBEV_SAVE_VIDEO=0 BEV_SOURCE=fusedpour que la fenêtre BEV soit live. Pour le mode stream sans exigence de prémarrage BEV, le lancement Compose full-stack est acceptable : bundlé utiliseCOMPOSE_PROFILES=mosquitto,kafka docker compose up -d; externe utilisedocker compose up -d. N'utilisez jamais full-stackdocker compose up -dpour l'entrée fichier. - Pour l'entrée RTSP, après que le stream-mode compose soit exécuté, enregistrez les flux fournis avec le bloc REST direct dans
references/configure-cameras.md, qui attend/api/v1/readypourds-ready=YESen utilisant l'analyse JSON. Utilisez des paires explicites<sensor_id>=<rtsp_url>quand fournies ; sinon mappez les URLs nues aux ids de capteurs de calibrage uniquement quand les counts et ordres sont clairs. Préservez le mappage final pour qu'il puisse aussi être utilisé pour le fallback static RTSP source-list si l'ajout REST dynamique ne produit pas les sources actives. - Pour RTSP, vérifiez la readiness REST, l'enregistrement exact du flux, les FPS non-nuls, la croissance des offsets
mdx-raw/mdx-bevet les artefacts de visualisation demandés. Si l'enregistrement réussit mais que les sources actives/FPS/Kafka restent zéro, retuaged le même mappage RTSP comme[source-list]statique, redémarrez seulement la perception comme approprié pour le mode stream et réexécutez la même vérification. Pour l'entrée fichier, n'exigez pasds-ready: YES; traitezvss-rtvi-cv-mv3dtExited (0)avecApp run successfulcomme succès EOS, puis exigez que les offsetsmdx-rawetmdx-bevsoient plus grands que les lignes de base pré-run. - Pour les exécutions d'entrée fichier terminées, après vérification des sorties, arrêtez seulement les services support autonomes restants sauf si l'utilisateur a demandé de les garder en exécution pour inspection ou réutilisation. Préservez les configs générées, calibrage, vidéos et sorties.
Critères de succès
generated/camInfo/contient un.ymlpar capteur de caméra filtré etgenerated/configs/existe.- Les images runtime sont signalées depuis
docker compose config --images; la compétence n'infère pas les tags d'image de sa propre version. docker composeutiliseservices/rtvi/rt-cv-3d/rt-cv-mv3dt/docker/compose.yml.vss-rtvi-cv-bev-fusiondevienthealthy.- Pour RTSP : REST
/api/v1/readysignaleds-ready=YES, le count de flux enregistré égaleNUM_CAMS, les IDs enregistrés correspondent exactement aux IDs camInfo générés sans doublons/extras, chaque source attendue a un FPS récent non-nul et les offsetsmdx-rawetmdx-bevaugmentent tandis que les flux sont actifs. - Pour l'entrée fichier :
vss-rtvi-cv-mv3dtpeut finir commeExited (0)après l'EOS et n'est réussi que quand les logs incluentApp run successfulet les deux offsetsmdx-rawetmdx-bevdépassent les lignes de base pré-run. - Si OSD live a été sélectionné, l'accès à l'affichage a été vérifié avant staging avec
OSD=1sans largexhost +et la visualisation en mode affichage inclut à la fois la fenêtre OSD de grille de caméras DeepStream et la fenêtre visualiseur BEV fusionné séparée quand les assets BEV sont présents. - Si la sortie sauvegardée a été sélectionnée/par défaut, signalez le
video-output/grid-view.mkvdu run courant et les chemins d'artefact BEV sauvegardés avec taille non-vide, vérifications de timestamp de début de run, succèsffprobeet preuve log BEV courante incluantVideo savedavec count de frame positif. Si BEV a été ignoré parce que les assets manquaient, signalez cela explicitement. - Si la visualisation BEV live a été sélectionnée, signalez le PID/log visualiseur suivi, la preuve d'affectation du groupe de consommateurs Kafka et pour l'entrée fichier finie soit que l'utilisateur a fermé la fenêtre BEV avec
qsoit que le PID du run courant suivi a été arrêté sûrement après l'EOS.
Compétences associées
vss-generate-video-calibrationpossède le déploiement AMC et le calibrage depuis des MP4 locaux ou des flux RTSP.vss-manage-video-io-storageest utilisé uniquement pour apporter ou vérifier VIOS quand le calibrage RTSP nécessite VIOS et qu'il n'est pas déjà déployé.vss-deploy-profilepossède les déploiements blueprint warehouse full, incluant les demandes warehouse MV3DT explicites.