写点什么

增强现实技术的“魔法”奇迹!移动 AR 运作原理全面揭秘

  • 2019-06-06
  • 本文字数:4785 字

    阅读完需:约 16 分钟

增强现实技术的“魔法”奇迹!移动AR运作原理全面揭秘

增强现实近年来越来越火,玩家一定见过或者玩过 Pokemon Go 这款游戏,这就是增强现实的应用之一。甚至我给女儿买的 AR 地球,也是增强现实的应用之一。增强现实技术可以将虚拟对象合并到现实场景中,并能支持用户与其进行交互,它已经成为虚拟现实研究中的一个重要领域,也是人机界面技术发展的一个重要方向。 可是你知道吗?其实增强现实早在 1966 年就诞生了,但受限于当时计算机的处理能力以及技术不发达,一直没有引起轰动。人类实现的第一套增强现实系统是由计算机图形学之父和增强现实之父 Ivan Sutherlandand 开发的。直到 1992 年才正式诞生增强现实这一术语:波音公司的研究人员 Tom Caudell 和 David Mizell 在论文《Augmented reality: an application of heads-up display technology to manual manufacturing processes》首次使用了增强现实这个词,用来描述将计算机呈现的元素覆盖在现实世界上这一技术。今天,我们翻译并分享了 Alex Chuang 的博文,以飨读者。


本文最初发布于 Alex Chuang 的 Medium 博客,经原作者 Alex Chuang 授权由 InfoQ 中文站翻译并分享。





英国科幻作家 Arthur C. Clark 爵士曾经说过,“任何足够先进的技术都与魔法无异。”


增强现实(Augmented Reality,AR)有潜力像魔法一样,让我们感到敬畏和惊奇。这是计算机历史上,我们第一次拥有这样的能力:能够模糊物理世界和虚拟世界之间的界限。AR 有望带来新的创意经济的曙光,在这个经济中,数字媒体可以被赋予“生命”,并赋予与现实世界互动的能力。


AR 体验看起来很神奇,但在幕后到底发生了什么呢?要回答这个问题,我们必须看看像智能手机这样的基于相机 AR 系统的三个基本基础。


  1. 计算机如何知道它在世界上的位置?(定位 + 地图创建)

  2. 计算机如何理解世界的样子?(几何学)

  3. 计算机如何像我们一样理解这个世界?(语义学)

第一部分 计算机如何知道它在世界上的位置?(定位)


“好奇号”火星车在火星上的自拍(来源:https://www.nasa.gov/jpl/msl/pia19808/looking-up-at-mars-rover-curiosity-in-buckskin-selfie/)


当 NASA 将火星探测器送上火星时,他们需要一种方法,让机器人在不使用 GPS(Global Positioning System,全球(卫星)定位系统)的情况下,能够在另一颗星球上实现自主导航。他们想出了一种名为“视觉惯性测程”(Visual Inertial Odometry,VIO)的技术,可以在没有 GPS 的情况下跟踪火星车在一段时间内的运动情况。这和我们的智能手机用来跟踪它们的空间位置和方向所用到的技术是一样的。


VIO 系统由两部分组成。


  • 光学系统

  • 惯性系统或惯性测量单元(Inertial Measurement Unit,IMU)


光学系统由摄像机组组成,摄像机组包括镜头、快门和图像传感器等。惯性系统由加速度计和陀螺仪组成,其中加速度计用于测量加速度,陀螺仪测量方向。它们一起帮助设备确定它的位置(x,y,z)和方向(俯仰、偏航、滚转),也就是六自由度(6-degrees-of-freedom,6DoF)姿势。



六自由度的一般定义(来源)


当你移动智能手机去查看 AR 内容时,你的手机基本上是通过捕捉环境的许多照片,并进行比较以确定其位置。对于它捕捉到的每张照片,它还可以识别环境中视觉上独特、有趣的关键特征,例如场景中独特对象的边、角、脊。通过比较两幅图像及其各自的关键特征,并利用手机惯性测量单元的传感器数据,你的手机就可以通过立体计算来确定它的位置。这和我们的人眼如何推断出深度非常类似。



通过一种称为“SIFT 尺度不变特征转换”(Scale-Invariant Feature Transform)的的稳健、精确的算法进行检测与匹配](来源)

地图创建是如何工作的?

当我在一座陌生城市迷路时,我要做的第一件事,就是打开 Google 地图,四处寻找视觉上的线索(如地标、Starbucks 咖啡店、路标等)来找出我在地图上的位置。


