计算机视觉/视频分析

借助 NVIDIA DeepStream 9.1 技能构建多摄像头 3D 追踪应用

在大型空间中构建视频分析应用程序的开发者必须在同一物体在摄像头视图之间移动时对其进行跟踪。单摄像头 2D 追踪缺乏可靠的深度信息,通常在物体离开帧时失去对物体的追踪,从而限制了仓库安全、零售分析和智能建筑监控等应用。目前的 3D 追踪方法需要手动摄像头校正和复杂的计算。

NVIDIA DeepStream 9.1 通过 AutoMagicCalib (AMC)多视图 3D 追踪 (MV3DT) 解决了这一挑战。AMC 和 MV3DT 将来自多个自动校准摄像头的检测结果融合到一个共享的 3D 坐标系统中,并在各个视图中保持一致的目标 ID。

本文将详细介绍 MV3DT 和 AMC,以及如何开始使用 DeepStream 9.1,这是简化和加速视觉 AI 工作流开发的重大飞跃。

DeepStream 9.1 十分重视模块化、自动化和边缘性能,引入了一系列强大的代理式技能,可帮助开发者更快、更准确地从概念过渡到部署。

DeepStream 9.1 的新功能:

  • 获得旨在加速视觉 AI 开发的 13 种代理式技能。
  • 多摄像头 3D 追踪 (MV3DT) 技能,可跨多个摄像头流进行准确的端到端物体追踪。
  • AutoMagicCalib (AMC) 技能,可自动进行摄像头校正,减少手动操作并更大限度地减少错误。
  • 支持 NVIDIA JetPack 7.2,可在 Orin 和 Thor 等 Jetson 边缘平台上加速视觉 AI 性能。
  • 通过统一的 GitHub 资源库提供开源资源,简化采用、定制和维护流程。
视频 1:使用 DeepStream 技能进行端到端 MV3DT 部署,从自然语言提示到运行的多摄像头 3D 跟踪工作流

DeepStream 9.1 现已通过 NVIDIA DeepStream GitHub 资源库 提供,其中包括全面的源代码和参考应用。

MV3DT 如何跨摄像头追踪物体

MV3DT 将来自多个校准摄像头的检测结果投射到共享的 3D 坐标系统中。然后,它将同一物体在摄像头视图中的观察结果关联起来,并分配一个全局一致的物体 ID。每个摄像头都独立地将物体投射到 3D 中,而系统则融合这些输入,以确保全局一致的追踪。

这可确保每个物体在整个环境中都保持唯一、稳定的 ID,并在统一的世界坐标系统中计算位置。

研究论文“Fully Distributed Multi-View 3D Tracking in Real-Time” (实时完全分布式多视图 3D 追踪) 详细介绍了底层多视图关联算法和 3D 融合技术,详见研究论文“Fully Distributed Multi-View 3D Tracking in Real-Time”

了解 MV3DT 架构

MV3DT 扩展了 DeepStream 追踪器,支持在经过校准的摄像头网络中进行分布式多视图 3D 追踪。

数据如何流经系统:

  • 检测功能:DeepStream 工作流可处理所有摄像头流,并由 MV3DT 追踪器独立检测和追踪每个视图中的物体。它支持三种开箱即用的检测器模型:
    • PeopleNetTransformer:基于Transformer的人员检测器,默认用于行人场景。
    • PeopleNet v2.6.3:基于 NV_skp_25 架构的高效检测器。
    • RT-DETR 2D:多类别检测器,非常适合工业环境,可检测行人、运输工具和叉车。
  • 单目 3D 感知:每个摄像头都使用 3 × 4 投影矩阵 (存储在 YAML 校正文件中) ,使用地面平面假设将 2D 边界框检测结果反向投射到 3D 世界空间坐标中。
  • 多视图关联:追踪器使用消息队列遥测传输 (MQTT) ,这是一种轻量级发布/ 订阅消息传递协议,可在摄像头之间共享轨迹链。当两个摄像头观察到同一个人时,多视图关联算法会使用 3D 世界空间中的距离来匹配其轨迹,并分配一个全局一致的目标 ID。
  • 输出:跟踪结果以三种形式输出:
    • 屏幕显示 (OSD):提供带有叠加 2D/3D 边界框和共享 ID 的实时摄像头输入网格。
    • 鸟瞰图 (BEV):提供实时 2D 自上而下的地图,通过布局图像渲染,显示世界坐标中的物体轨迹。
    • Kafka Messaging:为下游应用提供每帧的结构化 protobuf 元数据,例如传感器 ID、物体 ID 和 3D 边界框。

如何使用 AutoMagicCalib 校准摄像头网络

MV3DT 需要经过校准的摄像头,将图像像素准确映射到 3 × 4 投影矩阵上的世界坐标。传统方法需要手动操作且耗时,通常需要在摄像头前放置校准图案 (如方格板) ,这意味着需要中断操作并在空间中放置特殊设备。

AMC 使用 DeepStream 分析在现有视频文件或视频流中移动的追踪对象,从而简化和自动化摄像头网络校准流程。

