NVIDIA Metropolis通过简化摄像头校准 增强AI驱动的多摄像头追踪

NVIDIA Metropolis 是一个利用 AI 实现各个行业视觉数据分析的应用框架和开发者工具套件。它所提供的多摄像头追踪参考 AI 工作流由云原生 NVIDIA Metropolis 微服务驱动,可实现跨多个摄像头的高级物体追踪和定位功能。本文将讨论摄像头校准、如何使用 Metropolis 摄像头校准套件来校准真实摄像头,以及如何使用 NVIDIA Omniverse 扩展校准合成摄像头。

本文是构建多摄像头追踪视觉AI应用系列文章的第三篇。在第一和第二篇文章中,我们介绍了提高系统准确性的整个端到端工作流和微调过程。

NVIDIA Metropolis 是一个利用AI实现各个行业视觉数据分析的应用框架和开发者工具套件。它所提供的多摄像头追踪参考 AI 工作流由云原生 NVIDIA Metropolis 微服务驱动,可实现跨多个摄像头的高级物体追踪和定位功能。本文将讨论摄像头校准、如何使用 Metropolis 摄像头校准套件来校准真实摄像头,以及如何使用 NVIDIA Omniverse 扩展校准合成摄像头。

摄像头校准

摄像头校准是确定特定摄像头参数或估计摄像头特性的过程。摄像头校准可将摄像头在 2D 世界中看到的景象转换成现实世界坐标系,是许多基于视觉的应用的基础。例如在创建多摄像头追踪应用时,需要先进行摄像头校准,才能完成主要涉及坐标转换的特定操作。

摄像头参数由外在参数和内在参数两部分组成。外在参数定义了摄像头相对于指定世界坐标系的平移和旋转,从而实现摄像头坐标和世界坐标之间的映射。内在参数则实现了摄像头坐标与像素坐标之间的映射。

多摄像头追踪中的摄像头校准

NVIDIA Metropolis 多摄像头 AI 参考工作流主要使用摄像头作为传感器,并对检测到的移动物体进行大量时空方面的处理。由于物体最初在摄像头视图内的像素域中检测到,因此为了在下游进行大量时空分析,一个必不可少的步骤就是将像素域与所需坐标系相关联。

在 Metropolis AI 工作流中,摄像头定位对下游任务的整体准确性有重大影响。详细信息可参见摄像头定位指南:

https://docs.nvidia.com/mms/text/MDX_Camera_Positioning_Guide.html

通过正确的摄像头校准,就能在所需坐标系中定位检测到的物体。这在许多核心能力中都起着至关重要的作用,包括但不限于:

将摄像头用作传感器的位置服务:检测摄像头内的物体,并通过校准后的摄像头参数,计算出其在具有现实意义的坐标系上的位置。例如,零售店可以在平面图上定位摄像头看到的店内顾客。

多个摄像头之间的活动关联:当根据同一坐标系校准多个摄像头后,就可以关联各个摄像头并进行推理,从而提供综合洞察。例如,共享坐标系中的移动历史记录可以帮助确定摄像头_1 检测到的人_A 和摄像头_2 检测到的人_B 是否是同一个人;可以通过覆盖不同区域的多个摄像头,无缝追踪一个人在仓库中的行走轨迹等。

基于距离的度量计算:鉴于摄像头的特性,直接在像素域进行距离计算并不可靠。例如 X 个像素覆盖的实际距离(以米为单位)会因帧内位置的不同而产生很大差异。根据直角坐标系来校准摄像头可以使距离计算更加方便。

图 1 是一个实时位置系统示例。在一个 100 个摄像头覆盖的 10 万平方英尺仓库空间内,每个人的位置都可以在仓库平面图上进行追踪。这样的系统建立在上述通过正确摄像头校准来实现的核心能力基础上。

图 1. 通过多个摄像头追踪多个物体的实时位置系统

当前的 Metropolis 参考AI工作流假定摄像头没有失真或失真很小,这样就能确保像素坐标系与指定的世界坐标系之间的映射是线性的。这需要从两个坐标系中选择参考点进行计算。

