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.depthMaplet confidence = depthData.confidenceMap...
}
提示:
frameSemantics语义属性用于设置特定配置的可选帧特性(Frame Features),当前可设置的值有4个,分别为:sceneDepth、bodyDetection、personSegmentation、personSegmentationWithDepth,其中sceneDepth用于开启Depth API,bodyDetection用于肢体检测跟踪,后两个用于人形遮挡,personSegmentation可现实屏幕空间的人形分离,而personSegmentationWithDepth则是带有深度信息的人形分离,后3个值我们将在第7章中具体学习。
ARKit之路-Depth API相关推荐
- ARKit之路-ARKit概述之一
2017年,在WWDC(World Wide Developers Conference,苹果全球开发者大会)上,苹果公司正式推出了增强现实开发套件ARKit.ARKit一推出即在科技圈引发极大关 ...
- App项目实战之路(二):API篇
原创文章,转载请注明:转载自Keegan小钢 并标明原文链接:http://keeganlee.me/post/practice/20160812 微信订阅号:keeganlee_me 写于2016- ...
- ARCore Depth API 深度解析:算法原理及开发细节
Google ARCore 1.18 近期发布重大更新,通过 Depth API(深度 API)解决了一直横亘在开发者面前的深度理解和遮挡难题.文末更有 7/18 技术直播分享活动,不要错过! Dep ...
- 【API进阶之路】API带来的微创新,打动投资人鼓励我创业
摘要:怎么帮助创作者提高视频的推荐量呢?我发现了:视频的封面图非常重要. 上回说到,老板一拍脑门,交代了一个新项目:小成本开发一款短视频剪辑工具([<[API进阶之路]人少钱少需求多的新项目该怎 ...
- ARKit之路-平面检测
版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载. 平面检测是很多AR应用的基础,无论是ARKit.ARCore还是Huawei AREngine.SenseAR等SDK ...
- ARKit之路-LiDAR传感器(一)
版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载. 第4代iPad Pro和iPhone12高端机型中新增了LiDAR(Light Detection And Rangi ...
- ARKit之路-ARKit原理
版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载. ARKit提供如此出众AR体验的背后是苹果公司强大的软硬件整合能力和做到极致的用户体验,苹果公司的生态拥有其他企业无法 ...
- ARKit之路-运动跟踪原理
版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载. 在前述文章中,我们对AR技术原理进行过简单学习了解,ARKit运动跟踪所采用的技术与其他移动端AR SDK一样,也是采 ...
- ARKit之路-ARSession生命周期管理与跟踪质量
版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载. ARSession整合运动传感器数据与计算机视觉处理数据跟踪用户设备姿态,为得到更好的跟踪质量,ARSession需要 ...
最新文章
- 如何创建一个百分百懂你的产品推荐系统 | 深度教程(附代码详解)
- python线性回归算法简介_Python机器学习(二):线性回归算法
- hdu 1280 前m大的数 哈希
- java如何让线程等待_如何使Java线程等待另一个线程的输出?
- 互联网晚报 | 9月11日 星期六 | 魅蓝宣布正式回归;黑石集团终止收购SOHO中国;“小酒馆第一股”海伦司正式登陆港交所...
- Python type创建类
- tab控件的使用心得
- 【POJ2406】Power Strings(KMP)
- 【OpenCV学习笔记】【函数学习】十一(读入图像﹑显示图像和保存图像)
- requests模块介绍
- matlab多图形相交,用MATLAB作出柱面x^2+y^2=4 和柱面x^2+z^2=4 相交的图形.
- 用n=4的复化Simpson公式求积分方程的近似解[matlab]
- vivo的Android升级包,【原厂固件】vivo y66ia系统升级rom刷机包_卡刷包_PD1621B_A_1.9.6...
- Adobe Flash被禁用和无法加载的官方解决办法
- Python处理图片九宫格,炫酷朋友圈
- 【智能商务】海量商品查找利器—苏宁搜索系统
- 渝粤题库 陕西师范大学 《危机管理》作业
- SwitchHosts安装使用
- VMware虚拟机忘记Linux用户登陆密码,重置密码解决办法
- 下三角矩阵线性方程的求解