ARKit之路-Depth API

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

  在配备LiDAR传感器的设备上,ARKit不仅可以进行场景几何重建,还向开发者开放了场景深度信息,利用这些深度信息,可以实现更加自然、无缝的虚实体验。并且,ARKit提供的深度信息是逐像素的,因此,可以实现非常精细的效果,如精确的控制特效的范围,营造与现实融合度非常高的虚实效果。

  从ARKit中获取到的深度信息是指从设备摄像头到现实场景中各点的深度值,这些值每一帧都会产生,生成速率大于等于60FPS,即这些深度值是实时的,因此可以实现实时的动态深度效果,如遮挡、物理仿真、边界处理。

  得益于LiDAR传感器,ARkit可以采集到稠密的离散深度值,但这还不足以形成逐像素的深度图(Depth Map),为得到逐像素的深度图,ARKit融合了RGB摄像头图像数据与LiDAR传感器数据,如下图所示。利用计算机视觉算法,ARKit将RBG图像数据与LiDAR传感器数据进行融合计算,既保证了精度,又保留了物体边缘,最终提供给开发者一张与当前场景图像一致的深度图,为节约内存使用,这张深度图尺寸比RGB场景图略小,深度图中每个像素代表了场景点到设备摄像头的距离(单位为米)。

在这里插入图片描述

  由于LiDAR的特性,对穿透性强或者吸收性强(如玻璃、高吸光性材质)的物体测量存在先天的不足,因此,LiDAR采集到的数据也存在误差很大的异常数据,为描述这些异常数据,ARKit另建了一张尺寸与深度图一致的置信度图(Confidence Map),这张图中每一个像素与深度图中的像素一一对应,但每一个像素均描述了深度图中对应像素的可信值,这个可信值由ARConfidenceLevel枚举描述,该枚举各值如下表所示。

枚举值描述
low深度图中对应像素可信值为低
medium深度图中对应像素可信值中等
high深度图中对应像素可信值为高

  置信度图描述了深度图中每一个像素的可信度,在开发应时,我们就可以针对不同置信度的深度信息进行不同的处理,提高对场景把控的灵活性。

  从ARKit获取深度图,需要开启Depth API功能,可以直接通过设置语义开启,当启用人形遮挡时默认会自动开启,典型代码如代码清单1所示。

//直接设置语义开启场景深度Depth API
let configuration = ARWorldTrackingConfiguration()
if type(of: configuration).supportsFrameSemantics(.sceneDepth){
      configuration.frameSemantics = .sceneDepth
 }
arView.session.run(configuration)

//启用人形遮挡时会自动开启场景深度Depth API  
let configuration = ARWorldTrackingConfiguration()
let sematics:ARConfiguration.FrameSemantics = [.personSegmentationWithDepth]
if type(of: configuration).supportsFrameSemantics(sematics){
     configuration.frameSemantics = sematics
}
arView.session.run(configuration)

在配置中开启Depth API功能后,我们就可以通过session(_ session: , didUpdate frame: ) 代理方法获取到深度图与置信度图,如代码清单2所示。

//从每一帧中得到场景深度图与置信度图
public func session(_ session: ARSession, didUpdate frame: ARFrame) {
     guard let depthData = frame.sceneDepth else { return }
     let depth = depthData.depthMap
     let confidence = depthData.confidenceMap
     ...
} 

提示:
frameSemantics语义属性用于设置特定配置的可选帧特性(Frame Features),当前可设置的值有4个,分别为:sceneDepth、bodyDetection、personSegmentation、personSegmentationWithDepth,其中sceneDepth用于开启Depth API,bodyDetection用于肢体检测跟踪,后两个用于人形遮挡,personSegmentation可现实屏幕空间的人形分离,而personSegmentationWithDepth则是带有深度信息的人形分离,后3个值我们将在第7章中具体学习。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 31
    评论
课程介绍 本套课程从技术理念到项目实践,教大家系统掌握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体验效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_DavidWang_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值