首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS AR工具包3切换相机后世界跟踪停止工作

iOS AR工具包3切换相机后世界跟踪停止工作
EN

Stack Overflow用户
提问于 2020-02-23 19:19:15
回答 1查看 517关注 0票数 1

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

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

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

代码语言:javascript
复制
let configuration = ARWorldTrackingConfiguration()
configuration.isLightEstimationEnabled = true
configuration.planeDetection = [.horizontal, .vertical]
if #available(iOS 13.0, *) {
    configuration.frameSemantics = [.personSegmentationWithDepth]
}
sceneView.session.run(configuration)

如果我只是在现场会话上运行这个配置,那么一切都是完美的。

2.当我切换到前面的摄像头时,像这样:

代码语言:javascript
复制
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部件时。臭虫不会出现。但我确实需要设置configuration.isWorldTrackingEnabled = true
  • 前摄像头会话永不中断,即使在错误出现后,如果我切换回前摄像头,世界跟踪在那里很好。

下面是configuration.isWorldTrackingEnabled =false应用程序的视频(没有出现bug )

无缺陷视频- kQ

下面是configuration.isWorldTrackingEnabled =true应用程序的视频(bug出现)

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

我已经试过什么了?

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

有谁知道怎么解决它吗?有人遇到过这种奇怪的行为吗?

EN

回答 1

Stack Overflow用户

发布于 2020-02-24 04:24:08

我相信,在前后摄像头之间切换(在这种情况下,ARWorldTrackingConfiguration和ARFaceTrackingConfiguration )是不可能的,因为它是在一个传统的相机会话。每次这样做,ARKit都会重置所有添加的对象和锚。

我建议看看苹果的"用户人脸跟踪与世界跟踪相结合“示例项目,其中包含了如何使用后摄像头进行面部跟踪的细节。这使得假设,你只需要跟踪一张脸,而不是实际显示正面的相机,这可能是不谨慎的。

假设情况下,您可以考虑在ARKit会话中使用自己的金属渲染器,然后利用AVFoundation为相机提供手动控制(和相机切换),但您将负责确定物体的三维位置,并在屏幕上/在3D空间中呈现这些对象。

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

简而言之,你并不是真的像你想的那样在相机之间切换,你正在切换的配置恰好是使用不同的相机。iOS/iPadOS 13增加了在世界跟踪配置上实现人脸跟踪和在人脸跟踪配置上进行世界跟踪的能力,但为了同时积极地运行这两个摄像头,但在会话期间只向用户显示其中一个摄像头的摄像机预览(随后,ARFaceTrackingConfiguration中的人遮挡实际上不会做任何事情;它只在后面的摄像机上工作--您需要使用AVDepthData来执行类似的效果)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60365928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档