ARKit之路-Session管理

版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。

  ARSession管理AR应用的全生命周期,包括采集处理运动传感器数据、控制虚拟摄像机与设备摄像头的对齐、执行计算机视觉图像处理等等,汇总整合所有信息后建立虚拟数字世界与现实世界的对应关系,处理AR应用开启、运行、停止全生命周期各项基础工作。

(一)创建ARSession

  每一个AR应用都必须包含一个ARSession,且只能包含一个ARSession,一般ARSession创建方法如下所示。

let session = ARSession()
session.delegate = self

  采用这种方法会直接手工方式创建一个ARSession,但如果使用ARKit的标准渲染框架(ARView、ARSCNView、ARSKView),这些渲染器会自动创建ARSession,并不需要我们手工去创建。可以使用如下代码所示代码获取到ARSession。

let session = myView.session

  创建后的ARSession并不会马上运行,需要进行功能配置。ARKit提供的功能非常多,不同的功能有不同的配置要求,并且为了优化性能,每一个ARSession运行时都需要设置一个配置文件(ARConfiguration),配置文件的作用就是通知ARKit需要运行的功能和所需的硬件资源,因此配置文件决定了AR应用的类型(如人脸检测类型、世界跟踪类型、人体跟踪类型等等)。需要了解的是,我们可以在运行时动态的设置配置文件,可以从一种应用类型切换到另一种应用类型,因此不用担心应用配置运行后无法实现功能的问题。
  运行ARSession的方法原型如下代码所示。

func run(_ configuration: ARConfiguration,  options: ARSession.RunOptions = []) 

  该方法有两个参数,configuration参数指定运行的配置文件,options为选项,指定ARSession启动时需要执行的操作,在重置或者切换配置时这些选项非常有用。options选项由ARSession.RunOptions枚举定义,该枚举各选项如下表所示。

功能项描述
resetTracking重置设备位置,重新开始跟踪
removeExistingAnchors移除上一次ARSession中的所有ARAnchor
stopTrackedRaycasts停止跟踪所有投射的射线
resetSceneReconstruction重置场景几何网格

(二)ARConfiguration

  如前文所述,ARConfiguration决定了AR应用的特性,定义了AR的功能。在ARKit中,预定义了8种ARConfiguration(定义了8个继承ARConfiguration的子类)配置类,每一种配置实现一类特定的功能,在进行AR应用开发时,可以根据功能需求选择一种设置到ARSession,具体如下表所示。

名称描述
ARWorldTrackingConfiguration使用后置摄像头,跟踪设备的位置与方向(姿态),检测识别场景中的物体表面、人体、2D图像、3D物体,进行场景重建,是最常用的一种配置
ARBodyTrackingConfiguration使用后置摄像头,跟踪设备的位置与方向(姿态),跟踪场景中的人体、2D图像和物体表面。对人体跟踪有专门的优化,可以获取到更详细的人体跟踪信息
AROrientationTrackingConfiguration使用后置摄像头,仅跟踪设备的方向,无法检测物体表面
ARImageTrackingConfiguration使用后置摄像头,跟踪设备的位置与方向(姿态),检测跟踪通过trackingImages设置的图像库中的图像
ARFaceTrackingConfiguration使用前置摄像头,跟踪人脸运动和表情
ARObjectScanningConfiguration使用后置摄像头,跟踪设备的位置与方向(姿态),扫描收集特定3D物体的空间特征点高保真信息,用于后续的3D物体检测识别
ARPositionalTrackingConfiguration使用后置摄像头,只跟踪设备的位置,无法检测物体表面
ARGeoTrackingConfiguration使用后置摄像头,跟踪地理位置信息,跟踪设备的位置与方向(姿态),可以检测识别场景中的物体表面、2D图像、3D物体

  选择好配置类后,通过ARSession.run(with:)方法即可启用ARSession,运行相应功能。在ARKit中有8种配置类,但ARSession运行时只允许有一种配置起作用,即无法同时运行多个配置文件。以ARWorldTrackingConfiguration为例,典型的启动ARSession的代码如下代码所示。

func makeUIView(context: Context) -> ARView {
    arView = ARView(frame: .zero)
    let config = ARWorldTrackingConfiguration()
    if ARWorldTrackingConfiguration.isSupported {
        config.planeDetection = .horizontal
        arView.session.run(config, options:[ ])
     }
     return arView
}

  另外,通过上表我们可以看到,ARWorldTrackingConfiguration可以执行物体表面、人体、2D图像、3D物体检测识别多种功能,是最常用的一种配置类。虽然其可以进行2D图像、人体检测识别,但需要这两项功能时,通常我们会创建使用更具体和优化的ARImageTrackingConfiguration、ARBodyTrackingConfiguration进行2D图像和人体检测识别配置文件类,这些具体的对配置文件类对特定功能(2D图像、人体)进行了专门的优化,更适合进行专门的工作。

  一些配置文件类支持子特性,如ARBodyTrackingConfiguration支持与帧相关的子特性,可通过设置配置文件类的frameSemantics属性实现更详细的子特性指定。ARBodyTrackingConfiguration支持3类子特性,如下表所示,关于该配置类的更详细内容会在所续学习阐述。

