Можно ли распознать виртуальное изображение вместо реального изображения с помощью ARKit? (iOS 12) - PullRequest
0 голосов
/ 07 января 2019

Я сделал несколько приложений для отслеживания AR-изображений и приложений AR World Tracking.

AR Image Tracking работает для распознавания изображений на физической карте, снятой с камеры.

Есть ли способ заставить AR Image Tracking распознавать виртуальный «образ», который в основном представляет собой материалы SCNPlane?

Буду признателен, если кто-нибудь подскажет мне какое-либо направление или совет.

( Примечание: для этого проекта, я использую изображение обнаружения в ARWorldTrackingConfiguration)

enter image description here

enter image description here

1 Ответ

0 голосов
/ 08 января 2019

Я думаю, что, вероятно, да, это возможно, добавив изображение контента (которое вы хотите обнаружить, т.е. на вашей карте) в свой Assets.xcassets. а затем используйте этот код для обнаружения виртуального изображения, как показано ниже:

// Введите имя вашего изображения в (withName: "namehere")

 lazy var mapNode: SCNNode = {
       let node = scene.rootNode.childNode(withName: "map", recursively: false)
        return node
    }()

// Now When detecting Images 


extension ViewController: ARSCNViewDelegate {

        func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
            DispatchQueue.main.async {
                guard let imageAnchor = anchor as? ARImageAnchor,
                    let imageName = imageAnchor.referenceImage.name else { return }

                // TODO: Comment out code
                //            let planeNode = self.getPlaneNode(withReferenceImage: imageAnchor.referenceImage)
                //            planeNode.opacity = 0.0
                //            planeNode.eulerAngles.x = -.pi / 2
                //            planeNode.runAction(self.fadeAction)
                //            node.addChildNode(planeNode)

                // TODO: Overlay 3D Object
                let overlayNode = self.getNode(withImageName: imageName)
                overlayNode.opacity = 0
                overlayNode.position.y = 0.2
                overlayNode.runAction(self.fadeAndSpinAction)
                node.addChildNode(overlayNode)

                self.label.text = "Image detected: \"\(imageName)\""
            }
        }

        func getPlaneNode(withReferenceImage image: ARReferenceImage) -> SCNNode {
            let plane = SCNPlane(width: image.physicalSize.width,
                                 height: image.physicalSize.height)
            let node = SCNNode(geometry: plane)
            return node
        }

        func getNode(withImageName name: String) -> SCNNode {
            var node = SCNNode()
            switch name {
            case "map":
                node = mapNode

            default:
                break
            }
            return node
        }

    }
...