我正在尝试使用苹果在演示ARKit应用程序中提供的代码来检测飞机,但它的工作不稳定,在某些情况下,它可以完美地检测表面,但在某些情况下,它不能检测到飞机。然后,我还注意到在演示ARKit应用程序中,飞机检测也发生了同样的事情。当它检测到平面时,黄色方块会关闭,但并非每次都是这样。有没有人遇到过同样的问题?如何使这种飞机检测行为保持一致?
发布于 2017-08-08 02:47:00
平面检测在很大程度上取决于现实世界的条件。你需要良好的照明,一个表面有一个相当多的可见细节,以及一个相当多的清晰的平面空间。例如,一张普通的白色桌子或一块黑色桌布会使飞机检测速度变慢/可靠性降低。有明显纹理的木质办公桌效果更好,但如果里面散落着键盘、鼠标、电缆和设备(当然,我们中的任何人都不会有这样的办公桌…)。
平面检测也涉及运动和视差三角测量。如果你将你的设备指向一个良好的表面(如上所述),但只通过旋转设备(例如,在转椅上旋转)来改变你在该表面上的视角,那么你不会比你只是静止不动地为ARKit提供更多有用的信息。另一方面,如果您将设备左右移动或上下移动至少几英寸,它在表面上的透视将获得一些视差,这将加快/提高平面检测速度。
更新:如果你正在开发一个依赖于平面检测的应用程序,它有助于提示用户执行这些动作。他们在WWDC17的实验室中展示的第三方演示程序有一些很好的应用程序特定的方法来做到这一点:乐高有一个小游戏,可以引导玩具直升机降落,行尸走肉告诉玩家在地板上搜索僵尸脚印,等等。
发布于 2017-08-07 22:00:46
给房间增加更多的光线。在光线充足的房间里,ArKit效果更好。你不能影响飞机探测。等待iOS 11的正式发布。
发布于 2018-10-31 12:35:08
class ViewController: UIViewController {
@IBOutlet var sceneView: ARSCNView!
let configuration = ARWorldTrackingConfiguration()
override func viewDidLoad() {
self.sceneView.debugOptions = [SCNDebugOptions.showFeaturePoints, SCNDebugOptions.showWorldOrigin]
self.configuration.planeDetection = .horizontal
self.sceneView.session.run(configuration)
self.sceneView.delegate = self
super.viewDidLoad()
}
}
//MARK: - ARSEN delegate -
extension ViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
guard let planeDetection = anchor as? ARPlaneAnchor else {
return
}
print("Plane anchor detect")
}
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
guard let planeDetecttion = anchor as? ARPlaneAnchor else {
return
}
}
func renderer(_ renderer: SCNSceneRenderer, didRemove node: SCNNode, for anchor: ARAnchor) {
guard anchor is ARPlaneAnchor else{
return
}
}
}https://stackoverflow.com/questions/45545431
复制相似问题