使用iPhoneX True-Depth相机,可以获取任何对象的3D坐标并使用该信息来定位和缩放对象,但是对于较旧的iPhone,我们无法使用正面相机上的AR,到目前为止,是使用Apple Vison框架检测面部,并在面部或地标周围绘制一些2D路径。
我制作了一个SceneView并将其应用为背景清晰的我的视图的顶层,它的下面是AVCaptureVideoPreviewLayer,检测到面部后,我的3D对象出现在屏幕上,但是根据面部boundingBox正确定位和缩放它,需要取消投影并我遇到的其他问题,我也尝试过使用CATransform3D将2D BoundingBox转换为3D,但是我失败了!我想知道我是否想要实现?我记得如果我没看错,SnapChat在ARKit在iPhone上可用之前就是这样做的!



    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview(self.sceneView)

        self.sceneView.frame = self.view.bounds
        self.sceneView.backgroundColor = .clear
        self.node = self.scene.rootNode.childNode(withName: "face",
        recursively: true)!

    }

    fileprivate func updateFaceView(for result:
    VNFaceObservation, twoDFace: Face2D) {
        let box = convert(rect: result.boundingBox)
        defer {
            DispatchQueue.main.async {
                self.faceView.setNeedsDisplay()
            }
        }

        faceView.boundingBox = box
        self.sceneView.scene?.rootNode.addChildNode(self.node)

        let unprojectedBox = SCNVector3(box.origin.x, box.origin.y,
        0.8)

        let worldPoint = sceneView.unprojectPoint(unprojectedBox)

         self.node.position = worldPoint
        /* Here i have to to unprojecting
         to convert the value from a 2D point to 3D point also
         issue here. */
    }

最佳答案

我建议您看一下使用后置或前置摄像头支持Apple AR场景的Google AR Core产品...但是,对于非面部深度摄像头设备,它会增加Apple之外的一些其他功能。

苹果的Core Vision与Google的Core Vision框架几乎相同,该框架返回代表眼睛/嘴巴/鼻子等的2D点以及面部倾斜分量。

但是,如果您想通过一种方法将2D纹理简单地应用到自适应3D面部,或者将3D模型附加到面部点上,请查看Google的Core Augmented Faces框架。它在iOS和Android上具有出色的示例代码。

关于swift - 如何通过Apple Vision“NO AR”在检测到的面部上应用3D模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56272702/

10-09 13:25