10

我真的很想获得一些关于将 Apple 的新 Vision API 与 ARKit 结合起来以实现对象识别的指导。这不需要跟踪移动的物体,只需识别它在 3d 空间中的稳定状态,AR 体验就会做出相应的反应。

我知道这种类型的体验可以在Vuforia或之类的服务中使用Wikitude,但我想仅使用本机 Apple API 来尝试。

4

3 回答 3

1

您不一定需要在项目中使用 Vision 框架本身,因为 ARKit 已经具有此功能。您只需要激活一个可以从 iOS 12 直接使用的detectionObjects实例属性:

var detectionObjects: Set<ARReferenceObject> { get set }

让我们看看 Apple 文档是怎么说的:

使用此属性为 ARKit 选择已知 3D 对象,以便在用户环境中查找并作为 ARObjectAnchor 呈现以用于您的 AR 体验。

这是一个工作代码(就这么简单):

import ARKit

class ViewController: UIViewController {

    @IBOutlet var sceneView: ARSCNView!
    let config = ARWorldTrackingConfiguration()

    override func viewDidLoad() {
        super.viewDidLoad()

        sceneView.delegate = self

        // add reference objects into Resources in your project
        guard let objects = ARReferenceObject.referenceObjects(inGroupNamed: "Resources", 
                                                                     bundle: nil) 
        else { 
            fatalError("No reference here!") 
            return
        }

        config.detectionObjects = objects
        sceneView.session.run(config)
    }
}

当然,插入一个带有 renderer() 方法的扩展:

extension ViewController: ARSCNViewDelegate {

    func renderer(_ renderer: SCNSceneRenderer,
                 didAdd node: SCNNode,
                  for anchor: ARAnchor) {

        if let _ = anchor as? ARObjectAnchor {         // Special Type of anchor

            let sphereNode =  SCNNode(geometry: SCNSphere(radius: 0.05))
            sphereNode.geometry?.firstMaterial?.diffuse.contents = UIColor.green
            node.addChildNode(sphereNode)
        }
    }
}
于 2019-11-24T11:40:10.897 回答
0

我对这个网站比较陌生,所以我还不能发表评论。

iOS 11.3 中的 ARKit 1.5 包括图像识别

还支持使用 ARKit 运行 Vision

我不完全确定您的要求,但这些可能会有所帮助。

于 2018-02-07T18:20:11.213 回答
0
  • 要识别(多个)对象,包括它们的坐标(在 ARKit 中使用),您需要训练一个对象检测器(不是分类器!)

  • 要将其顺利导出到 CoreML 模型中,构建/训练它的最简单方法是 CreateML 和 TuriCreate(稍微不那么容易)。

  • 要将 3D 对象添加到 AR 体验中的特定位置,您需要为其 ARAnchor 找到“worldTransform”(您需要对其进行子类化)。

  • 要找到“worldTransform”,您需要在 ARFrame 上以 2D 识别对象的位置触发“hitTest()”。

好吧,这可能是一个停下来的好地方,因为您的问题相当高级。

于 2018-10-18T03:39:46.253 回答