大约一年前,我对构建自己的准系统增强现实 (AR) 库很感兴趣。我的目标是能够拍摄一些东西(真的任何东西)的视频,然后能够在视频中放置增强(实际上并不存在的 3D 对象)。例如,我可以拍摄我客厅的视频,然后通过这个 AR 库/工具,我可以添加一个坐在我咖啡桌上的怪物的 3D 化身。因此,对主题或计算机视觉一无所知,我决定采用以下策略:
- 使用 3D 重建工具/技术(Structure from Motion,或 SfM)构建视频中所有内容的 3D 模型(例如,我客厅的 3D 模型)
- 分析平面的 3D 模型(准确地说是 3D 点云)
- 添加我自己的逻辑来确定将哪些对象(3D 模型,例如 Blender 文件等)放置在视频的 3D 模型的哪个区域(例如,站在咖啡桌上的怪物)
- 最难的部分:在视频的每一帧中推断相机的方向,然后根据相机指向的方向确定如何正确定位增强(例如怪物),然后将增强的 3D 模型“合并”到主视频3D模型。这意味着当相机在我的客厅里移动时,怪物似乎仍然站在我咖啡桌上的同一个地方。我从来没有想出一个好的解决方案,但我想如果我能进入第四步,我会找到一些解决方案。
经过几个艰难的几周(计算机视觉很难!),我得到了以下工具管道,效果好坏参半:
- 我能够将视频的样本帧(例如,在我的客厅里走动时拍摄的视频)输入OpenMVG并生成它的稀疏点云PLY 文件/模型
- 然后我能够将该 PLY 文件输入MVE并生成它的密集点云(同样是 PLY 文件)
- 然后我将密集点云和原始帧输入mvs-texturing以生成我的视频的纹理 3D 模型
大约 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 多分钟才能处理和生成?
提前致谢!