改善ARKit iOS Swift中的平面检测

时间:2019-05-11 10:18:19

标签: ios swift arkit arscnview

有什么方法可以改善ARKit Plane的检测并减少检测所需的时间? 在这里,我们正在检测水平面的问题是,如果我们保持相机稳定,则需要花费时间才能检测到它并且不能在地板上工作。

对于桌子和其他类似的表面,大约需要5到6秒。但是在地板上超过20分钟或半分钟的时间,如果我们不移动相机,则根本无法使用。

这是我的代码:-

   override func viewDidLoad() {
    super.viewDidLoad()
    SVProgressHUD.show(withStatus: "Detecting Plane and Getting ready")
    sceneView.delegate = self
    sceneView.session.delegate = self
    sceneView.showsStatistics = false
    let configuration = ARWorldTrackingConfiguration()
    configuration.planeDetection = .horizontal
    configuration.isLightEstimationEnabled = true

    sceneView.session.run(configuration)
    sceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints]
}
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {

    if currentAnchor == nil {
        currentAnchor = anchor

        let light = SCNLight()
        light.type = .directional
        light.color = UIColor(white: 1.0, alpha: 1.0)
        light.shadowColor = UIColor(white: 0.0, alpha: 0.8).cgColor
        let lightNode = SCNNode()
        lightNode.eulerAngles = SCNVector3Make(-.pi / 3, .pi / 4, 0)
        lightNode.light = light
        sceneView.scene.rootNode.addChildNode(lightNode)

        let ambientLight = SCNLight()
        ambientLight.type = .ambient
        ambientLight.color = UIColor(white: 0.8, alpha: 1.0)
        let ambientNode = SCNNode()
        ambientNode.light = ambientLight
        sceneView.scene.rootNode.addChildNode(ambientNode)
    }
    }
}

1 个答案:

答案 0 :(得分:0)

我猜地板是光滑的,质地不够。由于多种原因,表面检测可能会失败或花费太长时间-光线不足,反射面过多,表面细节不足或相机运动过多。

尝试四处走动,打开更多的灯光,并确保表面足够纹理。

光滑的表面使ARKit很难检测到它们。表面的纹理越多,ARKit就能更快地检测到它。