特别是需要一系列地标,其中每个地标的像素值(x, y)和世界坐标(X, Y, Z)都是已知的。在我们的许多用例中,指定的世界坐标系是一个 2D 笛卡尔平面,或者更具体地说,是一个平面图的图像。以平面图的一角为原点,可以将该笛卡尔平面转换为平面图图像的像素值。

在这个意义上,世界坐标(X, Y, Z)变成了(X, Y),2D 转 3D 的映射问题实际上变成了 2D 转 3D 的透视变换问题。而作为该校准过程的输出结果,根据地标计算出的 3 x 3 同构矩阵可用于以后的位置变换。

图 2 提供了两个演示该过程的示例,考虑到任务是找到左侧摄像头像素与右侧平面图之间的映射关系,唯一需要的是一系列可同时位于左右两侧的地标 {1, 2, 3, 4, ...}。选定一系列地标后,摄像头位置(x, y)和世界位置(X, Y)会以相应的像素坐标形式给出,然后就可以通过现有的库,轻松计算出同构矩阵(例如 OpenCV)。

图 2. 来自摄像头视图和平面图的参考点

现在,解决像素转世界的映射问题,可以归结为选择参考点并获取其在摄像头画面和平面图中的像素值。这项工作看似简单,实则不易。设计得当的工具可以大大减少工作量,简化任务。

使用 Metropolis摄像头校准套件

简化现实世界的校准工作

您可以使用 Metropolis 摄像头校准套件来执行摄像头校准任务,并以适当的格式输出文件,以便与其他 Metropolis 服务无缝对接。

视频 1. 通过简化摄像头校准,增强AI驱动的多摄像头追踪

Metropolis 摄像头校准套件提供以下功能:

项目组织、导入和导出

通过 Metropolis 媒体服务轻松导入摄像头

用于选定参考点的 GUI

用于自检的即时重投影错误

支持更多 Metropolis 功能的附加组件,包括感兴趣区域(ROI)和绊线

使用 API 插入文件

有三种校准模式可供使用:

笛卡尔校准:一种在没有参考建筑地图的情况下创建外部校准的方法。用户可以创建自己的全局坐标系。

多摄像头追踪:该模式是使用校准套件的最常见方式,也是本文的重点。采用该模式的用户只需提供一个建筑地图,每个摄像头就能根据该地图进行校准。

图像:在图像上绘制绊线和 ROI 并获取像素坐标。对于某些下游任务,需要在摄像头视图中添加某些人为假象,以计算特定指标,例如基于绊线穿越次数的物体计数等。

最简单的方法是使用示例应用中提供的资产来导入一个项目。通过 calibration.json、imageMetadata.json 和 Images.zip,用户可以导入一个已经设置好的项目。

如要从头开始创建一个多摄像头追踪项目,需要一个平面图以及一项媒体服务,或者多张来自摄像头的图像,还需要来自摄像头的信息,来帮助 Metropolis UI 设置摄像头。

在导入项目或创建新项目后,“项目”页面将引导您完成创建必要人工假象的步骤。首先,上传平面图。平面图可以是代表摄像头所见空间的建筑地图。

接下来,如果您使用的是媒体服务,可以使用与部署案例最相关的 URL 导入传感器。这是将传感器导入套件的最简单方法,但并非唯一的方法。如果不使用媒体服务,则需要设置传感器。

首先为每个传感器创建一个新传感器,并添加摄像头详细信息。这些详细信息对于将摄像头导入 Metropolis 工作流非常必要。关闭该模态后,您会看到网格中显示了一个传感器,您可以单击摄像头图标上传图像。如果您在上一步中发现了传感器,则表示图像应该已经从媒体服务中提取。对每个传感器重复此步骤。

校准时,在摄像头图像上为每个传感器创建一个多边形,并在平面图上创建相应的多边形。然后,在平面图空间中选择在摄像头图像中可见的点或地标。通过这些相应的对,可以创建一个转换矩阵,将摄像头空间中的轨迹映射到平面图上。

根据空间大小,最好选择 8 到 15 个点。开始时至少需要 8 个点。图 2 显示了平面图上已确认的在摄像头图像中可见的地标。如果在某一区域出现校准偏差,可通过添加更多的点帮助改善轨迹。