名称描述
bodyDetection检测跟踪人体
personSegmentation检测跟踪人形,常用于人形提取与人形遮挡
personSegmentationWithDepth检测跟踪人形,并评估人体与设备相机的深度

  需要注意的是:在设置配置文件时,可以先通过isSupported属性检查当前设备是否支持指定的配置文件,另外,并不是所有机型都支持子特性,因此使用子特性时,一般应先通过supportsFrameSemantics() 检查设备是否支持ARConfiguration.FrameSemantics设定的子特性。

  在ARSession运行后,我们可以随时动态的切换配置文件,如在使用中需要关闭平面检测、关闭2D图像检测、开启人体检测子特性时,可以通过在ARSession.run(with:)方法中设置新的配置文件进行切换。默认情况下,ARKit会保持当前的Session的状态,包括检测到的环境特征点信息、物体表面信息和所有的Anchor集合(进行前后摄像头切换时状态会丢失,如从人脸检测状态切换到世界跟踪状态时),但我们也可以通过options选项重置部分或全部功能。

(三)设备可用性检查和权限申请

  运行ARKit需要A9以上处理器及iOS11以上操作系统,某些特定功能对处理器及操作系统要求更高,如人体跟踪、人形遮挡需要A12以上处理器和iOS13以上操作系统,因此,在运行这些功能之前应当先检查当前设备是否支持。为确保设备可用,一般通过以下几个方面进行功能确认。

  (1)AR应用开发部署时,首先确保设备支持ARKit。在ARKit工程创建后,打开工程中的Info.plist文件,确保在Required device capabilities中有arkit这一项,如下图所示。当添加这个需求项之后,不支持ARKit的设备将无法安装AR应用,也无法从AppStore上下载AR应用。

在这里插入图片描述

  (2)在ARSession运行前,使用ARConfiguration.isSupported属性检查当前设备是否支持即将运行的配置文件类,确保特定的ARConfiguration可以执行。

  (3)人脸检测需要使用设备前置摄像头,并且硬件需要支持深度相机(TrueDepth),即只支持iPhone X以上型号,在使用人脸检测功能时可以通过ARFaceTrackingConfiguration.isSupported检查设备支持情况。

  (4)ARBodyTrackingConfiguration有子功能特性,应当通过supportsFrameSemantics(_:)方法检查设备是否支持ARConfiguration.FrameSemantics设定的子特性。

  需要注意:为提升用户体验,一般应当在UI中对设备功能的可用性进行视觉化显示,如设备不支持人脸检测时,应当将人脸检测的按钮置灰或者隐藏。

  AR应用一定会使用设备摄像头,因此,我们应当获取摄像头权限,填写摄像头使用说明,告之用户使用摄像头的原因,以便用户授权确认,如上图所示,应当配置Privacy - Camera Usage Description信息。如果应用还需要使用麦克风和相册,应当设置 Privacy - Microphone Usage Description和Privacy - Photo Library Usage Description信息,更多的授权项请查阅官方文档。

课程介绍 本套课程从技术理念到项目实践,教大家系统掌握ARKit技术开发,随心打造iOS端AR增强现实应用。由一开始的开发环境搭建,到Unity ARKit Plugin、ARFoundation ARKit等不同时期技术的讲解。从平面模型放置、识别图片、手势交互、3D物体识别、面部AR贴纸、光照估计、环境探针、多人AR技术,甚至包含ARKit3.0的动作捕捉技术等。除了以上课程内容,更加入了随着技术更新与时俱进更新的ARKit连载技术教学内容。课程收益 轻松理解ARKit的技术原理,从零到一创建自己的第一个AR项目。学习UnityARKit Plugin经典技术,了解ARKit中的常见概念和原理。学会在 ARFoundation 中使用ARKit,进行企业级AR项目开发。学会如何在AR项目里播放模型动画,通过触屏手势交互实现模型的旋转和缩放。 了解ARKit的图片识别,掌握AR卡片、AR书籍的实现方法。 学会使用面部增强技术,实现热门短视频应用的AR贴纸效果,实现面部表情追踪。学会使用ARKit物体检测技术,实现3D物体识别,可以广泛应用于工业、建筑、古董、玩具手办、艺展览等不同场景。学习ARKit中的经典交互案例,优化AR项目的用户体验。熟练使用环境纹理、光照估计技术,让AR内容随当前现实场景自动变化调节,看起来更加真实。基于WorldMap、CollaborativeSession AR技术,实现AR场景的持久化及多人AR体验效果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_DavidWang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值