AMC 可自动估算每个摄像头的内部 (焦距、主点、镜头失真) 和外部 (旋转、平移、世界位置) 参数,从而为 MV3DT 等应用生成校准文件。AMC 可以选择使用 Visual Geometry Grounded Transformer (VGGT),这是一种基于模型的方法,可在物体移动受限时利用学习到的模型实现更高的准确性和鲁棒性。

内部校准流程涉及以下阶段:

  1. 按摄像头提取轨迹:DeepStream 可检测并追踪每个视频中的物体。AMC 收集生成的轨迹数据。
  2. 单视图校正和校正: 对于每个单独的摄像头,AMC 会根据轨迹估算内部参数 (焦距、投影矩阵、镜头失真) ,并生成校正后的视图。
  3. 多视图轨迹匹配: AMC 使用手动提供的对齐点作为摄像头视图和布局图之间的初始锚点,跨摄像头匹配目标轨迹。
  4. 捆绑调整:所有摄像头参数在每个视图中共同优化,以更大限度地减少全局二次投影错误。
  5. 可选的 VGGT 校准:用户可以选择运行 VGGT,这是一个基于模型的单独校准工作流,在物体移动受限或学习到的几何图形提供更可靠的校准结果时非常有用。

用户只需提供布局图像,并通过在摄像头视图和地图上选择相应的地标来定义几个对齐点即可。AMC 以微服务的形式提供,同时配备 REST API 和 Web 界面。

借助 NVIDIA DeepStream 智能体技能构建和部署应用

DeepStream 9.1 引入了模块化技能,专为编码智能体 (例如 Cloude Code、Codex) 或您选择的任何其他智能体 (包括 MV3DT 和 AMC) 而设计。您无需手动运行脚本和编辑配置文件,只需使用简单的自然语言提示词描述所需内容,智能体即可处理设置、配置和执行。

您可以在博文“如何使用 NVIDIA DeepStream 技能和编码智能体构建视觉 AI 工作流”中详细了解 DeepStream 技能和编码智能体。

我们将使用以下技能部署多摄像头应用:

  • MV3DT 技能:这项全面的技能可管理 MV3DT 部署生命周期,包括:
    • 验证前提条件 (操作系统、GPU 驱动程序、Docker 运行时)
    • 提取或构建所需的 DeepStream 容器
    • 安装 Kafka 和 Mosquitto 代理服务
    • 下载检测模型权重 ( PeopleNetTransformer、RT-DETR)
    • 根据您的数据集生成 DeepStream 工作流配置
    • 如果找不到校准文件,则自动触发 AMC 技能
    • 启动完整的多摄像头追踪工作流
  • AMC 技能: 这些技能处理 AMC 生命周期:
    • amc-setup-calibration-stack:拉取 AMC 微服务容器并启动服务堆栈 ( Web UI+ REST API) 。
    • amc-run-sample-calibration:对捆绑的样本数据集运行端到端校准;这对于在使用自己的数据之前验证新的 AMC 安装非常有用。
    • amc-run-video-calibration:帮助校准新的视频文件数据集、布局图像和对齐点,以生成适用于 MV3DT 等下游应用的校准 YAML 文件。
    • amc-run-rtsp-calibration:帮助校准直接来自 RTSP 流的新数据集。

您可以在 DeepStream GitHub 资源库 中找到整套最新技能。

以下工作流展示了开发者如何从资源库设置过渡到正在运行的 MV3DT 应用。可以针对所使用的编码智能体和数据集调整确切的提示词。

预备知识

  • Ubuntu 24.04 ( x86_64)
  • NVIDIA 驱动程序版本 580 或更高版本
  • 采用 NVIDIA 容器工具包的 Docker
  • 安装并验证克劳德 Code 或 Codex
  • NGC API 密钥 (从 `nvcr.io` 提取 DeepStream 和 AMC 容器)
  • 使用 Face 键提取 VGGT 模型以执行 AMC 优化步骤
  • 用于显示:X11 或 VNC 远程桌面 (可选,无外设模式可保存输出视频)

我们开始吧!

第 1 步:克隆仓库并安装技能

git clone https://github.com/NVIDIA/DeepStream.git
cd DeepStream

将技能复制到编码智能体的技能目录中。路径取决于您使用的智能体:

# Claude Code: ~/.claude/skills/
# Codex: ~/.codex/skills/
# Cursor: ~/.cursor/skills/

# Example for Codex (adjust path for your agent):
mkdir -p ~/.codex/skills