创建两个多边形后,添加一个 ROI 多边形以及绊线和方向线。校准阶段的示例见图 3。

图 3. 经过 Metropolis 摄像头校准套件 的校准阶段后完全校准的摄像头示例

校准设置完成后,单击“校准”查看重投影误差并单击“接受”(如果可以接受)。然后单击“验证”测试校准,绘制轨迹或多边形,查看摄像头域中的点如何落在平面图上。如果平面图上的投影点可以接受,就能够验证校准。如果不行,则在校准阶段调整多边形,直到校准合格为止。

接下来,设置平面图并将摄像头放置在平面图上。这是在 Metropolis 工作流的用户界面中显示摄像头所必不可少的一个步骤。有关如何放置传感器的示例,请参见图 4。

图 4. 放置在 Metropolis摄像头校准套件中 的平面图上的传感器

最后,导出可用于 Metropolis 工作流的人为假象文件 calibration.json、imageMetadata.json 和 images.zip。

借助 Metropolis 摄像头校准套件,您可以轻松简化真实摄像头上的手动摄像头校准流程。它所提供的格式化文件可供下游 Metropolis 服务无缝使用。

NVIDIA Omniverse 中的

合成摄像头自动校准

Metropolis 参考应用也可以使用合成数据。这些参考应用提供在 NVIDIA Omniverse 平台上创建的合成视频数据。与现实世界中的摄像头一样,合成摄像头也必须经过校准后,才能实现像素坐标与平面图之间的映射。

视频 2. 通过简化摄像头校准,增强 AI 驱动的多摄像头追踪

由于能够完全控制 Omniverse 中的合成摄像头,因此不需要手动选择参考点。只需点击一下按钮,Omniverse 中的 omni.replicator.agent.camera_calibration 自动校准扩展就能输出所需的虚拟摄像头映射。该自动校准工具包含在 omni.replicator.agent 扩展中。

如要了解更多信息,请参见 Omniverse 摄像头校准文档:https://docs.omniverse.nvidia.com/isaacsim/latest/replicator_tutorials/ext_replicator-agent/camera_calibration.html

如要使用 omni.replicator.agent.camera_calibration,首先创建一个俯视摄像头以及待校准的摄像头。俯视摄像头的精确摄像头视图将被用作平面图。扩展将自动从摄像头视图中为每个待校准的摄像头选择平面图上的点,并计算它们在俯视摄像头中的对应点。

使用 omni.replicator.agent.camera_calibration 扩展的详细情况如下:

通过从摄像头视图中随机投射光线,来自动选择参考点,记录光线与平面图相交的位置。

摄像头的外在矩阵由摄像头原型的变换矩阵导出,内在矩阵则根据摄像头原型的属性计算得出。

将参考点的 3D 位置转换为摄像头图像平面上的 2D 位置,并使用这些数据计算出摄像头的投影矩阵。

计算参考点 3D 位置与俯视摄像头图像平面之间的平移参数和缩放因子,这能够提供摄像头视图与平面图之间的对应关系。

通过向平面图均匀投射光线来确定摄像头的视野(FOV),收集命中点的数据,然后根据这些命中点的坐标生成视场多边形。

最后,将摄像头的内在矩阵和外在矩阵以及投影矩阵和摄像头视图与平面图之间的对应关系导出到 JSON 文件,并在场景的俯视图像上渲染 FOV 多边形。

在 Omniverse 中创建合成摄像头相对简单,是一个生成合成视频数据的好方法,所生成的数据可用于模型训练和仿真等各种下游任务。omni.replicator.agent.camera_calibration 为用户提供了一个方便创建格式化摄像头校准文件的工具,这样,Omniverse 中的合成摄像头就能轻松用于各种 Metropolis 参考工作流或应用。

结论

通过摄像头校准,NVIDIA Metropolis 参考应用可以在提供的平面图上定位检测到的物体,并建立多个摄像头之间的物体位置空间关联。这是在智能视频分析领域,构建大规模实时位置服务和其他有意义的服务,所必不可少的一个步骤。