大约一年前,我对构建自己的裸眼增强现实(AR)库感兴趣。我的目标是能够拍摄任何东西的视频,并能在其中放置“增强物”(3D对象,实际上并不存在于视频中)。例如,我可能会拍摄我的客厅视频,然后通过这个AR库/工具,在我的咖啡桌上添加一个3D怪物的头像。因此,虽然对这个主题或计算机视觉一无所知,但我已经采取了以下策略:
- 使用三维重建工具/技术(如运动结构或SfM)构建视频中所有物体的三维模型(例如我的客厅的三维模型)
- 分析该三维模型(实际上是三维点云)以获取平面表面
- 添加自己的逻辑以确定将哪些对象(例如Blender文件等三维模型)放置在视频三维模型的哪个区域(例如怪物站在咖啡桌上)
- 最难的部分:推断出每帧视频的相机方向,然后根据相机所指向的内容正确定位增强(例如怪物),然后将增强的三维模型合并到主视频三维模型中。这意味着当相机在我的客厅周围移动时,怪物似乎仍然站在我的咖啡桌上的同一位置。我从未找到一个好的解决方案,但我认为如果我能达到这第四步,我会找到一些解决方案。
经过几个艰难的星期(计算机视觉很难!),我得到了以下工具流程,但成功率不高:
我能够将视频样本帧(例如在我的客厅里拍摄的视频)输入OpenMVG,并生成一个稀疏点云PLY文件/模型。然后,我可以将该PLY文件输入MVE,并生成一个密集点云(再次是PLY文件)。最后,我将密集点云和原始帧输入mvs-texturing,以生成视频的纹理三维模型。这个流程大约有30% 的时间效果非常好!这是我家门前的模型,你可以看到我的3D前院,儿子的3D游戏屋,甚至可以勉强看出窗户和门!大约70%的时间,流水线会出现无法理解的错误,或者生成类似于抽象画的东西。此外,即使涉及自动化脚本,工具也需要大约30分钟才能生成最终的3D纹理模型...速度相当慢。
看起来Google ARCode和Apple ARKit已经做到了我想在一年前实现的实时3D AR,这些框架可以从您的智能手机中获取实时视频,并完成确切地我一直在尝试实现的功能。非常相似(但更先进和互动)于Pokemon Go。拍摄您客厅的视频,然后,一个动画怪物就坐在您的咖啡桌上,您可以与之交互。非常,非常酷的东西。
我的问题
我很羡慕!当然,谷歌和苹果可以雇用最佳的CV / 3D重建专家,但我仍然很羡慕!我想知道是否有任何核心AR / CV / 3D重建大师,他们具有内部知识或对AR领域非常了解,以便他们可以讲述ARCode或ARKit背后正在进行的工具/管道/技术类型。因为我几乎破解了自己的大脑,试图自己弄清楚这个问题,但是我失败了。
- 我上面解释的策略是否准确,或者完全错误?(再次强调:将视频进行3D重建 ->表面分析 ->逐帧相机分析,模型合并)
- 这里使用了什么样的工具/库/技术?
- 他们如何在实时情况下完成这项任务,而如果我的3D重建成功,需要30多分钟才能处理和生成?
提前感谢!