【问题标题】:Is it possible to detect object using CoreML model and find measurement of that object?是否可以使用 CoreML 模型检测对象并找到该对象的测量值?
【发布时间】:2019-12-28 19:29:59
【问题描述】:

我想使用 CoreML 和 ARKit 检测门、窗等对象类别,并且我想找到门的测量值(例如高度、宽度和面积)。

如何检测对象并在该对象上添加一些叠加形状,以便找到该对象的真实位置和测量值?

【问题讨论】:

    标签: swift augmented-reality arkit coreml apple-vision


    【解决方案1】:

    为该任务使用 ARKit 的内置对象检测算法。它简单而强大。

    使用 ARKit 的 object detection,您可以检测到您的门(初步扫描或在智能手机上拍摄)。

    以下代码可帮助您检测现实世界中的对象(如门)并将 3D 对象或 3D 文本放置在 ARObjectAnchor 位置:

    import ARKit
    
    extension ViewController: ARSCNViewDelegate {
    
        func renderer(_ renderer: SCNSceneRenderer,
                     didAdd node: SCNNode,
                      for anchor: ARAnchor) {
    
            if let _ = anchor as? ARObjectAnchor {
    
                let text = SCNText(string: "SIZE OF THIS OBJECT IS...",
                           extrusionDepth: 0.05)
    
                text.flatness = 0.5
                text.font = UIFont.boldSystemFont(ofSize: 10)
    
                let textNode = SCNNode(geometry: text)
                textNode.geometry?.firstMaterial?.diffuse.contents = UIColor.white
                textNode.scale = SCNVector3(0.01, 0.01, 0.01) 
    
                node.addChildNode(textNode)
            }
        }
    }
    

    并为 Xcode 的文件夹 Resources 提供您现实生活中物体的图像。

    class ViewController: UIViewController {
    
        @IBOutlet var sceneView: ARSCNView!
        let configuration = ARWorldTrackingConfiguration()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            sceneView.debugOptions = .showFeaturePoints
            sceneView.delegate = self
    
            guard let dObj = ARReferenceObject.referenceObjects(inGroupNamed: "Resources", 
                                                                      bundle: nil) 
            else {
                fatalError("There's no reference image")
                return
            }
    
            configuration.detectionObjects = dObj
            sceneView.session.run(configuration)
        }
    
        override func viewWillDisappear(_ animated: Bool) {
            super.viewWillDisappear(animated)
            sceneView.session.pause()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-15
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多