关于ios:iOS-AR研究

iOS AR钻研

从技术层面上讲,ARKit通过整合了AVFoundation、CoreMotion、CoreML3个框架,在这个根底上整合扩大而成。
其中,AVFoundation是解决基于工夫的多媒体数据框架,如前后摄像头、声音等。
CoreMotion是解决减速计、陀螺仪、LiDAR等传感器数据信息框架,如以后设施的地位、程度旋转、静止速度、事实物体扫描等。
CoreML则是机器学习框架,外部集成大量的算法,如计算机图片解决与人脸识别等。

ARKit能做什么

表列 形容
特色点检测 检测并跟踪从摄像头采集图像中的特色点信息,并利用这些特色点构建对事实啊不理我的了解
立体检测 检测并跟踪事实世界中的平坦外表,ARKi反对立体与垂直立体检测
图片检测辨认跟踪 检测辨认并跟踪预扫描的2D图像,ARKit最大反对同时检测100张图像
3D物体检测跟踪 检测辨认并跟踪预扫描的3D物体
光照预计 利用从摄像头图片采集的光照信息估计环境中的光照,并依此调整虚构物体的光照成果
环境光反射 利用从摄像头图像中采集的信息生成环境光探头,并利用这些图片信息反射实在环境中的物体,以达到更实在的渲染成果
世界地图 反对保留与加载世界空间的空间映射数据 。以便在不同设施之间共享体验。
人脸检测跟踪 检测跟踪摄像头图片中的人脸,ARKit反对同时跟踪3张人脸,ARKit还反对眼动与舌动跟踪,并反对人脸BlendShape性能,能够驱动虚拟人像模型。
射线检测 人设施屏幕发射线虚构对象或者立体。
人体动作捕获 检测跟踪摄像头图像中的人形,捕捉人形动作,并用人形动作驱动虚构模型。ARKit反对2D和3D人形捕获跟踪。
人形遮挡 分享摄像头图像中的人形区域,并能预计人形区域深度,以实现与虚构物体的深度比照,从两颗实现正确的遮挡关系。
多人合作 多设施音实时通信经共享AR体验
同时开启前后摄像头 容许同时开启设施前后摄像头,并可利用前置摄像头采集到的人脸检测数据驱动后置摄像头中的模型。
3D音效 模仿实在空间中的3D声音流传成果
景深 模仿照相机采集图像信息时的景深成果,实现售点转移
相机噪声 模仿照相机采集图像时呈现 的不规则 噪声
静止含糊 模仿摄像机在拍摄静止物体时呈现 的含糊拖尾景象
自定义渲染 反对对所有ARKit个性的自定义渲染
场景几何 应用LiDAR实时捕捉场景深度信息并转化为场景几何网格
场景深度 应用LiDAR实时捕捉场景深度信息
视频纹理 采纳视频图像作为纹理,能够实现视频播放,动静纹理性能
地理位置锚点 利用GPS与地图在特定的地理位置上搁置虚构物体

ARKit有两种配置模式

名称 形容
ARWorldTrackingConfiguration 应用后置摄像以6DOF的模式开启静止跟踪
ARFaceTrackingConfiguration 应用设施的前置摄像头检测跟踪人脸

ARKit的三大根底能力:

名称 形容
ARSession 一个AR程序只有有一个ARSession,ARKit所有的会话都建设在ARSession根底之上
ARAnchor 锚点,在ARKit的世界中,所有虚构物体都是由锚点组成。通过摄像头捕捉的图像中,计算出以后场景的锚点地位信息、深度等信息
ARFrame AR帧,是摄像头获取到的一帧图像,ARKit背景渲染都是由这个图像帧实现。信息包含:光照、锚点数量、世界地图状态、以后场景的参数、点云、旋转、工夫、视矩阵等信息。

渲染

ARKit自身并不间接提供渲染性能,AR场景渲染能够抉择第三方框架进行渲染,苹果目前提供的渲染框架有:SceneKit、SpriteKit、Metal或自定义渲染框架。
苹果尽管提供了多个第三渲染框架,但这些渲染框架并不是为AR利用开而设计的。如:
SceneKit设计解决3D渲染、SpriteKit设计解决2D渲染、Metal则是更底层的图形API。
在2019年,苹果公司应用Swift语言全新开发了RealityKit渲染框架,其重点解决的问题是在事实环境中的虚构元素PBR渲染及精准的行为模仿,包含物理仿真、环境反射、环境光预计等。也就是说RealityKit是专为实在环境中虚构元素做渲染而设计的,次要目标是为了使虚构物体在事实世界中营造更强的真实感。

目前我通过ARKit获取到的数据

在ARKit的会话中,ARKit启动后会主动进行检测环境,我应用的是ARWorldTrackingConfiguration[.sceneDepth, .smoothedSceneDepth]的配置进行会话,通过ARSCNView来进行显示。
在ARKit的会话中能够失去didAdd:[ARAnchor]didUpdate:[ARAnchor]didUpdate:ARFramedidRemove:[ARAnchor]等多实时数据。
我通过didUpdate:ARFrame获取以后帧,代码我就不贴上来了,我列一下我目前获取到的数据,这个数据结构蕴含以下信息

名称 形容
timestamp 以后帧的工夫截
capturedImage 以后帧,是CVPixelBuffer数据结构,能够转成CGImage或UIImage,再转成PNG或JPG图片
cameraGrainTexture 属于MTLTexture类型数据
cameraGrainIntensity 属于Float类型数据
capturedDepthData 帧捕捉到的深度数据。属于AVDepthData类型数据
capturedDepthDataTimestamp 标识深度数据的工夫戳。
camera 属于ARCamera类型数据
anchors 以后帧的场景中的锚点,是一个数组[ARAnchor]
lightEstimate 用来捕获框架图像的相机。是ARLightEstimate数据结构,蕴含ambientIntensity(照明的环境强度。),ambientColorTemperature(照明的环境色温。)
rawFeaturePoints 场景中绝对于帧原点的特色点,俗称点云。是ARPointCloud数据结构,蕴含了points(组成点云的三维点。)、identifiers惟一标识
worldMappingStatus 世界地图获取状态,是一个枚举值:notAvailablelimitedextendingmapped
segmentationBuffer 一个示意capturedImage分段内容的缓冲区。
estimatedDepthData 示意执行的宰割的预计深度值的缓冲区。
detectedBody 在以后帧中检测到的物体。是ARBody2D数据结构,蕴含了一个ARSkeleton2D数据类型的skeleton
geoTrackingStatus 天文跟踪的状态。
sceneDepth 深度数据。是ARDepthData数据结构,蕴含了depthMap一个像素缓冲区,蕴含每个像素的深度数据(以米为单位)、confidenceMap一个像素缓冲区,蕴含’ depthMap ‘中每个深度值的相信级别。
smoothedSceneDepth 场景深度数据,平滑的工夫一致性。是ARDepthData数据结构

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理