使用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/