4

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

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

经过几个艰难的几周(计算机视觉很难!),我得到了以下工具管道,效果好坏参半:

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

大约 30% 的时间,这条管道运行得非常好!这是我家门前的模型。你可以看到我的 3D 前院、我儿子的 3D 剧场,甚至可以看到门窗!

在此处输入图像描述

大约 70% 的流水线失败并出现难以理解的错误,或者产生了看起来像抽象画的东西。此外,即使涉及自动化脚本,工具也需要大约 30 分钟才能生成最终的 3D 纹理模型……太慢了。


好吧,看起来Google ARCodeApple ARKit打败了我!这些框架可以从你的智能手机获取实时视频,并完全完成我一年前试图完成的事情:实时 3D AR。与 Pokemon Go 非常非常相似(但更高级和互动)。拍摄你客厅的视频,瞧,一个动画怪物正坐在你的咖啡桌上,你可以与它互动。非常非常非常酷的东西。

我的问题

我嫉妒!当然,谷歌和苹果可以雇佣一些最优秀的 CV/3D 侦察人员,但我还是嫉妒!!!我很好奇是否有任何核心 AR/CV/3D 侦察专家要么具有内幕知识,要么对 AR 领域非常了解,以至于他们可以谈论幕后正在发生什么样的工具/管道/技术这里使用 ARCode 或 ARKit。因为我几乎打破了我的大脑试图自己解决这个问题,我失败了。

  • 我的策略(如上所述)是大致准确的,还是偏离基础的?(再次:视频的 3D 侦察 -> 表面分析 -> 逐帧相机分析,模型合并)?
  • 什么样的工具/库/技术在这里发挥作用?
  • 他们如何实时完成这项工作,而如果我的 3D 侦察工作有效,则需要 30 多分钟才能处理和生成?

提前致谢!

4

1 回答 1

4

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

移动设备上 AR 的关键是计算机视觉和惯性跟踪(手机的陀螺仪)的融合。引用Apple 的 ARKit 文档

ARKit 使用一种称为视觉惯性里程计的技术。此过程将来自 iOS 设备运动感应硬件的信息与设备摄像头可见场景的计算机视觉分析相结合。

引自Google 的 ARCore 文档

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

这种方法的问题在于,您必须了解相机和 IMU 传感器的每一个细节。它们必须一起校准和同步。难怪苹果比普通开发者更容易。这也是为什么谷歌只支持几款手机进行 ARCore 预览的原因。

于 2017-09-01T08:29:36.803 回答