ARKit和Vision框架用于物体识别

10

我希望能得到一些指引,如何将苹果的新Vision API与ARKit相结合,以实现对象识别。这不需要追踪移动对象,只需要稳定地在三维空间中识别它,使AR体验能够相应地做出反应。

我知道像 Vuforia 或 Wikitude 这样的服务已经提供了此类体验,但我想尝试仅使用本机的苹果API来实现它。

3个回答

1

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

var detectionObjects: Set<ARReferenceObject> { get set }

让我们看看苹果文档对此的说明:

使用此属性选择已知的3D对象,以便ARKit在用户的环境中查找并呈现为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)
        }
    }
}

0
  • 为了识别(多个)对象及其坐标(用于ARKit),您需要训练一个目标检测器(而不是分类器!)。

  • 为了顺利地将其导出到CoreML模型中,最简单的构建/训练方法是CreateML和TuriCreate(稍微有点难度)。

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

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

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


0

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

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

还支持在ARKit中运行Vision

我不太确定你在问什么,但这些可能会有所帮助。


“Using Vision with ARKit”示例并不特定于Xcode 9.3 / iOS 11.3 - 其中大部分内容都可以在已发布的Xcode / iOS版本上完成。 - rickster

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