为了让你的手机了解它在空间的位置,它需要首先通过“环顾四周”来构建并记忆它周围的地图。这张机器可读的地图基本上是手机识别的所有有趣点的图表,包括对它们的描述(如颜色和灯光等)。这些点或特征一起形成了一个稀疏的点云,看起来就像下面的 Gif 动图:



生成用于定位和三维重建的稀疏点云图。(来源


当手机失去跟踪时,这张地图对于手机重新定位非常重要。如果你遮住摄像头、放下手机或者移动手机过快并捕捉到模糊的图像时,你的手机可能会失去跟踪。当这些情况发生时,手机就需要重新定位。当手机再次看到场景并识别出场景的关键特征时,重新定位过程即开始。然后,它将这些特征与之前记忆的地图上的特征进行比较。当找到匹配时,它就能够再次找到它在空间的位置。

什么是 SLAM(同步定位与地图创建)

为了把所有的东西整合在一起,SLAM (Simultaneous Localization and Mapping,同步定位与地图创建)指的是更为广泛的系统,它允许手机构建和更新未知环境的地图,同时跟踪其在地图中的位置。SLAM 系统包括我们已经提到过的子系统,如手机的光学系统、惯性系统和地图创建系统。通过软硬件的紧密集成,手机现在拥有了这种难以置信的能力,可以了解它在世界上的位置,并在其环境中跟踪自身。

为什么 GPS 不够好?

GPS 能够提供你在世界上的经纬度位置的粗略估计,但它并不够准确,无法为你提供准确的位置。此外,GPS 在地下室和室内环境中也不起作用,因为卫星发出的信号在穿过固体物质时,会减弱或失真。

第二部分 计算机如何理解世界的样子?(几何学)

2016 年,当 Pokemon Go(精灵宝可梦 Go)第一次风靡全球时,我们被在现实世界中可以看到标志性黄色毛茸茸怪物给迷住了。然而,我们很快意识到,Pikachu(皮卡丘)并不知道世界是什么样子的。令我们失望的是,Pikachu 只不过是一个由计算机生成的图形,叠加在现实世界的画面上罢了。



期望与现实。右图的 Pikachu 对世界的样子一无所知。(来源


将时间快进到 2019 年,在 6D.aiwww.6d.ai)软件的帮助下,手机拥有了不可思议的能力:在空间上根据你的环境进行地图创建(三维重建)。这意味着它可以理解场景中真实物体的形状或结构,从而使遮挡和碰撞成为可能。遮挡是虚拟对象隐藏在真实对象后面的能力。而碰撞是虚拟对象与现实对象发生碰撞的能力。当虚拟对象对现实世界做出物理反应,就好像它们是真实的一样时,这使得 AR 体验变得更加可信。


6D.ai 在手机三维重建领域中取得了巨大的技术进步。借助这款软件,手机上的单目 RGB 摄像头得以拥有了深度传感器的能力。它可以扫描环境并捕获密集点云,然后通过计算几何将其转换为网格。


可以将网格想象成一张薄薄的隐形毯子,覆盖在场景上,勾勒出物体的外部表面。当移动手机时,这个网格会实时更新,为设备提供对物理环境的最准确的空间理解。有了这些新信息,虚拟 Pikachu 就可以跳到你的沙发上,钻到桌子底下,跑到橱柜后面。



使用 6D.ai 软件进行空间地图创建,无需深度传感器( 来源)



利用 ZED 的 3D 相机进行空间地图创建(来源


在下面的演示中,我们使用了 6D.ai,可以快速生成物理环境的纹理化三维网格,并允许虚拟的外星植物在墙壁、地板和桌面上“生长”。


00:00 / 00:00
    1.0x
    • 3.0x
    • 2.5x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00


    通过手机摄像头,我们现在就可以进入一个与我们世界平行的另一个维度,就像《怪奇物语》(《Stranger Things》)里的“逆世界”(The Upside Down)一样。



    Will 进入了“逆世界”,这是《怪奇物语》中的与我们世界平行的另一个维度。(来源

    第三部分 计算机如何像我们一样理解这个世界?(语义学)

    前方高能!告诉我,你在下面的照片看到了什么?



    来源


    有些人可能会说,看到了两条狗和两只猫。还有些人可能会说看到两条小狗和两只小猫。对那些真正优秀的人来说,会说发现两条腊肠犬小狗和两只俄罗斯蓝猫。


    当计算机看到这幅图像时,它们看到的只是一堆 1 和 0。但是通过卷积神经网络(CNN)模型,可以训练计算机来定位、检测、分类和分割对象。在最简单的层次上,卷积神经网络是一个系统,它获取如上图所示的源图像,通过一系列专门的层来计算出它在照片中看到的不同模式。每一层都有过滤器,经过训练后可以识别特定的图案,比如边缘、形状、纹理、角甚至是复杂的对象,比如狗、猫、人、骑车或停车标志。


    以 CNN 为主干,计算机现在可以执行其他计算机视觉任务,例如对象检测和分类、语义分割和实例分割。



    来源

    对象检测 + 分类

    对象检测与分类是图像中对象周围绘制边界并为其提供类别标签(如狗、猫、人等)的过程。有两种类型的算法需要考虑:


    1. 基于分类的算法分两个阶段进行。在第一步中,模型选择一个感兴趣的区域,然后尝试使用 CNN 对这些区域进行分类。对每个选定区域进行预测,直到 CNN 模型确信它已检测到它正在寻找的对象为止。这是一种计算开销很大的方法,因为你实际上是在处理整个图像来寻找一个对象。

    2. 基于回归的算法在算法的一次运行中预测整个图像的类别和边界框。这类算法最著名的例子是 YOLO(You only look once),它通常用于实时对象检测。


    00:00 / 00:00
      1.0x
      • 3.0x
      • 2.5x
      • 2.0x
      • 1.5x
      • 1.25x
      • 1.0x
      • 0.75x
      • 0.5x
      网页全屏
      全屏
      00:00


      YOLO 在运转。最先进、超精确、强大而快速的实时对象检测和分类。

      语义分割

      语义分割是这么一个过程:在像素级别上识别和理解图像中的内容。图像的每个像素都与一个类别标签相关联,例如草、猫、树和天空等。每个类别标签也由唯一的颜色高亮显示。



      来源


      但是,语义分割并不会以不同的方式来突出显示类的各个实例。例如,如果照片有两头奶牛,它将会突出两头牛的集体区域,但我们却无法区分这两头奶牛分别是哪头。而这就是实例分割发挥作用的地方。

      实例分割

      实例分割实际上就是一种对象检测和语义分割的组合方法。首先,模型将使用对象检测在两条狗的周围绘制一个边界框。然后在边界框内执行语义分割,将实例分割出来。



      来源


      这个特殊的模型被称为 Mask R-CNN(基于掩模的区域卷积神经网络),由 Facebook 人工智能研究团队于 2017 年构建。

      Mask R-CNN 能实时用于增强现实吗?

      简短的回答是肯定的。但在质量和速度方面存在权衡。Niantic 使用类似的深度神经网络来推断周围世界的三维信息,因此可以实现感知遮挡。在下面的演示中,很明显,像人类这样的动态对象是被实时分割和遮掩的,因此,Pikachu 和 Eevee 可以在它们后面跑动。


      00:00 / 00:00
        1.0x
        • 3.0x
        • 2.5x
        • 2.0x
        • 1.5x
        • 1.25x
        • 1.0x
        • 0.75x
        • 0.5x
        网页全屏
        全屏
        00:00


        下面是如何应用实时实例分割的另外一个例子,让你可以虚拟地尝试新发色。


        00:00 / 00:00
          1.0x
          • 3.0x
          • 2.5x
          • 2.0x
          • 1.5x
          • 1.25x
          • 1.0x
          • 0.75x
          • 0.5x
          网页全屏
          全屏
          00:00


          下面是情境感知和 AR 射击游戏的演示。神经网络能够识别场景中的不同对象及其材料(例如木材、玻璃、织物等)。因此,当虚拟子弹穿过每种材质时,会产生不同的动画效果。比如,当子弹射穿布艺椅时,羽毛爆炸了。


          00:00 / 00:00
            1.0x
            • 3.0x
            • 2.5x
            • 2.0x
            • 1.5x
            • 1.25x
            • 1.0x
            • 0.75x
            • 0.5x
            网页全屏
            全屏
            00:00

            所有这一切对增强现实的未来意味着什么?

            当计算机学会自我定位、像我们一样观察和理解这个世界时,我们就离虚拟世界和现实世界的融合又近了一步。


            未来有一天,我们将创建一个机器可读的、等比例的世界模型,称为“AR Cloud”(AR 云)。AR Cloud 有许多可供选择的名称,如“世界的数字双胞胎”、“镜像世界”或“魔法世界”。就我个人而言,我更愿意将它想象成一个完全覆盖在现实世界之上的我们世界的数字复制品。


            “AR Cloud 将成为计算机历史上最重要的软件基础设施,远远超过 Facebook 的社交图谱或 Google 的搜索引擎。”

            ——Ori Inbar,Super Ventures


            AR Cloud 不仅能够让每个人共享体验,它的应用还能很好地扩展到自动驾驶汽车、物联网、自动化、智能城市或自动导航送货无人机。


            不久的将来,我们将能够编程情境感知的媒体应用程序与我们的现实世界进行交互。2015 年,Niantic 发布了 Pokemon Go 的概念预告片,在预告片中,他们展示了数百人使用他们的 Pokemon 在时代广场与 Mewtwo 作战。随着 AR Cloud、5G、人工智能和 AR 眼镜等关键技术的成熟,这种体验将有望成为可能。



            来源


            JK Rowling 曾经说过:“我们不需要魔法来改变世界,我们已经拥有了我们内心所需要的所有力量,我们有能力更好地想象。”借助增强现实技术,我们的世界变成了一幅画布,我们可以用它来描绘出我们的想象。希望本文能够激发你使用 AR 来进行实验和创作!




            英文原文:


            https://medium.com/swlh/reality-check-the-marvel-of-computer-vision-technology-in-todays-camera-based-ar-systems-69b00947f954


            2019-06-06 17:4515922
            用户头像

            发布了 375 篇内容, 共 185.0 次阅读, 收获喜欢 944 次。

            关注

            评论

            发布
            暂无评论
            发现更多内容

            拥有阿里P8推荐的SpringBoot笔记,备战金九银十,吊打面试官不是梦

            Java 程序员 后端

            我所理解的Java锁

            Java 程序员 后端

            我用了3年,从小厂干到美团L8技术专家!分享一下面经!

            Java 程序员 后端

            Docsify 脚本执行权限问题

            HoneyMoose

            拿了 30K 的 offer!

            Java 程序员 后端

            教女朋友学习 vue中的组件

            Java 程序员 后端

            我上高中的弟弟都能看懂的Docker学习教程,你看看讲的怎么样

            Java 程序员 后端

            我的Serverless实战——能掰扯面试官的SSVM超详细解析!

            Java 程序员 后端

            我这么回答对Spring的理解,面试官狂问我什么时候入职?

            Java 程序员 后端

            抽象工厂模式

            Java 程序员 后端

            接口文档:第二章:使用Swagger接口的文档在线自动生成

            Java 程序员 后端

            手写线程池实战

            Java 程序员 后端

            手撕ArrayList底层,透彻分析源码

            Java 程序员 后端

            什么是 TypeScript

            HoneyMoose

            教妹学Java(二十五):搞懂 Java 中的构造方法

            Java 程序员 后端

            手把手教学妹CompletableFuture异步化,性能关系直接起飞!

            Java 程序员 后端

            捕获异常&指令重塑

            Java 程序员 后端

            教妹学Java(二十四):一文了解 Java 中的方法

            Java 程序员 后端

            数据结构之栈应用

            Java 程序员 后端

            我猜你还没明白如何利用好Redis、Redisson使用实现分布式锁?

            Java 程序员 后端

            手把手教你,从零开始搭建Spring Cloud Alibaba!这份笔记太牛了

            Java 程序员 后端

            掌握了2-3-4树也就掌握了红黑树,不信进来看看,建议收藏!

            Java 程序员 后端

            排序二叉树JAVA版实现

            Java 程序员 后端

            成为架构师之前,你一定要懂的-CAP-定理

            Java 程序员 后端

            我来告诉你解决死锁的100种方法

            Java 程序员 后端

            数据结构与算法-链表

            Java 程序员 后端

            手把手带你用数据库中间件Mycat+SpringBoot完成分库分表

            Java 程序员 后端

            推荐 6 个前后端分离项目

            Java 程序员 后端

            教妹学Java(二十 七):this 关键字的用法(1)

            Java 程序员 后端

            教妹学Java(二十 七):this 关键字的用法

            Java 程序员 后端

            教妹学Java(二十一):一文带你了解面向对象编程的所有概念

            Java 程序员 后端

            增强现实技术的“魔法”奇迹!移动AR运作原理全面揭秘_AI&大模型_Alex Chuang_InfoQ精选文章