题图:by 国家地理 from Instagram
互联网的浪潮总是一波未平,一波又起。从 PC 互联网到移动互联网,从云计算到大数据,从机器学习到人工智能,现在是 AI 的天下。整个朋友圈的人要么絮絮叨叨琢磨怎么学习机器学习,要么聚一堆探讨如何使用人工智能。还有程序员说咱们写了程序替代自己写程序然后就失业了,也算得偿所愿。总之,这是个言必称 AI 的时代。
一代新人换旧人,大家不要忘了,就在2016年以前,VR 和 AR (虚拟现实和增强现实)技术的火热程度不亚于现在的人工智能。神秘的 Magic Leap 通过一款 AR 视频迎来了巨头的投资又被质疑为骗局,Pokémon Go 让大家抓腻了精灵和妖怪之后也归于沉寂。雷声之后,并没有下几滴雨。VR 和 AR 就这样如过眼云烟了吗?显然不是这样。
一个技术浪潮未能汹涌澎湃的原因无外乎这么几个原因:
1、没有形成多点开花、齐头并进的应用突破,场景狭窄,应用寥寥,很容易形成审美疲劳。
2、没有统一的技术标准和应用设备,开发成本像一道高墙,把产品和研发的创意挡到了墙外。
3、设备不够便携,如果每个应用都需要配合一个沉重的头盔,注定是个玩具而无法普及。
苹果在 2017 WWDC 发布的 ARKit 配合上亿部的 iOS 设备,差不多把这些问题全部解决了。苹果这家手握巨量现金储备的科技巨头特别有意思,在一个技术浪潮到来初期从不发声,也不会发布 beta 类型的产品,而是认准一个方向,关起门来砸人砸资源冷冷的研发,然后「冷不丁」捧出一个成形的产品,说用吧客官,这才是真正的产品。
ARKit 就是这样一款技术产品,甚至,在苹果没怎么提及 AI 的情况下,这次大会还发布了 Core ML 深度学习框架,基于 Metal 技术,Core ML 可以充分利用 iOS 设备的 GPU 性能进行机器学习,而不是把数据发回到服务器端。
什么是 ARKit?这是一个全新的增强现实框架,它允许开发者轻松地为 iOS 设备 创建无与伦比的增强现实体验。通过将虚拟对象和虚拟信息同用户周围的环境相互融合,ARKit 使得 App 跳出了屏幕的限制,他们开始以全新的方式与现实世界进行交互。ARKit(包括 Core ML)将把 iOS 开发者带到一个更为广阔的天地,我预测这个职业会重新焕发出勃勃生机。
AR 系统可以创建并追踪现实空间和虚拟空间之间的关系,现实空间是用户所处的世界,虚拟空间是针对可视化内容进行建模的世界。当 AR 应用将这些虚拟内容与实时视频结合一起显示的时候,用户就可以体验到所谓的「增强现实」:虚拟内容成为了真实世界的一部分,尽管这只是「错觉」而已。总结一下,AR 系统一般具备以下三个特点:
1、真实世界和虚拟世界的信息集成;
2、具有实时交互性;
3、在三维尺度空间中增添定位虚拟物体。
关于 ARKit 的实现原理,可以阅读https://developer.apple.com/arkit/
ARKit 能帮我们做什么呢?肯定不仅仅是玩游戏抓精灵,普及的 AR 能够改变我们的工作学习和生活方式,比如天猫就基于 AR 技术进行了非常具体的应用,从互动营销扩展到日常的购物体验,全部有 AR 的影子(参考「不会做动画的前端不是好开发」)。以前我们做读书笔记可能是这样的:
有了 AR 技术,我们的学习可能是这样的:
随着 AR 技术的普及和人们生活习惯的改变,越来越多未来电影中的场景会变成现实,科技与创意会为人类打造一个全新的世界,梦想照进现实时,桃花源、蓬莱仙境、古罗马战场、角斗士,这些只存在于小说和课本中的场景,我们都可以一探究竟。现在这个门已经敞开了一个口,你是准备继续观望还是去挑战这个增强现实?
如何基于 ARKit 构建一个最简单的 AR App 呢?下载最新的 XCode 9 beta,有一台具备 A9 芯片的 iOS 设备(iPhoneSE iPhone6S iPhone6SP iPhone7 iPhone7P)就可以了。
我们来创建一个项目,创建项目的时候选择 Augmented Reality App:
用 SeneKit 来做一个3D 效果,语言选择 Objective-C:
项目创建好之后,你会发现 XCode 已经为我们写好了很多代码,还有自带的 3D 模型:
#import "ViewController.h"
@interface ViewController ()
//ARKit 框架中于 3D 显示的预览视图
@property (nonatomic, strong) IBOutlet ARSCNView *sceneView;
@end
在 ViewController 中,系统基于代理 ARSCNViewDelegate 创建了一个用来展示 3D 效果的视图。
- (void)viewDidLoad { [super viewDidLoad];
// Set the view's delegate
//设置代理
self.sceneView.delegate = self;
// Show statistics such as fps and timing information
//ARKit 统计信息
self.sceneView.showsStatistics = YES;
// Create a new scene
//使模型创建节点(scn 是个基于3D建模的文件,使用 3DMax 软件可以创建,这系统有个默认的 3D 飞机)
SCNScene *scene = [SCNScene sceneNamed:@"art.scnassets/ship.scn"];
// Set the scene to the view
//设置 ARKit 的场景(SCNScene 是 Scenekit 中的场景,类似于 UIView)
self.sceneView.scene = scene;
}
在函数 viewDidLoad 中,进行代理设置,并将统计信息设置为 YES,然后导入模型,把模型场景设置为 SceneKit。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// Create a session configuration
//创建一个追踪设备配置(ARWorldTrackingSessionConfiguration 主要负责传感器追踪手机的移动和旋转)
ARWorldTrackingSessionConfiguration *configuration = [ARWorldTrackingSessionConfiguration new];
// Run the view's session
// 开始启动 ARSession 会话(启动 AR)
[self.sceneView.session runWithConfiguration:configuration];
}
在 viewWillAppear 方法中 ,创建了一个追踪设备的配置,监测手机的移动与旋转,启动 AR。
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// Pause the view's session
// 暂停 ARSession 会话
[self.sceneView.session pause];
}
在 viewWillDisappear 方法中增加 AR 效果暂停的代码,也就是画面消失,停止 VR 功能。
好了,不用写什么代码,连接上你的手机(iOS11),看看效果吧。
如果你想更多更快的掌握 AR 技术在现实生活中的应用,想成为 AR 技术开发的受益者,文章不白写,再推荐一个 ARKit 技术实战峰会。
使用 QQ 或微信扫描下方的二维码,即可加入。
如无法识别请直接加Q群:185683323
峰会形式:腾讯课堂提供平台,由研究 AR 开发技术多年的神秘工程师大咖直播分享。峰会时间:6月16日(本周五)20:30—23:00
在所有人都在 AI 领域拼杀的时候,AR 同样是另一片天空,我想未来应该是属于 AI + AR 的。