关于更多机器学习、人工智能、增强现实、Unity、Unreal资源和技术干货,可以关注公众号:AIRX社区
自从在 WWDC 2017 中引入以来,ARKit 的功能不断发展,它最初启用了六自由度(6DoF)设备跟踪和 Plane tracking 跟踪,现在经过五次迭代(1.0、1.5、2.0、3.0、3.5),实现了许多功能 最新的 iPad Pro 上的新功能,包括人体追踪,甚至场景重建,以及新的 LiDAR 扫描仪。如下表所示:
要充分实现AR的潜力,ARKit 仍有很长的路要走,因为 AR 的潜力不仅受软件限制而且受硬件限制,这就是为什么我们没有看到主流的HUD被消费者甚至企业大规模采用的原因。它仍处于移动端模式,也不涉及Apple的其他AR形式,例如RealityKit,RealityComposer,AR Quick Look。由于 ARKit 显然是苹果传闻中的 AR Glasses 的前身(预热)SDK,因此本文将重点介绍目前 ARKit 作为 AR 支持软件的局限性。本文主要讨论的内容如下:
- 深度场景重建
- 视觉(视觉框架语义学,视觉锚点)
- 光流框架语义
- 光锚
- 身体(多身体跟踪,部分身体跟踪,身体姿势,姿态估计属性)
- 人员分割(高分辨率和帧频,实时人像效果遮罩,语义分割,衣服分割,身体部位分割)
- 同时进行人体跟踪和人员分割(按 ID 进行人员分割,分段射线广播)
- 人脸(后置相机人脸跟踪,检测到的人脸框架语义,人脸区域)
- 手(手跟踪,手势)
- 参数人体
- 网体
- 对象(对象 ID,检测到的对象框架语义,对象分割,对象框跟踪,实时对象扫描,对象网格分割,对象跟踪)
- 模型
- 物体和人的去除
- 场景重建(网格纹理,网格填充,房间分割,平面图生成)
- AR 数据(本地,共享,云)
- 小组件
1、深度场景重建
通过在最新的 iPad Pro 或者iPhone 12 pro的LiDAR 扫描仪,Apple 提供了带有 ARKit 3.5 的场景重建。这使设备能够创建环境的 3D 网格,并向每个顶点(例如地板,天花板等)添加语义分类。这是创建更沉浸式、更有创意的AR体验的最重要的功能之一,因为你可以正确启用遮挡,因此虚拟元素将像真实对象一样在真实对象后面看,并使虚拟对象能够与真实对象(例如球)互动,例如,它会像真实的球一样从房间中的物体反弹。
苹果不会在较旧的设备上启用此功能是可以理解的,因为要用一两个普通相机来实现相同的功能要困难得多,还有需要大量旧设备无法提供的计算能力。但是,Apple 推出了用于照片和视频的深度地图 (Depth Maps),用于配备了后置双摄像头或TrueDepth 摄像头的设备。
即使质量比使用 LiDAR 扫描仪的设备低,这些相同深度图也可用于场景重建。这在技术上是可行的,Google 使用单目摄像头以“深度 API”的名义为一些开发人员引入了封闭测试版,而 6D.ai 在其被 Niantic Labs 收购之前有一个 SDK 提供此功能。启用此功能将有助于 AR Map的采用,并激励开发人员开始尝试使用此功能并为其开发应用程序...
2、视觉框架语义
Frame Semantics是 ARKit 3.0 引入的,它们使开发人员能够检索有关相机框架的信息。它们在运行ARSession 之 前 被 插 入 到 ARConfiguration 中 。当 前 , ARKit 提 供 了 三 种 框 架 语 义FrameSemantics 类 型 ( 人 体 侦 测 BodyDetection , PersonSegmentation ,PersonSegmentationWithDepth)。
视觉框架可以在 ARKit 中添加 RectangleDetection,TextDetection,BarCodeDetection 和QRCodeDetection 框架语义,可以更好地理解摄像机输入。此外,可以将自定义 CoreML 模型添加到 FrameSemantics 中,从而使开发人能够以标准化方式改进 ARKit 并在 ARKit 本身不提供它们的情况下彼此共享这些模型。
3、光流框架语义
光流提供了一个图像,其中每个像素将包含一个 2D 或 3D 矢量,记录该像素的位置以及基于前一帧或多帧的(移动)的数量。当前无法使用预构建的 Vision 模型来实现此功能。不过,由于 ARKit 广泛用于视觉效果,因此向开发人员提供相机框架的光流,将可以在其上构建有趣的效果。
4、光锚
ARKit 提供有关场景中照明的信息,例 ARLightEstimation,这是每个摄像机帧的全局值。ARKit 可以提供 ARDirectionalLightEstimate,它可以告诉光源来自哪里,但它不在环境中。扫描环境时,ARKit 可以检测到光线并创建ARLightAnchor,其中包含真实光源的位置和方向,光源的强度和颜色以及光源的状态(开/关)与 AREnvironmentProbeAnchor 结合使用时,可以实现更加可信的渲染,其中虚拟阴影指向真实的光线,并且可以进行精确的光反射。
5、人体跟跟踪
人体跟踪或运动捕捉是 ARKit 3.0 引入的。通过提供一个 ARBodyAnchor,该 ARBodyAnchor 内部具有一个 3DS骨骼,其中包含所有骨骼关节的位置,它可以与基于摄影机视图中人的身体位置的 AR 体验进行交互。人体追踪质量不错,但在某些方面仍然受到限制,但是其中许多限制是由于此类追踪所需的计算能力所致。可以通过以下方式进行改进。
多体追踪
当前,ARKit 只能跟踪一个人体,因此,如果在摄像机视图中有多个人,则该设备将仅创建一个 ARBodyAnchor,以跟踪一个人。这限制了可以使用 ARKit 创建的体验。为了实现更多的协作式 AR 体验,就需要增加被跟踪物体的数量,就像 Apple 将 ARKit 3.0 可以跟踪的三个ARFaceAnchor 数量增加一样。
部分身体追踪
身体追踪的局限性之一是,只有身体大部分处于在相机视图才可以追踪身体。即使身体部分可见,ARKit 也应该能够跟踪其身体(复数),并假设或预测身体其余部分的位置。即使仅可见身体的上部,它也会跟踪身体,甚至仅跟踪单个身体部分(如手臂或腿)。
身体姿势
3DSkeleton 为开发人员提供了身体每个关节的位置。利用这些信息,开发人员可以创建身体姿势识别系统。例如,如果右手掌关节位置高于头部关节位置,则表示该人正在举手。或者,如果两只脚都没有触地,则表示该人正在跳跃。
ARKit或许应该提供开发人员可以利用的标准化手势(蹲下,踩踏,踢人等),而不是让每个开发人员构建自己的手势识别系统,并且最好使用介于 0 到 1 之间的值来指定举手的数量。与BlendShapes 与 ARFaceAnchor 的工作方式相似。
身体估计属性3DSkeleton 有助于创建动作捕捉体验,例如根据人物的动作为角色设置动画,但是此信息基于关节在空间中的位置。ARKit 没有提供有关人的实际 3D 形状的信息,而正确的环境交互(例如人与虚拟对象碰撞)则需要此信息。这需要跟踪的网格或参数模型,这将在本文后面进行讨论。
为了绕过此限制,3DSkeleton 可以延续提供的 EstimatedScale(Height)设置 EstimatedWeight,EvaluateAge,EstimatedSex。利用这些信息,开发人员可以建立一个参数模型,该模型可以容纳大量不同年龄,体重,身高和性别的人,并根据关节跟踪对其进行动画处理。
6、人体遮挡
ARKit 3.0 引入了“人员遮挡”,如果虚拟对象在虚拟对象的前面,则这些对象将被人员遮挡。ARKit 通过提供两个图像来实现此目的。第一个是模板图像,其中每个像素的值在不包含人物的情况下为零,否则为 1。第二个是深度图像,其中每个像素包含一个距离相机的距离的度量值。然后,将这两个图像馈送到渲染器,以根据对象在环境中的位置遮挡对象。这是一个很棒的功能,但仍有改进的空间。
更高的分辨率和帧频
当前,开发人员可以为Stencil Image获得的最高分辨率是1920x1440和Depth Image 256x192。ARKit 将“遮罩”应用于“深度”图像以匹配“模具图像”的分辨率,结果仍不完美。由于分辨率较低,边缘像素仍然存在错误。这与 AVFoundation 提供的 RBG 图像(4032x3025)或深度图(768x576)仍然相去甚远。最终,这些图像的分辨率应与相机分辨率匹配。同样,深度图像以每秒 15 帧的速度捕获,需要将其增加到每秒 60 帧才能获得更流畅的体验。
实时人像效果遮罩
从技术上讲,人像细分是 AVFoundation 的 Portrait Effects Matte 提供的。不同之处在于人物分割是实时的,肖像效果遮罩仅适用于照片,具有更高的分辨率,并且提供不透明度,因此人物的像素不是零或一,而是介于两者之间。这样可以实现更好的效果,因为与“人物细分”相比,人物似乎没有被清晰地裁剪出图像。ARKit可以提供实时的人像特效遮罩,具有与遮罩相同的质量,并具有不透明像素且为实时。
语义分割
AVFoundation 提供了另一种称为语义分割遮罩的功能,这使开发人员可以根据类型检索肖像效果遮罩中的像素。当前,它提供三种类型(头发,皮肤,牙齿)。这些可以在 ARKit 中实时访问,并且可以添加其他一些类型,例如“眼睛”,“瞳孔”,“嘴唇”,“睫毛”等
服装细分
这与语义分割相同,但对于服装,开发人员将能够检索包含衬衫,牛仔裤,鞋子,帽子,衣服,配饰等的像素。这将使你能够体验更改衬衫颜色。
身体部位分割
语义细分很明显的知道牙齿和皮肤在哪里,不在哪里。身体部位没有清晰的切口,手腕末端没有确切的位置。ARKit 应当使开发人员可以访问属于手,腿,头等的像素。这可以创建仅影响手或上身的视觉效果成为可能。
同时进行身体追踪和人的细分
ARKit 3.0通过提供人员细分和人体追踪功能将AR体验升级,但是,可能由于这些功能需要大量的计算资源,Apple 限制 ARKit 一次只能运行其中之一。这些功能齐头并进,尤其是在视觉效果方面,ARKit 应当同时运行它们。
按 ID 进行人员细分
人物细分返回的图像包含其中包含人物的所有像素,但不会区分每个人物。ARKit 应该能够按ID 提供人员细分,因此每个人都有一个细分图像,并带有唯一的 ID。此 ID 也将与 3DSkeletonID 匹配,因此它们可以彼此关联。这使得可以对一个人执行计算,而不必将图像中的所有人都视为同一个人。
分段光线投射
提供按 ID 划分的分割图像仍然不够,它们必须是可选择的或射线可投射的,因此,如果用户在图像上指定一个点,它应当检索选择的人物图像及其 ID。这将使开发人员能够要求用户提供对其执行某些逻辑或效果的人员的输入。
**7、人脸
**
人脸跟踪是在 iPhone X 的发布中引入的,iPhone X 是第一款配备 TrueDepth 相机的手机。它的准确性和功能强大,后置摄像头面部追踪脸部追踪功能仅限于带有前置 TrueDepth 摄像头的设备。App Store 上的许多其他应用程序都可以使用普通的前置摄像头或后置摄像头来进行面部跟踪。即使 ARKit 在 FaceGeometry 的顶点数量上质量较低或缺少 TrueDepth 相机(例如 BlendShapes)的相同功能,它也应该可以使用后置摄像头实现 ARFaceAnchor 检测和跟踪。该 ARFaceAnchor也应该可以通过 ID与ARBodyAnchor 关联。
已被侦测脸部的框架语义:
Apple 的 Vision 框架可实现人脸矩形和地标检测和跟踪。可以添加新的 DetectedFace Frame Semantic 类型,以允许开发人员直接在 ARKit 中访问此信息,并将其与 ARFaceAnchor 和ARBodyAnchor 关联。
脸部区域:
当前,“面部几何”由 1220 个顶点组成,但是没有明显的方法知道哪个顶点对应于哪个特定的部分或面部区域,例如鼻子的尖端或额头的中部。为了实现这一点,开发人员必须通过其索引来检索顶点,并且需要通过反复试验来使用幻数,或者编写一个显示每个顶点的索引的小程序,然后将其映射到他们的应用程序中。ARKit 提供一个基于传递给它的类型参数来返回正确顶点/索引的函数是相对容易的。否则,返回组成面部部分(如嘴唇或眼睑等)的顶点集合,从而实现操纵面部网格的特定部分的体验。
8、手
手部跟踪对于智能手机上的 AR 体验不一定有用,但是,对于将来的 AR HUD,这是必备功能啊,使ARKit具备跟踪手部的能力将使开发人员有机会开始尝试此功能并开始积累经验,为发布Apple的 AR眼镜做好准备。
手部追踪
ARKit 可以使用 ARHandAnchor 检测并跟踪手,锚点包含手的位置和方向。它会跟踪人体跟踪Body Tracking 3Dskeleton 里未跟踪的关节。每只手的手指有 24 个关节(每个手指有 5 个关节,拇指除外 4 个),以及手的类型(左或右)。该锚点也将与 ARBodyAnchor 关联,并在使用后置摄像头面部跟踪时完成 3DS 骨架跟踪。锚点还将包含 ARHandGeometry,它会根据手的形状而不是仅根据关节来修改其参数。这将使用户能够使用他们的手与虚拟对象进行交互,与 Leap Motion,HoloLens,Oculus Quest 或 MagicLeap 中的功能类似。
手势
仅跟踪关节和网格还不够,用户还应该能够执行手势,例如合拢手,指向,捏等。这些手势将触发开发人员可以使用的事件。它们的构建方式应可以类似于 Face Faceing 中的 BlendShapes,因此开发人员将能够根据零到一之间的数值知道知道手的张开程度。会有各种各样的手势来实现大量的交互。
9、参数人体
使用 ARKit 进行人体追踪只能提供关节位置,这限制了人们与虚拟对象之间的互动,例如,当向一个人扔球时,除非你附加了一个不可见的基于跟踪关节运动的人体模型,否则该球不会与该人发生碰撞。不过,人们的形态和形式各不相同,因此该模型并不适合所有人。解决此问题的一种方法是向ARBodyAnchor 提供 ARParametricBodyGeometry。锚点应当检测有关身体参数的信息。腰围,手臂,腿的宽度等。然后将基于此信息生成参数模型,并根据关节位置对其进行跟踪。
10、网格人体
解决 3D 身体交互问题的另一种方法是提供一个 ARMeshBodyGeometry。这类似于 Kinect 提供的功能。它是根据摄像机或 LiDAR 接收到的深度数据生成的人体动态网格。ARKit 将跟踪此网格,并将其包含在 ARBodyAnchor 中。网格也可以通过身体部位(MeshBodyPartsSegmentation)或衣服(MeshClothingSegmentation)进行细分和查询。因此,开发人员可以检索对应于衬衫或手的网格部分。
11、对象
ARKit 2.0 引入了 ARObjectAnchor,它可以检测扫描的对象。这是通过运行扫描配置,指定围绕对象的框,扫描对象的所有侧面,然后导入到世界跟踪配置以在检测到事件时触发事件来完成的。这只在创建静态体验时有效,例如在博物馆中,因为没有跟踪,只有检测。对象跟踪对于增强交互式 AR 体验至关重要,应将 ARKit 当前提供的功能进行重大改进。
对象 ID
以下所有功能都可以添加到同一对象上,因此,对于每个对象,无论这些功能适用于 2D 还是3D,都必须使用唯一的 ID 将所有这些功能相互关联,这一点很重要。
与其他框架语义类似,开发人员将能够插入 DetectedObject 框架语义,然后以每个对象的位置,对象的分类以及置信度的矩形的形式检索框架中对象的数据。可检测的对象列表需要全面,包含用户日常生活中遇到的大量对象,开发人员也可以使用自己的检测和分类机器学习模型来对其进行修改和扩展。
对象分割
相同的对象分类列表也可以是可分段的。因此,开发人员可以通过在ARConfiguration 的帧语义中插入 ObjectSegmentation 来检索属于特定对象的像素。
对象框跟踪
当前的 ARObjectAnchor 仅限于检测参考扫描对象。ARObjectAnchory 应能够基于指定的配置检测场景中的任意数量的对象,然后在它们周围创建包含对象的位置,旋转,比例,分类和唯一 ID 的框。
实时对象扫描
如果克服了计算限制,启用自动对象框跟踪功能可以在将来的版本中启用实时扫描。ARKit 会自动在对象周围创建框,对其进行分类,无需任何用户输入即可对其进行扫描。然后保存它们以备后用。
对象网格分割
创建自动对象框还应当可以启用对象网格分割,目前,“场景重构”创建的网格不会分离对象。它可以进行简单的分类,但不会从杯子所在的桌子上分割杯子。可以提取对象网格并将其作为ARObjectMeshGeometry 添加到 ARObjectAnchor。对象追踪 ARKit 当前不支持对象跟踪,仅支持检测,因此可以在对象上构建的体验非常有限。通过具有上述功能的基于对象扫描或对象分段网格的对象跟踪,将使开发人员能够携带对象并使它们以各种组合在 AR 中交互。
12、模型
ARObjectAnchor 通过扫描实际对象来工作。人们在日常生活中使用的大多数对象都是大量生产的,并具有相应的 3D 模型。ARKit 可以提供 ARModelAnchor。与 Vuforia 提供的“模型目标”相似。这样可以识别熟悉的对象,电器、设备(甚至是 Apple 设施),然后创建一个锚点,该锚点提供有关检测到的模型的信息并随着时间的推移对其进行跟踪。苹果还应可以提供类似于 App Store,Model Store 的东西,这些现实对象(玩具,设备等)的生产者可以上传这些东西,以便 ARKit 应用可以识别它们并在其上构建应用。
物体和人的去除
顾名思义,增强现实技术非常适合通过向其中添加虚拟对象来增强现实。但是,有时删除对象也可以增强现实性。有人称它为“减少现实”,可以从渲染的相机框架中去除物体和人物。这可以实现诸如房屋改建之类的体验,该应用程序可以从视图中移除家具以放置新家具。或从公共视频中删除人员,以出于审美或隐私原因捕获场景。
13、场景重建
ARKit 3.5 引入了 Scene Reconstruction,为 AR 应用程序提供了强大的功能,例如与真实环境交互的虚拟对象和真正的遮挡,但仍有改进的空间。
网格纹理
ARMeshGeometry 不提供纹理坐标,因此很难在几何图形上放置纹理。ARKit 应可以提供纹理坐标和纹理提取。因此,对象或场景的 3D 网格扫描将看起来与真实对象相似,并且不仅具有其形状,还具有其属性。网格填充如果实现了前面提到的“对象网格分割”,则需要一种“网格填充”算法来填充接触表面。因此,如果将书从咖啡桌上分割开来,放置书本的顶点应被填充,以使网格中没有孔。同样,如果看不到对象的某些部分,该算法可以尝试智能地填充缺失的部分,并在以后提供更多信息时更新网格。例如,从地板和墙壁上分割沙发,该算法将填充沙发的背面。
空间分割
根据数据效率对当前生成的网格进行分段。基于房间或空间的语义分割会更合适。开发人员将能够检索属于厨房或客厅的网格,并为每个区域建立定制的体验。当设备进入该区域时,ARKit可能会触发触发器,类似于 Vuforia 提供的“区域目标”
平面图生成
在实施对象网格分割,网格填充,空间分割以及已经包含的平面和网格分类之后,ARKit 可以生成该空间的准确 2D 和 3D 平面图。房子或办公室的平面布置图将提供干净的空间模型,供不同的应用程序使用。
14、AR持久化数据
当前,每次用户打开 ARKit 应用程序时,该应用程序都会从头开始映射环境。尽管可以保存,重新定位或共享该地图,但仍由开发人员决定将不同的应用程序连接在一起并让他们共享此数据。如果每个应用程序体验都孤立无援,AR 不能提供令人鼓舞的价值。为避免这种情况,Apple 可以提供一个本机数据保存解决方案,该解决方案可以在各个应用程序之间共享并集成到其他Apple 的应用程序和服务(例如 Siri,Home,地图等)中。就像 Apps 可以访问你的联系人一样,他们也可以访问在你允许的情况下,你的房屋地图。前面讨论的大多数功能都是关于获取有关场景,对象和人物三个类别的世界知识的。不需要每次都重新扫描这三个类别的大多数属性。用户房屋的形状不会经常变化,但是其中物体的位置会发生变化。可以对数据进行一次扫描,保存并在更改后进行修改。公司仍在研究如何解决共享此数据所固有的隐私问题,因此尚不清楚苹果或其他公司将采用哪种方法,但是很明显,如果没有这些数据的互操作性,AR 应用程序和体验将受到限制。这个主题需要更长的讨论时间,但是现在,本文将简要讨论此数据的三层次。
本地
用户扫描房屋,房屋中的物体以及他们的身体,然后将这些数据本地保存在设备上。可以通过不同的应用程序访问它,但只有在得到用户许可的情况下,才能保证不会将其导出或共享到外部。这使应用程序可以共享数据并在此数据之上构建体验,但仍然仅限于首先扫描数据的设备或用户帐户。共享公司扫描办公室或工厂及其内部的对象,并与员工共享此数据,以提供应用程序和服务以在工作期间为他们提供帮助。用户对此数据执行的访问和操作受其角色和特权以及数据所有者指定的内容的限制。这也将在消费者级别上起作用,在该级别上,一个家
庭将彼此共享房子的映射计划,但仍然以某种方式限制了它的访问。
云
世界被数以百万计的用户扫描,并将其保存在云中,有时也称为 AR 云。但是,不仅限于点云数据,还包括上面提到的所有高级理解数据。这里的数据所有权非常重要,因为用户不希望其他用户访问其私人空间或对象。尽管城市可能希望其用户可以访问他们的街道,博物馆,公共场所,但也许只有实际位于城市中的用户才能访问它们。这将使数以百万计的用户之间共享体验,并以某种方式将物理现实变成社交媒体平台,使他们可以在其中共享事物,放置艺术品,玩游戏以及许多其他可能性。关于如何处理这些数据以及每种方法的优缺点的争论仍未开始,但可以肯定的是,AR 成为下一个计算平台是必需的。
15、小组件
将 AR 数据本地保存,与你的联系人共享或保存在云中之后,出现 AR(移动端)的必杀技--小部件。窗口小部件是实现较小功能的小型应用程序或小程序,可以固定到任何扫描的数据,场景,对象或身体上。这些小窗口小部件的组合是基于 OS 保存的数据而构建的,这正是 AR 真正的威力所在,它使用户可以在其语境中完成特定任务。计时器可以固定在你的上方,新闻可以固定在浴室的镜子上,手册可以固定在打印机上,甚至虚拟手表也可以固定在你的手腕上。例如,如果咖啡快用完了,用户可以按下咖啡机旁边的虚拟按钮,以将咖啡添加到购物清单或在线订购。通过提供有关世界的适当信息并提供可以直接在其语境中直接采取的适当措施的方式,AR 的实用性来自于使我们日常的小任务变得更加轻松。
窗口小部件也可以与设备或装置(甚至 Apple 设备)捆绑在一起。你的 HomePod 会显示歌曲的信息以及正在播放的艺术家。你的电视周围可能会显示建议,洗衣机可以显示給您其不同的设置。最终,开发人员应该能够开发这些小部件并在 App Store 上提供它们,它们可以通用运行,也可以为特定的设备使用。用户将能够将它们安装在自己的空间中,并针对不同的场合,时间或心情使用不同的配置或布局。窗口小部件可以由一个人访问,由一组人共享或公开给任何人使用。当技术变得无形时,它将发挥最大作用,AR 应用程序,这时是最有用的。但是,要获得对世界的更好了解,保存这些数据并共享它们,然后针对不同的用例锚定不同的小部件并使用 AR 眼镜进行访问,这是我们仍然有很长一段路要走的终极 AR 体验。