ios - 为什么使用 `didRemove [ARAnchor]` 的 `session` 方法从未为 `ARBodyTrackingConfiguration` 调用?
问题描述
我ARSessionDelegate
在ARView
初始化ARBodyTrackingConfiguration
.
session
带有didAdd: [ARAnchor]
和的方法didUpdate: [ARAnchor]
被正确调用。但didRemove: [ARAnchor]
永远不会被调用。
根据官方文档,锚点“可能”会自动从会话中删除,具体取决于会话配置。我没有找到这个设置。
有谁知道为什么永远不会调用该session
方法didRemove [ARAnchor]
以及我需要更改哪个设置才能使其正常工作?
import ARKit
import RealityKit
import UIKit
class AugmentedVideoView: ARView, ARSessionDelegate {
func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
print("didAdd") // called correctly
}
func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
print("didUpdate") // called correctly
}
func session(_ session: ARSession, didRemove anchors: [ARAnchor]) {
print("didRemove") // is never called :-(
}
required init(frame: CGRect) {
#if targetEnvironment(simulator)
super.init(frame: frame)
handleError("Camera not available in simulator.")
return
#else
super.init(frame: frame,
cameraMode: ARView.CameraMode.ar,
automaticallyConfigureSession: false)
self.session.delegate = self
guard ARBodyTrackingConfiguration.isSupported else {
handleError("Your device does not support body tracking.")
return
}
let configuration = ARBodyTrackingConfiguration()
configuration.automaticSkeletonScaleEstimationEnabled = false
self.session.run(configuration)
#endif
}
@available(*, unavailable)
dynamic required init?(coder decoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
解决方案
好吧,我想我现在明白了。即使该人不再被检测到,ARKit
也只是假设它仍然是最后一次检测到的地方。这适用于,例如,如果人不在视线范围内。如果一个人不在视线范围内,而另一个人被检测到,ARKit
则不够聪明,无法将其检测为另一个人。它只是更新旧的锚,假设它是同一个。
推荐阅读
- linux - Bash root crontab 脚本挂起并且不再运行
- python - 在熊猫中从浮点数转换为字符串时如何具有相同的小数位数?
- java - 从 Tomcat 7 到 8.5 的错误将上下文破坏事件发送到类的侦听器实例的异常
- xml - 有没有办法表明一个节点在 XML 文件中已被弃用?
- r - 在终端中使用 rvest::read_html 的浏览器不受支持
- ssl - 从 SSL 网站运行 Jplayer,但音频文件不是 SSL。音频文件无法播放
- c# - 为什么我的 C# 程序集在从本机 C++ 应用程序加载时无法调试?
- python - Python numpy sigmoid 函数返回大于 1 的数字
- java - 如何使用 simplejdbccall 将 VARRAY(oracle PL/SQL) 参数传递给过程?
- python - 如何从建立在数据框中列名的字典中创建新列