ARKIT/ARCore对比分析(一)
ARKit简介
ARkit是什么? 苹果为什么发布ARkit?(6月5日的苹果WWDC 2017全球开发者大会上,苹果发布了AR开发平台ARkit)
1.概述:ARkit应用平台是苹果的首个 AR 产品。iOS 11引入了ARKit应用平台,这是一个新框架,可让您轻松创建无与伦比的iPhone和iPad增强现实体验。
通过将数字对象和信息与您周围的环境融合,ARKit将应用程序超越屏幕,释放它们以全新的方式与现实世界进行交互。ARkit 把 iPhone 相机、动作传感器以及图形处理器等硬件特性与深度感应、人造光渲染等精密算法结合在了一起。可以让开发者们将更多 AR 应用代入到 iOS 设备。
2.优势
第一,快速稳定的运动定位,这个是最基本的AR功能,从演示中可以发现整个定位非常稳定且准确,说明精度很不错(原因是基于SLAM的框架的应用与IMU的有效融合与后期优化),桌面的特征并不算丰富,说明鲁棒性很好,最后渲染的Demo模型很复杂,但是感觉很流畅,说明实时性和算法能耗都深度优化过。从发布会的整个演示来看,ARkit的水准应该是业内顶级的。
第二,平面和边界的估计,平面估计在单目SLAM上并不稀奇,只是从演示中很难判断是基于三维点云拟合还是IMU数据,初始化的方式看起来更像是基于IMU的。边界估计这个之前不常见,演示中唯一可以看出来的是那个虚拟小人掉到桌子外,说明ARkit可能不是像snapchat那样简单的VIO类算法,(从放出来的文档看就是VIO...)点云构建的部分是有一定输出的。
第三,光照估计,这个不好说,单目做光照估计的需求很可能和算法本身的架构有关,以什么形式输出不看到接口很难判断,大部分的AR应用是不需要这类数据的,除非是要基于实际光照做高还原的真实渲染。
第四,尺度估计,这个就非常厉害了,做单目SLAM的同学都有了解,单目是无法解决尺度问题的,虽然视频里没有展示,但是如果真的解决了尺度问题,说明苹果在IMU和视觉融合方面做了非常先进的工作,而且工程化的非常好,很期待这个功能的实际体验。
第五,对各个开发平台或引擎的支持,这点说明苹果做AR绝对是“蓄谋已久”的,并且野心很大,不给其他对手留余地,一上来就要建立一个完整且广泛的AR内容开发生态。
总体来说,ARkit基本实现了单目+IMU的SLAM算法可以提供的大部分功能,并且质量很高,我相信苹果是严格检查过机型覆盖率,实时性和能耗的,那么毫无疑问,凭借广泛的硬件覆盖率,iOS会成为最有活力的AR内容发布平台,PMGO的体验肯定有质的飞跃,一大波真AR游戏应用将会到来。[1]
3.不足
第一个不足是三维重建的能力,无论从文字解释还是Demo演示来看,目前的ARkit仅仅支持平面的“重建”。
这里姑且先算做重建,因为是否支持垂直面,任意角度的平面,甚至多个平面目前都还不确定(从目前发出来的文档看只支持水平面,说明平面的拟合可能是依赖于IMU的,仅用部分点云判断深度信息)。就算ARkit包含完整的平面重建能力,对于AR应用来说依然还是不足够的。
增强现实最基础的要求是对现实世界的理解,比如几何体的重建,这方面缺失带来的问题就是无法和真实世界的物体发生合理的物理碰撞,比如演示中看到一个虚拟小人掉下桌子,我们是看不到这个小人掉落到地面的效果的。另外就是虚实遮挡,假设桌面上有一个水杯,那么如果无法重建水杯的Mesh,我们就看不到水杯遮挡住虚拟模型的效果,而会看到虚拟模型“叠加”在水杯之上,这个会比较影响整个AR的体验。当然我相信以苹果的实力,想做重建并不是没有办法可想。
这里我有两个猜测,一个可能是三维重建的流程,交互和接口苹果还在优化中,目前AR基本的功能接口已经足够发布了,苹果想慢慢来。另一个可能是苹果想依托于硬件来解决三维重建的问题,众所周知单目做实时三维重建是非常有难度的,而基于双目或深度摄像头则可以相对简单的解决这个问题,顺便苹果还可以展现9月份即将发布的iPhone8的“特殊”,两全其美。
第二个不足,就是识别的能力,目前AR最火爆的应用场景其实不是游戏而是线下营销,而线下AR营销非常依托于识别算法和定位算法的对接。
苹果可以在移动端单目设备上做出这样成熟的SLAM算法,单纯的识别和定位应该都不是问题,难点可能在于定位算法如何跟识别算法对接,如果依赖于端上的识别算法,那么按照现有的苹果更新审核机制,AR内容的更新会非常麻烦,苹果可能需要提供专门的编辑器;但是如果基于云端识别,则苹果的用户群体过于庞大,到时候云识别的QPS会很惊人,是否苹果还没有准备好接受这样的考验?
此外,服务于AR的单目SLAM可以说是目前业界没有很好解决的一个课题,所以苹果在这方面做出了很大的推进。而如果我们限定于二维图像的识别和跟踪,则有非常多成熟的SDK可以使用,就连Hololens也可以兼容使用Vuforia,也许苹果并不准备自己承担这和识别算法对接的需求。
相关文章:

