swift - 是否可以使用 CoreML 模型检测对象并找到该对象的测量值?

标签 swift augmented-reality arkit coreml apple-vision

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

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

最佳答案

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

关于swift - 是否可以使用 CoreML 模型检测对象并找到该对象的测量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57626861/

相关文章:

c# - Vuforia 一张图片定位多张图片

ubuntu - ArtoolKit 修改代码

swift - ARKit 中渲染器和 session 方法的区别

ios - 是否可以像在 Vuforia 中那样在 ARKit 中跟踪对象?

ios - 从 SCNScene url 获取下载进度

ios - SwiftUI adjustsFontSizeToFitWidth 等价

ios - 如何截屏一个Scrollview的所有内容?

swift - 如何找到在 HitTest 中找到的平面中心 ARKit SceneKit

swift - 作为参数的函数的默认值

string - 二元运算符 '==' 无法应用于 Swift 2 Xcode 7 中类型 'String!' 和 '[String]' 的操作数