ARCore 或 ARKit 如何对实时视频进行 real-time 增强?

How do ARCore or ARKit produce real-time augmentations of live video?

大约一年前,我对构建自己的准系统增强现实 (AR) 库很感兴趣。我的目标是能够拍摄一些东西(任何真实的东西)的视频,然后能够在视频中放置 augmentations(实际上并不存在的 3D objects) .因此,例如,我可能会拍摄我客厅的视频,然后通过这个 AR library/tool,我可以添加一个坐在我的咖啡上的怪物的 3D 头像 table .所以,对这个主题或计算机视觉一无所知,我决定采用以下策略:

  1. 使用 3D 重建tools/techniques(运动结构,或 SfM)为视频中的所有内容建立 3D 模型(例如我客厅的 3D 模型)
  2. 分析平面的 3D 模型(准确地说是 3D 点云)
  3. 添加我自己的逻辑来确定objects(Blender 文件等 3D 模型)放置在视频 3D 模型的哪个区域(例如站在咖啡上的怪物table)
  4. 最难的部分:推断视频每一帧中的相机方向,然后根据相机所指向的方向找出如何正确定位增强(例如怪物),然后 "merging"增强的 3D 模型转换为主视频 3D 模型。这意味着当摄像机在我的客厅里移动时,怪物似乎仍然站在我咖啡上的同一个地方 table。我从来没有想出一个好的解决方案,但我想如果我能进入第四步,我会找到 一些 解决方案。

经过几个艰难的星期(计算机视觉很难!),我获得了以下工具管道,并取得了不同程度的成功:

  1. 我能够将视频的样本帧(例如,在我的客厅里走来走去时拍摄的视频)输入 OpenMVG 并生成 稀疏点云 PLY file/model 其中
  2. 然后我能够将该 PLY 文件输入 MVE 并生成它的 密集点云(同样是 PLY 文件)
  3. 然后我将密集的点云和原始帧输入 mvs-texturing 以生成我的视频的纹理 3D 模型

大约 30% 的时间,这条管道工作得很棒!这是我家前面的模型。你可以看到我的 3D 前院、我儿子的 3D 游戏屋,甚至 kinda/sorta 亲近 windows 和门!

大约 70% 的时间流水线因无法辨认的错误而失败,或者产生了看起来像抽象画的东西。此外,即使涉及自动脚本,工具也需要大约 30 分钟才能生成最终的 3D 纹理模型......非常慢。


好吧,看来 Google ARCode and Apple ARKit 抢先一步了!这些框架可以从您的智能手机获取实时视频,并完全完成我大约一年前一直试图完成的任务:real-time 3D AR。与 Pokemon Go 非常非常相似(但更先进和互动)。拍摄您客厅的视频,瞧,一个动画怪物正坐在您的咖啡上 table,您可以与它互动。非常非常非常酷的东西。

我的问题

我很嫉妒! 当然,Google 和 Apple 可以雇佣一些 best-in-show CV/3D 侦察人员,但我还是嫉妒!!!我很好奇是否有任何硬核 AR/CV/3D 侦察大师要么拥有内幕知识,要么只是非常了解 AR 领域,以至于他们可以说出 tooling/pipeline/technology 背后发生的是什么样的事情此处的场景使用 ARCode 或 ARKit。因为我几乎伤透了脑筋试图自己解决这个问题,但我失败了。

提前致谢!

我理解你的嫉妒心,作为一名计算机视觉工程师,我以前有过很多次这样的经历:-)。

移动设备上 AR 的关键是计算机视觉和惯性跟踪(phone 的陀螺仪)的融合。 引自 Apple's ARKit docu:

ARKit uses a technique called visual-inertial odometry. This process combines information from the iOS device’s motion sensing hardware with computer vision analysis of the scene visible to the device’s camera.

引自Google's ARCore docu

The visual information is combined with inertial measurements from the device's IMU to estimate the pose (position and orientation) of the camera relative to the world over time.

这种方法的问题在于您必须了解有关相机和 IMU 传感器的每一个细节。它们必须一起校准和同步。难怪 Apple 比普通开发人员更容易。这也是 Google 仅支持 couple of phones 用于 ARCore 预览的原因。