AR那些不得不说的事

过去的2016年是忙碌的一年,也是富有挑战性的一年,整个2016做了很多事情,落户、学车、看房,当然最辛苦的还是参与了AR项目的前期预研工作。

其实刚开始接到这个任务时,整个团队遇到的最大的问题是3D知识的匮乏,产品形态的不确定性,大家看到的最后的产品方案是在论证、淘汰了诸多方案后的结果。

增强现实(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界叠加在现实世界并进行互动。这种技术最早于1990年提出。

世面上AR目前有识别、Marker、空间定位、平面检测这些基础功能和能力,利用这些基础能力,再结合手机上的传感器、3D引擎、视频抠图(如绿幕抠图)等相关能力,就能实现一些非常常见的AR效果,但是在多个终端同时互动、信息共享仍然需要更多的努力。


识别

通常分为特征识别和物体识别。

特征识别

特征识别顾名思义,对一张图片的特征进行提取,并进行识别,例如人脸识别、图片识别。这里要注意的是人脸识别指的是识别这张人脸是张三还是李四,而不仅仅只是检测出是一张人脸。
通常我们需要用到机器深度学习来做特征识别,通过成千上万张图片进行深度学习,而且需要正样本和负样本,例如下图就是利用了特征识别来实现的。特征识别输出的结果往往是一堆矩阵信息,矩阵信息可以做3D世界处理,也可以转换成屏蔽坐标,做二维处理。
Image

物体识别

物体识别,指针对某个特定物体进行识别,例如识别一朵花、一个汉堡等等,物体识别与特征识别不同的地方在于,其很难准确地输出矩阵信息,因为每个具体的物体是存在差异的,例如都是花,每朵花的大小、颜色、形状都会存在差异。
这也是AR领域目前遇到的一个比较大的挑战,因此物体识别,在AR效果上是比特征识别要差一些的。


Marker

Marker一般是用来做标记内容的追踪处理,其实识别过程是比较耗时的,出于对内容和技术的保护,现在大部分都是云端识别,然后再是本地追踪,例如HiAR亮风台
追踪耗时通常都非常短,因为其仅仅只需通过陀螺仪等传感器设备的辅助,在已识别到的内容的周围再次进行尝试识别,就可以达到跟踪的效果了,而不需要对整个图片内容进行处理。


空间定位

空间定位,主要指的就是SLAM技术,SLAM有三大功能点:定位、建图、闭环检测。移动端大部分是单目SLAM,双目SLAM由于硬件条件限制,用的不多。
之前github上有人分享过一个iOS端的SLAM开源Demo,但是存在几个硬伤:1、SDK过于庞大;2、重建3D世界耗时,差不多要等2~3分钟才能构建好。
幸运的是iOS11引入了ARKit,其就用到了SLAM的相关技术,同时也结合了传感器进行辅助定位,何以验证呢?把手机摄像机遮住,发现其依然可以进行空间定位,只是有一定的误差。


平面检测

平面检测是iOS11在ARKit中提供的一个能力,目前仅支持A9芯片以上的机型,而且只支持水平平面的检测,并不支持垂直平面的检测,同时也不支持跨平台。但其可以与苹果自身的SceneKit或者是Unity以及其它自主开发的3D引擎相结合。
说到平面检测,微信团队下的AR团队已经开发出了曲面检测与跟踪的能力,例如在一些饮料瓶表面进行识别。


其它必要的内容

上面提到的是AR的核心能力,但为了达到更好的AR效果,我们依然需要一些其它内容的辅助,其中应用的比较多的就是深度学习、OpenCV、3D引擎、视频抠图、传感器(陀螺仪与加速计)等等。

深度学习

目前AR技术的深度学习大部分都是在后端完成的,或者是把训练好的模型放在本地SDK中,进行快速识别。深度学习的工具和算法层出不穷,其核心的难点在于模型的建立,一个坏的模型有时很难训练出一个理想的效果。而对模型的训练,往往是作线程回归,得出一个最优解。

OpenCV

OpenCV是一个开源的图像视觉处理库,比较经典的应用是人脸识别,OpenCV中已经有了非常好的视觉处理算法,对图像内容的处理、检测等,都有非常强大的能力。

3D引擎

其实像淘宝、微信这些大体量的APP,其本身可能并不会去包含一个体量也很大的3D引擎,这样的话整个APP就变得很臃肿,同时APP与引擎之间的结合、性能都会是一个大问题,但所幸的是在应用APP中使用AR,并不需要包含功能特别强大的引擎,可能我们只是需要一个基本的3D动画渲染,粒子效果,材质、光照、骨骼等基础内容,因此嵌入一个轻量化的3D引擎是可行的。目前github上也有一些开源的跨平台的3D引擎,其中就有一些体量较小的。

视频抠图

众所周知,视频内容是不含alpha通道的,如果想要在AR里面植入视频体验,可能有时候需要对视频进行抠图,例如在绿幕背景下拍摄一段视频,然后再在渲染的时候在OpenGL渲染Shader里面把绿色内容改成透明色,当然问题不针这么简单图像内容有YUV与RGB两种模式,通常对YUV进行抠图效果会更好一些,但在图像的边缘处理方面依然会一些噪点,这里需要更多的算法优化,这个可以参考专业的抠图软件。

传感器

移动端口的传感器有很多,AR需要用到的大部分就是陀螺仪与加速计,主要是解决在3D引擎中控制视角,这里需要一些必要的3D知识,首先得知道模型是怎么被投影到手机屏幕中来的。也就是MVP矩阵运算的相关知识,以及传感器中的旋转矩阵、四元素是如何作用和修改这些矩阵运算的。

LBS

Pokemon Go这款游戏中就用到AR的概念,同时这款游戏中有一个非常重要的一点:LBS定位。LBS定位事实上已经是一个比较通用的功能了,但LBS防什么作弊,LBS定位不准的问题始终都是存在的。
LBS作弊,在Android手机上很容易就能办到,为有效识别作弊行为,通常可以从LBS的运动速度、以及使用商用定位SDK,定位数据加密,并与作弊数据进行比较,有效识别作弊行为。
LBS定位不准是一个一直存在的问题,尤其是在一些乡下偏远的地方,因为定位目前大部分是基于基站三角测距、卫星信号、WIFI热点数据等手段,不管是哪种手段,都会存在一定的盲区或者是误差。只有通过各种手段的结合才能有效地降低偏差问题。

总结

AR是目前一个风口技术方向,其技术门槛还是相当高的。而成熟、稳定的运营也是一个难点,对于各种AR体验的兼顾、性能问题、深度学习、模型的训练。都是一个非常大的挑战,大家还记得2016年年底支付定集五福的活动吧。其中扫“逼”字也能被识别为“福”字。就可以看出来目前图像识别技术其实仍然有很多的挑战。

2017-02-08 11:29223