ARKit - 替换原始相机提要图像

ARKit - replace raw camera feed image

我想在 ARKit 发挥其魔力尝试应用图像处理来提高跟踪质量之前,直接从相机源中获取 CVPixelBuffer。

在 AVFoundation 中你可以这样做,但到目前为止我能找到的只是会话委托函数 'didUpdate' 它给了我一个只获取的捕获图像。

Apple 是否公开了任何类似 'willUpdate' 功能的原始视频帧数据以允许 setter 功能?

Apple 不提供任何类型的 API 来提供您自己的像素缓冲区以供 ARKit 的世界跟踪机制使用。您在头文件中看到的 API 和 documentation 都是 API。

想一想,这样的API估计也不太可行吧。 Dig even just a little bit into the details of how visual-inertial odometry works,您会注意到世界跟踪关键需要两件事:

  1. 详细了解光学和成像传感器如何相互作用以确定相机馈送中的像素与距相机一定距离的真实世界特征之间的空间关系

  2. 成像管道和物理运动传感系统(加速度计、陀螺仪、IMU 传感器融合硬件或软件)之间的精确时间同步

如果用户-space 应用程序在相机捕获和 ARKit 使用之间修改像素缓冲区,(1) 不再成立,因此跟踪质量可能会受到影响 - 世界跟踪算法并没有以他们期望的方式看待世界。

此外,对像素缓冲区内容的任何修改都需要非零时间,因此 (2) 不再成立 — 系统不知道您的图像处理引入了多少延迟(假设它甚至是可预测的),因此图像时序与运动传感器时序不匹配。充其量,跟踪质量基本上不受阻碍,但存在明显的滞后。 (更有可能一切都崩溃了。)


如果您所说的“提升跟踪质量”实际上与跟踪的工作方式关系不大,而与用户体验您的应用的方式关系更大,那么您可能还有其他途径。

例如,如果用户在 space 中标记点以测量房间,但很难精确敲击墙壁与地板的拐角处,您可以提供 UI 协助与那个任务。也许在用户拖动标记时放大相机画面,或者鼓励用户在物理上靠近他们想要标记的真实世界特征。