这篇文章是关于构建多摄像头追踪视觉AI应用的系列文章中的第三篇。我们将在第一部分和第二部分中介绍整体端到端工作流程和微调流程,以提高系统准确性。
NVIDIA Metropolis 是一个应用框架和一套开发者工具,可利用 AI 进行各行各业的视觉数据分析。其多摄像头追踪参考 AI 工作流由云原生 NVIDIA Metropolis 微服务提供支持,可跨多个摄像头实现高级物体追踪和定位。本文讨论了摄像头校准、如何使用 NVIDIA Metropolis 摄像头校准工具包校准真实摄像头,以及如何使用 NVIDIA Omniverse 扩展程序校准合成摄像头。
摄像头校准
摄像头校正是确定特定摄像头参数或估计摄像头特征的过程。摄像头校正可以将摄像头在 2D 中看到的内容转换为真实的坐标系统,它是许多基于视觉的应用程序的基础。例如,在创建多摄像头跟踪应用程序时,需要摄像头校正来完成主要涉及坐标转换的特定操作。
摄像头参数由两部分组成:外部参数和内部参数。外部参数定义摄像头相对于指定世界坐标系统的平移和旋转,从而实现摄像头坐标和世界坐标之间的映射。内部参数支持摄像头坐标和像素坐标之间的映射。
多摄像头追踪中的摄像头校正
适用于多摄像头 AI 的 NVIDIA Metropolis 参考工作流主要将摄像头用作传感器,并广泛用于检测到的移动物体的时空方面。物体最初是在摄像头视图中的像素域中检测的,而实现许多时空分析下游的一个重要步骤是将像素域与所需的坐标系统相关。
摄像头定位对 Metropolis AI 工作流程中下游任务的整体准确性有重大影响。有关详细信息,请参阅摄像头定位指南。通过正确的摄像头校正,它有助于在所需坐标系统中定位检测到的物体,这在许多核心能力中发挥着至关重要的作用,包括但不限于:
- 使用摄像头作为传感器的定位服务:检测摄像头内的物体,并通过校准的摄像头参数将其计算到具有真实含义的坐标系统上。例如,可以在平面图上找到零售商店中从摄像头看到的客户。
- 多个摄像头之间的活动相关性:当多个摄像头针对同一坐标系统进行校准时,您可以跨摄像头进行关联和推理,以提供集成见解。例如,在共享坐标系统中的移动历史记录有助于确定camera_1检测到的person_A和camera_2检测到的person_B是否为同一人。第二个示例是无缝跟踪一个人在仓库中行走,该仓库中的不同摄像头覆盖不同部分。
- 基于距离的指标计算:由于摄像头的特性,直接在像素域中计算距离并不可靠。例如,X 个像素数所覆盖的实际距离(以米为单位)可能会根据帧中的位置而有很大差异。根据笛卡儿坐标系校准摄像头可以方便地计算距离。
图 1 展示了一个实时定位系统示例,该系统在 100 个摄像头覆盖的 100,000 平方英尺仓库空间的平面图上追踪每个人的位置。这样的系统基于通过适当的摄像头校准实现的上述核心能力而构建。
当前的 Metropolis 参考 AI 工作流程假设摄像头没有或几乎没有失真。这确保像素坐标系统和指定的世界坐标系统之间的映射是线性的。这是使用从两个坐标系统中选择的参考点进行计算的。
尤其需要一系列特征点,其中像素值 (x, y) 和世界坐标 (X, Y, Z) 是已知的。在我们的许多用例中,指定的世界坐标系统是一个 2D Cartesian 平面,或者更具体地说,是平面图的图像。使用平面图的一个角作为原点,这个 Cartesian 可以转换为平面图图像的像素值。
在这个意义上,世界坐标 (X, Y, Z) 变为 (X, Y),2D 到 3D 映射问题实际上成为 2D 到 2D 透视转换问题,并且从特征点计算出的 3 x 3 单同矩阵作为此校正过程的输出可用于稍后执行位置转换。
图 2 提供了两个演示过程的示例,考虑到任务是在左侧的摄像头像素和右侧的平面图之间查找映射,因此只需一系列可同时位于左侧和右侧的特征{1, 2, 3, 4, …}即可。选择这些特征序列后,摄像头位置 (x, y) 和世界位置 (X, Y) 将作为相应的像素坐标给出,并且可以使用现有库 (例如 OpenCV) 轻松计算单性矩阵。
现在,解决像素到世界的映射问题可以分解为选择参考点,并在摄像头帧和平面图中获取其像素值。这似乎不是一项容易的任务。设计适当的工具可以大幅减少工作负载并简化任务。
使用 Metropolis Camera Calibration Toolkit 简化现实世界的校准
借助 Metropolis Camera Calibration Toolkit,您可以执行摄像头校准任务,并以适当的格式输出文件,以便与其他 Metropolis 服务无缝连接。
Metropolis 摄像头校准工具包提供:
- 项目组织、导入和导出
- 借助 Metropolis 媒体服务轻松导入摄像头
- 用于选择参考点的 GUI
- 用于自检的动态二次投影误差
- 支持 Metropolis 更多功能的附加组件,包括感兴趣的区域(ROIs)和警戒线
- 使用 API 插入文件
提供三种校准模式:
- Cartesian 校准:一种在没有参考建筑物图的情况下创建外部校准的方法。作为用户,你可以创建全局坐标系统。
- 多摄像头跟踪:此模式是使用校准工具包的最常用方式,也是本文的重点。在此形式中,用户提供每个摄像头都要校准的建筑物地图。
- 图像:在图像上绘制 tripwires 和 ROIs 并获取像素坐标。对于某些下游任务,需要在摄像头视图中添加某些伪影以计算特定指标,例如基于 tripwire 交叉的物体计数。
最简单的方法是使用示例应用中提供的资产导入项目。给定calibration.json、imageMetadata.json和Images.zip,用户可以导入已设置的项目。
要从头开始创建多摄像头追踪项目,您需要平面图和媒体服务,或来自摄像头的图像。来自摄像头的信息将被需要来帮助为 Metropolis UI 设置摄像头。
在导入项目或创建新项目后,“Project”(项目)页面将引导您完成创建必要构件的步骤。首先,上传平面图。平面图可以是代表摄像头所看到空间的建筑图。
接下来,如果您使用的是媒体服务,则可以使用与部署案例最相关的URL导入传感器。这是将传感器导入工具包的最简单方法,但不是必需的。如果您未使用媒体服务,则需要设置传感器。
对于每个传感器,首先创建一个新传感器,并添加摄像头详细信息。这些详细信息是将摄像头导入 Metropolis 工作流程所必需的。关闭模式后,您将在网格中看到一个传感器,您可以在其中单击摄像头图标以上传图像。如果您在上一步中发现了传感器,则应已从媒体服务中提取图像。对每个传感器重复此操作。
在校准时,为摄像头图像上的每个传感器创建一个多边形,并在平面图上为其创建相应的多边形。在平面图空间中选择摄像头图像中可见的点或特征点。这些对应的对使您能够创建转换矩阵,将摄像头空间中的轨迹映射到平面图上。
理想情况下,根据空间的大小选择 8 到 15 个点。至少需要 8 个点才能开始。图 2 显示了平面图中摄像头图像中可见的已识别特征点。如果某个区域的校正似乎出现偏差,添加更多点有助于改善轨迹。
创建两个多边形后,添加 ROI 多边形、tripwires 和 direction wires。有关校正阶段的示例,请参阅图 3。
设置校正后,单击“Calibrate”以查看二次投影误差,并单击“accept”(如果可接受)。然后单击“Validate”以测试校正。绘制轨迹或多边形以查看摄像头域中的点如何落在平面图上。如果平面图上的投影点是可接受的,您可以验证校正。如果不是,请在校正阶段调整多边形,直到校正被接受。
接下来,设置平面图,并将摄像头放在平面图上。这是摄像头显示在 Metropolis 工作流程 UI 中所必需的。有关如何放置传感器的示例,请参阅图 4。
最后,导出可在 Metropolis 工作流程中使用的构件 calibration.json
、imageMetadata.json
和 images.zip
。
借助 Metropolis Camera Calibration Toolkit,您可以轻松简化真实摄像头上的手动摄像头校准工作流程,它为下游 Metropolis 服务提供了可无缝使用的格式化文件。
NVIDIA Omniverse 中的合成摄像头自动校准
Metropolis 参考应用也可以处理合成数据。参考应用提供在 NVIDIA Omniverse 平台内创建的合成视频数据。与真实的摄像头一样,必须对合成摄像头进行校准,以便在像素坐标和平面图之间进行映射。
通过完全控制 Omniverse 中的合成摄像头,您无需手动选择参考点。相反,Omniverse 中的自动校准 omni.replicator.agent.camera_calibration
扩展程序只需单击按钮即可输出虚拟摄像头所需的映射。这自动校准工具包含在 omni.replicator.agent
扩展程序中。如需了解详情,请参阅 Omniverse 摄像头校准文档。
要使用 omni.replicator.agent.camera_calibration
,请首先创建一个顶视图摄像头,以及待校准的摄像头。顶视图摄像头的确切摄像头视图将用作平面图。对于每个待校准的摄像头,扩展程序将自动从摄像头视图中选择地板上的点,并计算它们在顶视图摄像头中的对应关系。
使用 omni.replicator.agent.camera_calibration
扩展程序的详细信息如下:
- 通过从摄像头的视图中随机投射光线来自动选择参考点,从而记录光线与地面相交的位置。
- 摄像头的外置矩阵来自摄像头基元的转换矩阵,并使用摄像头基元的属性计算内部矩阵。
- 将参考点的 3D 位置转换为摄像头图像平面上的 2D 位置,并使用这些数据计算摄像头的投影矩阵。
- 计算参考点的 3D 位置与俯视摄像头的图像平面之间的平移参数和缩放系数,这将提供摄像头视图和平面图之间的对应关系。
- 通过均匀地将光线投射到地面,收集命中数据,然后根据这些命中的坐标生成 FOV 多边形,确定摄像头的视野(FOV)。
- 最后,将摄像头的内部矩阵和外部矩阵以及投影矩阵,以及摄像头视图和平面图之间的对应关系导出到 JSON 文件,并在场景的俯视图图像上渲染 FOV 多边形。
在 Omniverse 中创建合成摄像头相对容易,并且是为模型训练和模拟等各种下游任务生成合成视频数据的好方法。omni.replicator.agent.camera_calibration
为用户提供了一个方便的工具,用于创建格式化的摄像头校正文件,以便 Omniverse 中的合成摄像头可以轻松用于各种 Metropolis 参考工作流程或应用程序。
结束语
摄像头校正使 NVIDIA Metropolis 参考应用能够在所提供的平面图上定位检测到的物体,并在多个摄像头之间实现物体位置的空间关联。这是朝着在智能视频分析领域构建大规模、实时定位服务和其他有意义的服务迈出的重要一步。
如需了解详情,请参阅以下资源:
- 多摄像头 AI 工作流程开发者指南
- 借助 NVIDIA Metropolis 微服务和 NVIDIA Isaac Sim 实现从数字孪生到云原生部署的实时视觉 AI。
- 开始使用 NVIDIA Metropolis 微服务
关于技术问题,请访问 NVIDIA 开发者论坛。请注意,您必须先注册 Developer Preview 计划。