cp -r skills/* ~/.codex/skills/

还可以在工作空间级别 (范围为单个项目) 安装技能。请参阅 DeepStream 技能自述文件,了解完整的安装详情和工作空间级说明。

第 2 步:启动编码代理

在 DeepStream 存储库根目录中,启动您的编码代理:

claude
# or
codex

这就是所需的全部设置。在这里,您可以使用自然语言提示进行交互。

场景 A:在 12 个摄像头的样本数据集上运行 MV3DT

MV3DT 技能包括 4 个摄像头和 12 个摄像头的样本数据集 (已包含校准) ,无需 AMC 步骤。对于此示例,我们将使用 12 个摄像头的数据集。将此示例提示粘贴到智能体中:

Sample prompt: deploy mv3dt on the 12-camera sample dataset

智能体将指导您完成以下步骤:

  1. 检查您的系统是否具有显示器访问权限 (X11/ VNC) ,如果未找到显示器,则检测无外设模式。
  2. 在运行经授权的 Docker 命令 (`sudo xhost +` and `--privileged`) 之前,请先获得您的批准。
  3. 运行设置脚本以下载模型,启动 Kafka 和 Mosquitto 服务,并准备工作流。
  4. 启动 DeepStream 容器并开始跟踪。首次运行可能需要几分钟时间来构建和加载模型引擎。

如果显示器可用,则会打开两个窗口:

  • DeepStreamTest5App:由全部 12 个摄像头输入画面组成的平铺网格,带有 2D 和 3D 边界框
  • 多视图 3D 追踪的鸟瞰图: 世界坐标中的实时轨迹图

按下任一窗口中的 `q` 即可退出。智能体会提醒您这一点。在无外设模式下,智能体在实验目录中生成输出视频 ( tiled_display_raw.mp4 和 BEV 轨迹视频) 。有关输出示例,请参阅 MV3DT 资源库 中的 12 摄像头 BEV 轨迹 GIF。

experiments/deepstream/12cam/
├── config_deepstream.txt           # Generated pipeline config
├── config_tracker.yml              # MV3DT tracker config
├── outVideos/
│   └── tiled_display_raw.mp4      # Multi-camera grid with 2D and 3D overlays
└── bev_outputs/
    └── trajectory_video_<timestamp>.mp4   # BEV trajectory video

场景 B:在您自己的摄像头上运行 MV3DT (以及 AMC 校准)

要使用未经事先校准的自定义同步视频流,请提供目录路径:

Sample prompt: deploy mv3dt on these videos ~/my-camera-dataset/videos

确保文件夹中包含按摄像头顺序命名的时间同步视频文件 (例如。cam_00.mp4cam_01.mp4) ,以及 BEV 图像布局 (layout.png) 。然后,智能体执行以下步骤:

  1. 验证视频源文件夹。
  2. 检测到缺少 `camInfo/*.yml` 校准文件,并且需要进行校准。
  3. 按顺序自动调用 AMC 技能,先调用 amc-setup-calibration-stack 启动 AMC 微服务,然后调用 amc-run-video-calibration 开始校准。

在开始校准之前,智能体将询问几个配置问题。在这里,出现提示时,您可能必须指定检测器类型和校准设置。

> Agent: What detector type would you like to use for calibration? (resnet or transformer)
> User: Resnet

> Agent: Do you have a calibration settings file to upload?
> User: No, I will update on the UI

启动 AMC 微服务后,智能体将提供 Web UI 地址。在浏览器中打开它以完成手动对齐步骤,即相机视图和布局图之间的对齐点。保存后,通知智能体:

> User: alignment is done

AMC 运行完整的校准流程:轨迹提取、单视图校正、多视图轨迹匹配和束调整。智能体将轮询完成,完成后,下载兼容 MV3DT 的校准导出,并将 YAML 文件放入 `~/my-camera-dataset/camInfo/` 中。

然后,MV3DT 使用生成的校准数据在您的数据集上自动运行。

成功部署 MV3DT 会产生以下输出:

  • 实时 OSD 窗口: 所有摄像头输入均位于平铺网格中,其中包含 2D 和 3D 边界框以及一致的对象 ID。单击任意摄像头进行放大;右键返回网格。
  • 实时 BEV 窗口: 包含屏幕截图和录制选项的自上而下的轨迹映射。
  • Kafka 元数据流: `mv3dt` 主题上的每帧 protobuf 消息,包含物体 ID、3D 边界框坐标、置信度分数和传感器 ID。它们可用于下游分析、仪表板或警报系统。
  • 已保存的视频: 启用文件输出后,系统会保存一个平铺式 OSD 视频和一个 BEV 轨迹视频。

开始使用

作为 DeepStream 9.1 版本的一部分,NVIDIA DeepStream GitHub 资源库中提供了 MV3DT 和 AMC 的所有源代码、技能、参考应用和示例数据集:NVIDIA DeepStream GitHub 资源库

  • MV3DT 参考应用:`src/apps/reference_apps/deepstream-tracker-3d-multi-view`
  • MV3DT 技能: `skills/deepstream-run-mv3dt`
  • AMC 技能: `skills/amc-setup-calibration-stack``skills/amc-run-video-calibration``skills/amc-run-sample-calibration``skills/amc-run-rtsp-calibration`

预构建的 MV3DT 微服务还可与 NVIDIA VSS 蓝图和智能体技能 结合使用,将工作流与其他微服务、数据库和智能体集成。

如有疑问和社区讨论,请访问 NVIDIA DeepStream 开发者论坛

标签