如何在AR应用程序中包含和运行图像跟踪配置和世界跟踪配置

Tin*_*loy 4 iphone ios swift arkit

我正在体验ARkit,并在线观看了一些教程,我知道如何进行图像跟踪和世界跟踪,但是当相机跟踪图像时,不知道如何将它们组合到同一个应用程序中,设备会自动运行图像跟踪配置,但当图像离开相机时,它运行世界跟踪配置.

我知道我也可以使用世界跟踪来跟踪图像,但图像跟踪配置似乎具有更稳定的跟踪结果.

有人可以帮忙吗?

ric*_*ter 15

您无需切换配置.(可以切换,但你可能不应该.)

您可以在ARKit 2(iOS 12)中的世界跟踪配置中使用图像跟踪:

let configuration = ARWorldTrackingConfiguration()
configuration.detectionImages = // your images here
configuration.maximumNumberOfTrackedImages = 1 // or up to 4
// also set other options like plane detection and environment texture if you want
session.run(configuration)
Run Code Online (Sandbox Code Playgroud)

设置maximumNumberOfTrackedImages是将您的配置从图像检测(仅在图像首次出现时告诉您)更改为图像跟踪(告诉您图像何时移动,以60 fps为单位).

ARKit 2提供两种图像跟踪方式,以便您可以选择适合您需要的方式:

ARWorldTrackingConfiguration 带图像跟踪(如上所示)

世界跟踪的所有其他功能(平面检测,环境纹理,命中测试,物体检测,世界地图保存/恢复),具有图像跟踪功能.

  • 专业版:如果您的AR体验除了图像触发内容之外还有其他功能,您还可以使用所有其他功能.
  • Pro:您可以将AR内容与跟踪图像相关联,并让它以其他方式与世界进行交互(即使在触发图像离开相机后仍然存在于桌面上).

  • Con:世界跟踪需要一个稳定,功能丰富的环境,因此它不能很好地移动参考帧,例如当用户在公共汽车上时(运动传感器混乱),平原或光线不足的环境(无需视觉跟踪) ,或者像厚厚的人群或海浪一样的移动背景(视觉跟踪混乱).

  • Con:世界跟踪具有CPU /功率/热成本.
  • Con:跟踪图像需要已知的物理尺寸才能正确放置世界跟踪参照系.

ARImageTrackingConfiguration

只是图像跟踪:当图像在相机上时,您会获得一个实时更新的锚点.

  • Pro:没有世界跟踪限制 - 您可以在公共汽车上,海洋旁边,光线昏暗的环境中检测图像(只要图像本身清晰可见)等.
  • Pro:降低CPU /功耗/散热成本.
  • Pro(?):图像的物理尺寸并不重要.相对于图像锚点放置虚拟内容会使内容与图像成比例.如果您的图像印在明信片上,您可以从中获得一条小小的虚拟龙; 如果在建筑物的侧面涂上相同的图像,你的龙就足以恐吓城市了.
  • Con:当您的图像在相机上时,您会获得一个用于放置相对于它的内容的锚点...但是当它离开相机时,您没有用于在世界中放置内容的参考框架.(嗯,你可以相对于相机放置内容,但粘贴到相机空间的内容不是很"AR-y".)相对于检测到的图像放置的虚拟内容不能"逃脱"超出基于图像的空间进行交互与现实世界.
  • 缺点:你得不到任何的世界跟踪会话的其他功能(平面检测,环境贴图,命中测试,目标检测,世界地图保存/恢复).

选择哪个?

这就是你想要创造的那种体验.如果你想让一张实体贺卡或海报或广告牌看起来像虚拟内容"活跃起来",而你不关心那些与现实世界交互的内容,请使用ARImageTrackingConfiguration.如果您正在以其他方式进行与世界互动的AR体验,并且您想要向其添加基于图像的内容,请使用ARWorldTrackingConfiguration+ detectionImages+ maximumNumberOfTrackedImages.

在他们之间切换怎么样?

可能是一个坏主意.

每次run(configuration)使用与先前运行的会话不同的配置类型进行呼叫时,其所有跟踪状态都将被重置 - 它不知道交换机之前的任何锚定位置.