每个程序员必看:如何在40岁后继续做软件开发?
导读: 这是一个 42 岁的开发者所写经验分享文章.并且列出一些他 18 年多身为软件开发者的经验谈.许多部分看完后都会希望自己当时就能够了解,所以很推荐不论是新手或是老手都要好好阅读这一篇文章。 故事很长,一切从 1997 年开始讲…

【ACM】杭电OJ 1009 (FatMouse' Trade)。
两个条件貌似缺一不可 不明白为什么不能是sum(s[i].value*s[i].cat_food); #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std;const int maxn 1010;typedef …

Java图形化:布局方式
布局方式 FlowLayout:流布局 BorderLayout:边框布局 GridLayout:网格布局FlowLayout(流布局) 像Word打字,组件从左向右排列,一列排满后自动换下一行。组件默认居中对齐,可以设置左/右对齐。流布局会维持组件的原始大小…
ARKIT/ARCore对比分析(二)
ARKit(2) ARCore 和 ARKit平台特点比对 曾与一家最大的 IMU OEM 交谈过,为了节省成本,他们的智能机IMU 在工厂中只是在单一温度下进行标定。这意味着 IMU 硬件在某一指定的温度下,误差被调节到最低。但当手机发热的时候,IMU 就不…

【ACM】杭电OJ 1789(Doing Homework again)
http://acm.hdu.edu.cn/showproblem.php?pid1789 cmp函数: 先按扣分由多到少进行排序,然后如果遇到扣分一样的,则先做时间少的。 vis数组: 最要的事,放在它的截至日期那一天去做,然后,之后…

推荐使用的几款Java常用基础工具库
通用工具类(字符串、时间格式化、BeanUtils、IO)1. commons-lang3库1.1. org.apache.commons.lang3.StringUtils类日常代码中,我们经常和String字符串打交道,经常对字符串进行处理,稍微不注意的话,很容易出现类似NullPointerExcep…
ARKit 与 ARCore比对(三)
ARKit 和 ARCore剖析、结构、原理介绍 ARKit 和 ARCore 都是三部分:相机姿态估计, 环境感知(平面估计)及光源感知。 ARCore 的部分源码:https://github.com/google-ar/arcore-unity-sdk/tree/master/Assets/GoogleARCo…
前端开发之retina屏幕
像素 && ppi 首先先说一下pixel(picture element),显示图像的最小单位,有多个带色彩的像素点组成的整体就是一张图像。然后再说一下ppi(pixel per inch)这个概念,其实就是在每英寸显示的像素数。 设备像素 && 逻辑像素 &…

【ACM】Uva 1152 (4 Values whose Sum is 0) 二分查找lower_bound() 和upper_bound()的使用
【问题描述】 The SUM problem can be formulated as follows: given four lists A, B, C, D of integer values, compute how many quadruplet (a, b, c, d) ∈ A B C D are such that a b c d 0. In the following, we assume that all lists have the same size n. …

广东“基因编辑婴儿事件”调查组:将对贺建奎依法依规严肃处理
雷锋网(公众号:雷锋网)消息,1 月 21 日,新华社报道了关于“基因编辑婴儿事件”的初步调查结果,该结果宣称,该事件是南方科技大学副教授为了追逐个人名利而进行的人类胚胎基因编辑活动;而在此过程中…

测试我的第一个随笔
# encodingutf-8## Python Version 3.5# 利用数学中的复数 求解 一元一次方程(从网上看来的)def solve(qx, var): qx qx.replace(, -() ) c eval(qx , {var: 1j}) return -c.real/c.imagres solve(2*x 4 8,x)print(res)转载于:https://www.cnblogs.com/imyjy/p/…

ubuntu16.04 下安装Opencv2.4.9
ubuntu16.04 下安装Opencv2.4.9 OpenCV的源码download from: https://sourceforge.net/projects/opencvlibrary/?sourcetyp_redirect[plain] view plaincopycd opencv-2.4.9 mkdir build sudo chmod -R 777 build cd build [plain] view plaincopycmake -D CMAKE_…

UVa 167(八皇后)、POJ2258 The Settlers of Catan——记两个简单回溯搜索
UVa 167 题意:八行八列的棋盘每行每列都要有一个皇后,每个对角线上最多放一个皇后,让你放八个,使摆放位置上的数字加起来最大。 参考:https://blog.csdn.net/xiaoxiede_wo/article/details/79973171 1 #include <io…
AR + ROS +UBUNTU16.04+ORB-SLAM2
ORB SLAM2 USB摄像头 实验环境ubuntu 16.04ros kinetic OPencv2.4.9 Step1: 配置环境变量 $ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/src 在’src’目录中可能没有任何软件包,只有一个CMakeLists.txt,依然可以编译它: …

Cross-validation
2019独角兽企业重金招聘Python工程师标准>>> 1: Introduction To Validation So far, weve been evaluating accuracy of trained models on the data the model was trained on. While this is an essential first step, this doesnt tell us much about how well …

【ACM】杭电OJ 1877 又一版A+B(进制转换)
注意:A和B都是0的情况 A和B为int也可以AC #include<cstdio> #include <iostream> using namespace std;const int maxn 10000;int a[maxn];int main() {long long A,B;int m,k;while(scanf("%d",&m)!EOF){if(m0) return 0;scanf("…

[POI2009]KAM-Pebbles BZOJ1115 [ 待填坑 ] 博弈
有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数。两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏。问先手是否必胜。 感谢MT大牛翻译. Sample OutputNIE…

ROS中使用摄像头的问题
ROS中使用摄像头的问题 0.prepare 4 . 安装uvc_cam $ sudo apt-get install ros-indigo-uvc-camera $ source /opt/ros/indigo/setup.bash 采用apt-get的方式,直接装在了ROS的安装路径中,并设置工作路径。 安装成功后在/opt/ros/hydro/的路径中就…

EmEditor Professional(文本编辑) 下载地址
http://www.greenxf.com/soft/2126.html 16.1.5 http://www.cr173.com/soft/3031.html 16.3.0 http://www.pc6.com/softview/SoftView_43146.html 17.8.1 绿色注册版 EmEditor 71 个实用插件汉化版 http://www.onlinedown.net/soft/35609.htm

【ACM】杭电OJ 4548 美素数(二次打表)
二次打表,第一次是标记哪些是素数,哪些不是。 第二次是前n个数中 “本身是素数 && 各个位上的和是素数 ” 的个数 TLE: #include <iostream> #include <cstdio> using namespace std;int fun1(int x) {int sum0…

animation与transition区别
transition: 过渡属性 过渡所需要时间 过渡动画函数 过渡延迟时间;默认值分别为:all 0 ease 0 1、局限性: 1)只能设置一个属性 2)需要伪类/事件触发才执行 3)只能设置动画初始值和结束值 2、过…

