我想直接从相机输入中获取CVPixelBuffer,然后ARKit才能尝试并应用图像处理以提高跟踪质量。
在AVFoundation中你可以这样做,但到目前为止我能找到的是会话委托函数'didUpdate',它给了我一个只获得的captureImage。
苹果是否会使用允许设置器功能的原始视频帧数据公开“willUpdate”功能?
答案 0 :(得分:1)
Apple不提供任何类型的API来提供您自己的像素缓冲区供ARKit的世界跟踪机制使用。您在头文件和documentation中看到的API都是API。
如果你考虑一下,无论如何这样的API可能不太可行。 Dig even just a little bit into the details of how visual-inertial odometry works,你会注意到世界追踪至关重要,需要两件事:
详细了解光学和成像传感器如何相互作用以确定相机进纸中像素与距离相机一定距离的真实世界特征之间的空间关系
成像管道与物理运动传感系统(加速度计,陀螺仪,IMU传感器融合硬件或软件)之间的精确时间同步
如果用户空间应用程序在相机捕获和ARKit使用之间修改像素缓冲区,(1)不再保留,那么跟踪质量可能会受到影响 - 世界跟踪算法没有看到他们期望的世界。
此外,对像素缓冲区内容的任何修改都需要非零时间,因此(2)不再保持 - 系统不知道您的图像处理引入了多少延迟(假设它甚至可以预测),因此图像时序不会t与运动传感器定时匹配。充其量,跟踪质量大多不受阻碍,但存在明显的滞后。 (更有可能一切都崩溃了。)
如果“提升跟踪质量”的含义实际上与跟踪工作的方式关系不大,而与用户体验应用的方式有关,则可能还有其他途径可供您使用。
例如,如果用户在空间中标记点来测量房间,但是在墙壁与地板相交的角落上很难精确点击,则可以提供UI来协助完成该任务。可能在用户拖动标记时放大相机进纸,或者鼓励用户物理移近他们想要标记的真实世界功能。