使用CoreML模型检测物体并找到该物体的尺寸是否可能?

4
我想使用CoreML和ARKit检测门、窗等物体类别,并且希望可以找到门的高度、宽度和面积等尺寸信息。
如何检测物体并在其上添加一些覆盖形状,以便我可以找到该物体的真实位置和尺寸?
1个回答

1
使用ARKit内置的对象检测算法完成该任务。它简单而强大。
通过ARKit的对象检测功能,您可以检测到您的门(预先扫描或在智能手机上拍摄)。
以下代码可帮助您检测现实世界中的对象(如门),并将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)
        }
    }
}

请提供一个名为Resources的Xcode文件夹,并包含您真实物品的图像。

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()
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接