【51CTO.com原创稿件】据市场调研公司Digi-Capital数据:到2020年,AR市场规模将达到1200亿美元。AR发展如此迅猛,自然少不了背后技术的支持。东方世界3D研发中心副主任杨潇在WOT2018全球软件与运维技术峰会上进行了主题为《AR开发中的主要技术点探索》的演讲,杨老师从AR应用中视频处理、人脸特征点识别应用等几部分入手,对AR技术进行了详细的讲解。
图1 东方世界3D研发中心副主任杨潇
一、AR技术概述
AR技术是将真实世界信息和虚拟世界信息“无缝”集成的一种技术,它把虚拟世界信息叠加到真实世界中,从而实现超越现实的感官体验,广义上的信息叠加,包含视觉、声音、触觉等,这次演讲的主要内容是视觉信息方向。AR一般通过一个摄像头来捕捉现实世界,然后在现实世界的基础上加一些虚拟世界的内容,构成增强后的虚拟融合世界,理想状态就是人们无法区分后叠加的虚拟物体。AR主要有三个特征:虚实结合、实时交互和三维定位。
1、虚实结合和实时交互
图2 虚实结合及实时交互
摄像头在捕捉到现实世界的视频图像后,需要利用3D引擎技术将三维虚拟物体叠加到现实世界中,但是,这时的虚拟世界和真实世界相比,还是会存在失真的问题。如果想要把AR世界做的更加真实,还需要根据真实世界的光量增加光照,从而让虚拟世界的物体根据现实环境明暗增减亮度。但上述只是一些机械的叠加,整体缺乏真实感,所以,在整个世界的渲染完成后,可以利用实时交互技术,让叠加的虚拟世界跟真实世界互动,人们才能在感官上认为虚拟物体是真实存在的。实时交互,既有传统的触屏交互,也有比较新颖的交互技术,如微软的HoloLens手势交互或者语音识别。
2、三维定位
三维定位技术在AR中也是关键的一环,常用的三维技术有以下几种:
扫描二维图片:扫描特定的二维图片,识别出图片内容后,在图片内容的基础上叠加3D物体,早期的很多AR应用都采用这种形式,让人们误以为AR就是扫描一张图片,在图片处出来些虚拟物体。
扫描三维物体:通过扫描三维物体,可以展示出物体的详细信息。比如:支付宝可以识别花朵,通过AR扫描花朵可以知道花的名字以及花朵简介。
SLAM(Simultaneous Localization and Mapping,即时定位与地图构建):通俗的说就是估算相机的位置和朝向,以便后续在叠加虚拟场景时把虚拟物体叠加到合适的位置,以增加真实感。其核心就是要解决“我在哪”的问题。这是一个非常复杂的问题,HoloLens上用了4个环境感知摄像头、1个深度摄像头、1个惯性测量单元,通过多个传感器提供冗余数据,以实现部分摄像头被遮挡时定位的鲁棒性。在无人驾驶领域一般还要结合激光雷达进行定位,移动应用中不需要很高的精度,一般通过单目摄像头进行SLAM定位即可。但是需要借助图像的特征点,特征点一般是纹理变化明显的位置,如瓷砖的边界点或是拐角点,对于摄像机获得的两帧图像很容易把特征点匹配起来,然后根据图像的变化反算相机的运动,从而定位出相机的位置并构建平面。
图3 三维定位
AR开发其实主要分两层,一层是AR相关的SDK(Software Development Kit,软件开发工具包),另一层是应用层。AR SDK层提供了底层支持,包括获取视频流,获取特征点重建平面等方面,而应用层,可以根据底层的提供的视频流和特征点构建自己好玩的应用。
图4 AR相关SDK
3、AR相关SDK
这里列举了几个常用的AR SDK。
Vuforia(可扫描识别图片):后台上传需要识别2D图片,通过SDK扫描即可识别,可以增加一些物体,实现简单的AR效果及其应用。
Wikitude(可扫描构建平面):是一款应用比较广泛的SDK,目前全球已有10万的开发者,遍布100多个国家。它本身集成了单摄像头SLAM功能可以定位出相机的位置和检测平面,同时支持iOS和Android系统,拥有Unity开发插件,开发者使用起来比较简单。但是在使用过程中也出现了平面的跟踪不够稳定,平面容易丢失等问题,后来东方世界运用了伪AR效果解决了这些问题。即在空间中构建虚拟平面(非真实跟踪的平面),根据手机陀螺仪获取手机的旋转信息来驱动虚拟相机的旋转,让人感觉手机转动的同时,虚拟物体(虚拟相机)的位置也发生了转动,感觉虚拟物体存在于真实世界中,一定程度上也达到了AR效果。
ARInterface:在Unity2017.2.1以上版本中已经提供,它的底层是ARKit和ARCore,进行了统一的封装,减轻了开发者的工作量,而且开发者仍然可以通过ARKitInterface访问ARCore和ARKit的接口。
4、应用层
应用层主要包括基于视频的应用和基于特征点的应用两部分。
基于视频的应用:AR SDK通过摄像头将真实世界传给应用,应用自身可以对视频进行处理,得到自己的特殊应用。例如,可以通过绿幕抠图获得自己感兴趣的部分图像,这样就可以把真实的人叠加到虚拟场景中,来一个大雪山上的直播等等。
基于特征点的应用:通过AR SDK可以获得3D平面,可以将3D虚拟物体叠加到平面上实现AR Dragon(App Store中有该应用)那种效果。另外也可以通过OpenCV等提取脸部特征点,利用脸部特征点可以实现变脸、换脸等效果,或其他好玩的效果。
***R技术应用场景
AR应用不仅限于计算机领域,也可以应用到其他领域:
·情感分析,可以根据表情分析情绪;
·在路口利用面部识别,记录闯红灯的人群;
·在工业领域,可以利用目标识别,解决检修问题;
·信息增益可以在摄像头识别出来感兴趣的目标或者人脸之后,叠加需要的显示;
·AR显示还停留在2D屏幕显示或头盔式阶段,目前还缺少触屏之于智能手机那种革命性的变化;
·处理、传感、扫描,AR的***解决方案是重建出三维场景,这样将虚拟物体叠加到真实场景时才能解决视频中真实物品遮挡的问题,也有利于系统对场景的理解。
二、AR应用中视频处理
1、AR视频直播应用系统架构
图***R应用中视频处理
如图5所示,在一个典型的AR直播系统架构中,上层是和视频相关的内容,下层是3D 虚拟物体显示引擎。通过普通的相机、3D相机或者全景相机获得视频,其中3D相机由左右两个普通相机构成,可以模拟人的左右眼,将两路视频合成后,拼接成左右格式的视频,全景相机由多个相机构成,每个相机拍摄不同的角度形成360度拍摄,通过软件拼接形成一路视频。所以后续的处理三种相机是相同的。经过普通相机、3D相机和全景相机拍摄出视频后,将视频进行解码压缩、推流、CDN分发操作,通过播放器拉视频流进行播放,三种视频的播放方式不同,需要在播放器中特殊处理,比如全景视频将画面投影到球面上,人站在球心进行观察,同时获取手机陀螺仪朝向,驱动视频的渲染,看起来的效果就是人朝向不同的方向看到不同的画面。播放器层进行播放的同时,通过3D引擎层叠加虚拟物体作为道具以实现虚实叠加的效果。
对于3D相机部分,东方视界使用的是裸眼3D设备,播放器层要做特殊的交织处理,即在裸眼3D的屏幕上不用戴VR眼镜就可以看到3D效果。同样的,下面的虚拟物体层,也可以通过特殊的架构处理,达到裸眼3D的效果。
2、AR融合及伪AR处理
图6 AR融合及伪AR处理
AR融合的核心是平面检测和跟踪,这部分AR SDK已经提供了,它是现实世界和虚拟世界的一个桥梁,可以把虚拟物体放在这个平面上,这样看起来就像是真实世界的地面上确实有个物体一样。
由于平面跟踪的不稳定性,部分应用采用了伪AR处理技术,它构建的是虚拟平面,将物体放到虚拟平面上,在相机旋转时获取陀螺仪数据,用陀螺仪的数据来驱动虚拟相机来进行旋转操作,人眼看起来和物体在虚拟空间里的感觉实际差不多。其技术关键点是用陀螺仪数据来驱动虚拟相机实现伪AR的效果。
3、绿幕二次抠图
视频处理中还有一个实用的技术就是绿幕抠图。绿幕抠图其实在影视里面用的比较多,影视里面的抠图是离线处理,效果会更好。绿幕抠图是将人物抠出之后替换背景,或者将人物抠出之后放在虚拟的场景里。这方面前人有很多研究,但东方世界通过测试发现基于颜色的二次抠图比较有效,方法是给定背景颜色阈值,然后抠除背景,但人的头发等边缘往往有绿边,不容易抠干净,这时提高背景颜色的阈值,进行第二次抠图。
三、人脸特征点识别应用
建军70周年时,人民日报推出了一款军装照,可以将自己的脸替换到不同时期的军装上,引起了一番“换脸”浪潮。还有像FaceU激萌等软件,也可以实现在脸上增加一些特殊装饰或者在素颜的脸上上妆。这些应用主要是运用了特征点识别技术实现的,但如何运用这些特征点进行识别并应用,主要从以下几方面入手。
1、特征点的来源
图7 人脸特征点的应用
首先,在开发特征点应用前需要先获得特征点,基于OpenCV和Dlib特征点识别库可以提取一些稳定的特征点,还有其他的收费特征点识别库,如Face++等。例如图7中,在小猫的鼻子、眼睛、嘴部分都识别出了特征点,而且这些特征点是有序号标记的,便于后续在应用中使用,具体特征点数量会根据不同的特征点识别库有所不同,比如,OpenCV或者是OpenCV+Dlib特征点拥有68个特征点模板,而Face++拥有超过100个特征点模板,特征点越多识别的越精细。
2、3D视频挂接
拥有了识别出的特征点,可以进行哪些应用呢?其中之一就是可以进行3D饰品挂接。3D饰品挂接可以在识别出人脸以后,增加一些头饰或眼镜,或者是进行换脸,甚至可以估算头部姿态,然后增加一些3D物体、装饰、头盔等。基于这些特征点,可以直接将虚拟相机的位置、朝向估算出来,再叠加3D物体的时候就可以基于虚拟相机让整个AR场景看起来更真实。
图8 3D饰品挂接
3D饰品挂接最重要的是需要定位3D相机,通过2D特征点的位置和虚拟的3D物体,可以反算出虚拟3D相机位置。具体的反算过程比较复杂,简单来说就是相机定标和相机外参数的计算,实际应用的时候OpenCV可以解决反算的问题,在Calib3d与solvePnP之间可以进行调用。在获取3D相机具体位置之后,直接在头部模型的合适位置叠加3D眼镜或其他饰品,基于特征点的3D 人头模型和3D饰品是不动的,但是基于2D特征点计算出来合适的相机位置。相机的位置移动,模拟出的3D饰品也会跟随移动,仿佛3D饰品确实贴在真实的人脸上一样。
3、换脸应用原理
3D饰品挂接是基于人脸特征点的应用,另一个重要应用是换脸,换脸应用的背后有哪些原理作支撑呢?下面来看一下换脸应用的处理流程。
图9 换脸应用原理
如图9所示,脸部图像1是摄像头获取的真实图像,脸部图像2是想换取的虚拟图像,脸部区域识别可以通过OpenCV等特征点识别库提供,并且OpenCV可以实现多脸识别,识别之后会出现脸部区域1和脸部区域2,然后进行简单归一化,就可以基于特征点做一些选择性互换。
图10 换脸应用
举一个基础“换脸”的例子,如图10所示。 如果想实现“换脸”就要先建立一个基于特征点的换脸模型,然后使提取的脸部特征点(眉毛、鼻子等)与模型相匹配,取区域2中的纹理来替代区域1中对应特征点位置的纹理,这样就可以实现“换脸”。需要注意的是:眉毛以上没有特征点,眉毛以下才存在特征点,但是为了避免模型替换之后过渡部分突兀,东方世界采取了增加眉毛上面部分模型的方法,眉毛上面新增的部分作为额头,再做一些渐变处理,这样的做法会使整个脸看上去比较自然。
那么,如果想替换照片里的人脸,也就像人民日报的军装照一样,需要用到什么方法呢?首先,需要建立一个标准模型,模型中有一张人脸,然后将想要换脸的真实人脸特征点粘贴到标准模型上,***再利用纹理影射就可以实现建模替换人脸的应用了。
以上内容是51CTO记者根据东方世界杨潇在WOT2018全球软件与运维技术峰会的演讲内容整理,更多关于WOT的内容请关注51cto.com。