• 独家 | 深度技术剖析谷歌ARCore:比苹果ARKit还厉害?

    青亭网( ID:qingtinwang )--链接科技前沿,服务商业创新

    昨日,谷歌突然重磅发布了属于安卓系统的AR SDK——ARCore,并号称将要安装到一亿台安?#21487;?#22791;上,目前三星S8和谷歌自家的手机Pixel已经都获得了支持。这一步,被普遍解读为对苹果六月份发布的ARKit的正面回应。

    苹果在移动端AR上?#35789;?#27769;汹,ARKit?#29615;⒉季?#21047;了科技圈的屏,涌现出无数?#30446;?#21457;者demo。相比之下,谷歌此前推出的需要TOF深度传感器使用的Tango平台,一下子似乎被拍死在了沙滩上,乏人问津。但如今,谷歌的ARCore不需要再仰仗TOF,而是和ARKit类似,直接使用手机的单目RGB摄像头,加上内部的IMU就能实现AR。这让不少人安卓开发者为之兴奋。

    可以想象,两大移动互联网领域的超巨头在不远的未来,基于手机端AR必有一战。那么,ARCore底层技术的实现原理为何?是否有谷歌说得那么神?相比ARKit又有?#25105;?#21516;和优劣势?

    ?微信图片_20170830135220

    青亭网第一时间联系了专注于AR领域的源视感科技CEO周凡,他连夜阅读了ARCore的代码,并对谷歌放出的demo进行了逐帧分析。下面请?#27492;?#24102;来的第一手报告:

    1

    Apple的ARKit发布之后, 市场一片欢腾。经过一?#38382;?#38388;的?#32479;?#21518;,对于AR的热情再一次被点燃。就在苹果沾沾自喜(我猜的)、安卓开发者表示强烈不满时(也是我猜的),谷歌昨天发布了Tango之后的单目+IMU增强现实方案——ARCore。

    目的很明确,连名字都很霸气的相似——就是要怼ARKit去的。作为AR技术的先驱, 谷歌果然出手?#29615;玻?#19968;次性在Github?#25103;?#20986;三个SDK,涵?#21069;?#21331;原生、Unity3D和Unreal平台。虽?#24187;?#26377;像上次的SLAM方案Cartographer那样直接开源,但是对应用开发者,无论是手机端,还是?#24230;?#24335;设备都算非常的友好了,貌似要一统开发者天下。

    2、解密三大核心功能

    连夜读了有限的代码,可以看出ARCore的核心功能有三个:相机姿态估计, 环境感知及光源感知(Light Estimation)。由于资料有限,只能做一个大概的估计与分析。

    ?微信图片_20170830135226

    前两个功能,研究SFM、SLAM的同学应该不陌生了—— 前者通过单目相机读取图像,通过特征的匹配估计相机的运动轨迹。但是ARCore极有可能用的不是常见的特征匹配法。这里先卖个关子,下文再详细分析运动轨迹的估计方法。

    至于环境感知功能,名字起的很高大上,但具体实现的功能其实就是检测平面。这样做的?#20040;?#23601;是在现实环境中放置虚拟物体的时候位置相对合理,不会出现类似物体悬空,或者在斜面上仍然处于水平的姿态。

    第三个光源感知功能,按照谷歌官方的说法是,ARCore能感知现实世界的光源位置,使虚拟物体能够形?#19978;?#24212;方位的影子,从而增加虚拟物体在现实世界里的真实度。这个功能堪称惊艳!从谷歌发布的Demo视?#36947;?#30475;, 虚拟物体的影子确实是根据光源形成了相对应方向的影子。

    ?微信图片_20170830135230

    但是分帧仔细分析视频后, 发现该功能在强光源的状态下效果才不错,在散漫光源的情况下就一般般了。

    个人估计:是因为使用的匹配算法的原因。这样,我们就要回到刚才卖关子的ARCore第一个核心功能——姿态估计上,进行具体分析:

    传统的特征匹配方法只计算关键点和描述,几十万像素的图像只用了几百个特征点,屏蔽了大部分可能有用的信息,更别说对灰度的估计了。所以,ARCore很有可能是使用了直接法来做相机位姿估计(对直接法感兴趣的同学可以去看看LSD, SVO, DSO等解决方案)。

    简单来说,直接法直接使用的是整张图片的像素信息,通过像素亮度来进行运动轨迹的估计。这样的?#20040;?#26159;速度很快,直接跳过计算关键点与描述子的?#34903;琛?#21516;时在?#34892;?#32570;失特征点的环境下,只要环境中有明暗变化,也能工作,如此大大的避免了跟丢的情况。

    ?微信图片_20170830135234

    直接法的数学推?#23395;?#19981;详述了,但是该方案是基于灰度不变的强假设。换句话说, 就是同一空间的像素灰度值,在?#31354;?#22270;像上都是不变的。这样?#25237;?#20809;源的强弱及位置变化要求比?#32454;擼?#21516;时相机的自动曝光功能也需要关闭,使得图像不会整体变亮或者变暗。(这一点在外媒TheVerge的上手测试中有体现)

    ARCore的所谓光源感知功能估计就是基于像素灰度变化的计算。这也就是为什么不同的光源强度下,形成的影子的方向效果有好有差。谷歌果然聪明,在位姿估计的同时顺水推舟地发?#23478;?#20010;光源感知功能,一石二鸟!形象一下子就盖过了ARKit。

    由于直接法完全依靠像素梯度优化来估计相机位姿,作为Ceres(谷歌推出的SLAM闭环检测算法)的东家,这点对于谷歌来说并不是什么难处。另外一个ARCore使用直接法的例证就是点云。

    3、和ARKit相比如何?

    ARCore的SDK里是有点云功能的——由于Unity3D的Demo存在Bug,无法看到具体形成的点?#21078;前?#31264;密还是稠密的。但无论是半稠密还是稠密点云的构建,这都是特征法无法实现的。个人估?#21078;前?#31264;密的点云。如果ARCore在没有GPU CUDA加速的情况下真构建了稠密点云,只能膜拜Google大法了。

    ?微信图片_20170830135237

    相比之下,ARCore能够实现的光源感知和点云功能,ARkit实现不了——如果ARKit是Metaio(苹果之前收购的德国公司)做的话,采用特征法的可能?#28304;螅?#36825;样就无法实现光源感知,点?#35780;?#35770;上是能构建,但只能是稀疏的,基本上就是一堆点,看不出什么。

    至于ARCore整体的工程是SLAM还是VIO,个人的偏向还是VIO更有可能。就如ARKit一样,使用的场?#26696;?#20559;向于手机端,在场?#23433;?#22823;的情况下,VIO作为定?#29615;?#26696;已经绰绰有余,而且更加节省计算资源。

    无论如何,ARCore推出,?#35895;?#20102;安卓市场在AR上?#30446;?#30333;。基于安卓系统的市场?#21152;新剩?#33529;果还敢说自己是最大的AR平台吗?

    更多精彩内容,关注青亭网微信号(ID:qingtinwang),或者来微博@青亭网与我们互动!转载请注明版权和原文链接!
    青亭网

    微信扫码关注青亭网

    青亭网

    青亭 | 前沿科技交流群01

    责任编辑:
    分享到QQ 分享到微信
    后参与评论
    切换注册

    登录

    忘记密码 ?

    您也可以使用第三方帐号快捷登录

    Q Q 登 录
    微 博 登 录
    切换登录

    注册

    云南十一选五开奖时间