ARCore或ARKit如何实时增强现实视频?

4

大约一年前,我对构建自己的裸眼增强现实(AR)库感兴趣。我的目标是能够拍摄任何东西的视频,并能在其中放置“增强物”(3D对象,实际上并不存在于视频中)。例如,我可能会拍摄我的客厅视频,然后通过这个AR库/工具,在我的咖啡桌上添加一个3D怪物的头像。因此,虽然对这个主题或计算机视觉一无所知,但我已经采取了以下策略:

  1. 使用三维重建工具/技术(如运动结构或SfM)构建视频中所有物体的三维模型(例如我的客厅的三维模型)
  2. 分析该三维模型(实际上是三维点云)以获取平面表面
  3. 添加自己的逻辑以确定将哪些对象(例如Blender文件等三维模型)放置在视频三维模型的哪个区域(例如怪物站在咖啡桌上)
  4. 最难的部分:推断出每帧视频的相机方向,然后根据相机所指向的内容正确定位增强(例如怪物),然后将增强的三维模型合并到主视频三维模型中。这意味着当相机在我的客厅周围移动时,怪物似乎仍然站在我的咖啡桌上的同一位置。我从未找到一个好的解决方案,但我认为如果我能达到这第四步,我会找到一些解决方案。

经过几个艰难的星期(计算机视觉很难!),我得到了以下工具流程,但成功率不高:

我能够将视频样本帧(例如在我的客厅里拍摄的视频)输入OpenMVG,并生成一个稀疏点云PLY文件/模型。然后,我可以将该PLY文件输入MVE,并生成一个密集点云(再次是PLY文件)。最后,我将密集点云和原始帧输入mvs-texturing,以生成视频的纹理三维模型。这个流程大约有30% 的时间效果非常好!这是我家门前的模型,你可以看到我的3D前院,儿子的3D游戏屋,甚至可以勉强看出窗户和门!

enter image description here

大约70%的时间,流水线会出现无法理解的错误,或者生成类似于抽象画的东西。此外,即使涉及自动化脚本,工具也需要大约30分钟才能生成最终的3D纹理模型...速度相当慢。


看起来Google ARCodeApple ARKit已经做到了我想在一年前实现的实时3D AR,这些框架可以从您的智能手机中获取实时视频,并完成确切地我一直在尝试实现的功能。非常相似(但更先进和互动)于Pokemon Go。拍摄您客厅的视频,然后,一个动画怪物就坐在您的咖啡桌上,您可以与之交互。非常,非常酷的东西。

我的问题

我很羡慕!当然,谷歌和苹果可以雇用最佳的CV / 3D重建专家,但我仍然很羡慕!我想知道是否有任何核心AR / CV / 3D重建大师,他们具有内部知识或对AR领域非常了解,以便他们可以讲述ARCode或ARKit背后正在进行的工具/管道/技术类型。因为我几乎破解了自己的大脑,试图自己弄清楚这个问题,但是我失败了。

  • 我上面解释的策略是否准确,或者完全错误?(再次强调:将视频进行3D重建 ->表面分析 ->逐帧相机分析,模型合并)
  • 这里使用了什么样的工具/库/技术?
  • 他们如何在实时情况下完成这项任务,而如果我的3D重建成功,需要30多分钟才能处理和生成?

提前感谢!


我发现了这一系列的文章,作者涵盖了ARKit/ARCore技术非专家所需的内容:https://medium.com/super-ventures-blog/why-is-arkit-better-than-the-alternatives-af8871889d6a(文章中还有其他链接)。 - Morrison Chang
1个回答

4

我理解你的嫉妒心情,作为一名计算机视觉工程师,我在这方面已经有了很多经验 :-).

移动设备上实现增强现实技术的关键在于计算机视觉和惯性跟踪(手机陀螺仪)的融合。 引用自苹果的ARKit文档:

ARKit使用一种称为视觉惯性测距法的技术。该过程结合了iOS设备的运动感应硬件信息和对设备摄像头可见场景的计算机视觉分析。

引用自谷歌的ARCore文档:

将视觉信息与设备IMU的惯性测量相结合,以估计相机随时间相对于世界的姿态(位置和方向)。

这种方法存在的问题是,您必须了解相机和IMU传感器的每一个细节。它们必须被校准和同步。这也是为什么对于普通开发者而言,苹果比较容易,而谷歌仅支持一些手机进行ARCore预览的原因(点击查看)


感谢@PhilLab (+1),我很感激你的同情!这里有什么样的“计算机视觉分析”正在进行?再次感谢! - smeeb
苹果公司一段时间前收购了Metaio,因此他们的跟踪技术可能在很大程度上基于该公司的工作。如果你真的想深入了解细节,可以尝试研究Metaio员工在像ISMAR、CVPR等会议上发表的论文。 - PhilLab
同时研究ARCore时,我能够解压缩+反编译AAR文件中的类,并且看起来Google ARCore在很大程度上基于他们在2014年发布的Tango AR平台。看起来Tango Core AR是用C实现的,而ARCore是围绕Tango本地代码的图形和3D数学Java包装器。 - smeeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接