如何将cocos2d-x程序分别移植到ios,android,windowsphone三个手机平台上
作者:方格子链接:https://www.zhihu.com/question/21505500/answer/22152464来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。面向android的移植 0. 这移植过程简直…… 1. 完成以上工具的下载安装…

【数据结构】顺序循环队列及其实现(C语言)
给定一个大小为MAXSIZE的数组储存一个队列,经过若干次的插入和删除以后,当队尾指针 rear MAXSIZE 时,呈现队列满的状态,而事实上数组的前部可能还有空闲的位置。为了有效地利用空间,引入循环队列(环状&…

C++中Reference与指针(Pointer)的使用对比
了解引用reference与指针pointer到底有什么不同可以帮助你决定什么时候该用reference,什么时候该用pointer。在C 中,reference在很多方面与指针(pointer)具有同样的能力。虽然多数C程序员对于何时使用reference何时使用pointer 都会有一些直觉࿰…
云南实现手机自主补(换)领居民身份证
图为云南首位通过手机自主补领居民身份证的申领人付宏强。 缪超 摄 中新网昆明1月22日电 (缪超)春节临近,云南实现手机自主补(换)领居民身份证,首张通过手机补办的居民身份证于22日在武定县公安局狮山派出所成功申领。 据悉,为方便民众因遗失…
NDK JNI 安装与配置(一)(UBUNTU16.04 )
1、下载Android NDK自解压包,官方地址:https://developer.android.com/ndk/downloads/index.html#download下载:$ wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin2、解压,将Android NDK压缩包解压到…

【数据结构】顺序表的应用(4)(C语言)
【数据结构】顺序表的应用(1)(C语言) 【数据结构】顺序表的应用(2)(C语言) 【数据结构】顺序表的应用(3)(C语言) 设计一个算法&…

Java泛型:泛型类、泛型接口和泛型方法
2019独角兽企业重金招聘Python工程师标准>>> 根据《Java编程思想 (第4版)》中的描述,泛型出现的动机在于:有许多原因促成了泛型的出现,而最引人注意的一个原因,就是为了创建容器类。 泛型类 容器…

POJ 2456 Aggressive cows(二分答案)
Aggressive cowsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 22674 Accepted: 10636Description Farmer John has built a new long barn, with N (2 < N < 100,000) stalls. The stalls are located along a straight line at positions x1,...,xN (0…

JMeter打开脚本报错处理方法
今天电脑重装了系统,安装好jmeter后打开以前写的脚本,总是报错如下图,研究了半天也没搞明白。 后来一个群里的人员提醒才想起来,是脚本的问题,为啥捏? 因为之前写的脚本用了一些监听,而这些监听…