iOS AR Kit 3世界追踪在切换相机后停止工作



我正在开发一个AR Drawing应用程序,在AR Kit 3中遇到了一个错误/问题。世界跟踪停止工作,并且在AR视图中添加的三维对象被冻结。

我的应用程序在前后摄像头之间切换,在这两种情况下我都启用了世界跟踪。

1.我启用后台摄像头会话,如下所示:

let configuration = ARWorldTrackingConfiguration()
configuration.isLightEstimationEnabled = true
configuration.planeDetection = [.horizontal, .vertical]
if #available(iOS 13.0, *) {
configuration.frameSemantics = [.personSegmentationWithDepth]
}
sceneView.session.run(configuration)

如果我只是在场景会话中运行此配置,一切都会完美运行。

2.当我像这样切换到前置摄像头时:

let configuration = ARFaceTrackingConfiguration()
if #available(iOS 13.0, *) {
configuration.isWorldTrackingEnabled = true
}
configuration.isLightEstimationEnabled = true
if #available(iOS 13.0, *) {
configuration.frameSemantics = [.personSegmentation]
}
sceneView.session.run(configuration)

一切仍然完美。

3.但当我切换回后台摄像头会话时(我像第1点一样切换回(:

在AR场景中添加的3D对象在静态视图中冻结,世界轨迹停止工作。没有办法让它恢复工作,只能关闭应用程序并重新打开。

有趣的事情:

  • 禁用configuration.isWorldTrackingEnabled = true时部分错误没有出现。但我确实需要CCD_ 2被设置
  • 前置摄像头会话永远不会中断,即使在错误出现后,如果我切换回前置摄像头,世界跟踪在那里也很好

以下是带有configuration.isWorldTrackingEnabled =false的应用程序的视频(没有出现错误(:

无错误视频-https://www.youtube.com/watch?v=JPAa6zJe_kQ

这是一个带有configuration.isWorldTrackingEnabled =true的应用程序的视频(出现错误(:

是错误视频-https://www.youtube.com/watch?v=UF2Z8c4A42I

我已经试过什么了

  • 我试着先在前置摄像头上运行应用程序,看看是否也当我换到后置摄像头时会中断。是的,它也坏了
  • 我试着用configuration.isWorldTrackingEnabled = true运行一个ARFaceTrackingConfiguration(),然后用configuration.isWorldTrackingEnabled = false再次运行它,看看它是否会覆盖并修复它。但没有锁,仍然在崩溃
  • 我也试过暂停会话,然后在相机开关之间重新启用它,但仍然有问题。即使有延误
  • 我也尝试过用sceneView.session.run(configuration,options: [.resetTracking,.removeExistingAnchors,.stopTrackedRaycasts])这样的设置来运行配置,但仍然没有成功

有人知道如何修复它吗?有人遇到过这种奇怪的行为吗?

我相信,在前置和后置摄像头(在这种情况下是ARWorldTrackingConfiguration和ARFaceTrackingConfiguration(之间切换是不可能的,就像在传统的摄像头会话中一样。ARKit将在每次执行此操作时重置所有添加的对象和锚点。

我建议研究一下苹果公司的"将用户面部跟踪和世界跟踪相结合"样本项目,该项目确实包含了如何使用后置摄像头进行面部跟踪的细节。这就假设你只需要跟踪一张脸,而不需要实际显示前置摄像头,这对你来说可能不谨慎。

假设您可以考虑在ARKit会话中使用自己的Metal渲染器,然后可以利用AVFoundation手动控制相机(和相机切换(,但您将负责确定对象的3D位置,并在屏幕上/3D空间中渲染这些对象。

此外,在配置ARWorldTrackingConfiguration时,可能值得尝试将userFaceTrackingEnabled设置为true。

简而言之,你并没有像你想象的那样在相机之间切换,而是在切换碰巧使用不同相机的配置。iOS/iPadOS 13增加了在世界跟踪配置上实现面部跟踪和在面部跟踪配置上实施世界跟踪的能力,但为了同时主动运行两个相机,但只在会话期间向用户显示其中一个摄像头的摄像头预览(随后,人员遮挡实际上在ARFaceTrackingConfiguration中不会起任何作用;它只适用于后置摄像头-您需要使用AVDepthData来执行类似的效果(。

最新更新