С камерой iPhoneX True-Depth можно получить 3D-координаты любого объекта и использовать эту информацию для позиционирования и масштабирования объекта, но на старых iPhone у нас нет доступа к AR на передней камере, что я До сих пор было сделано определение лица с использованием каркаса Apple Vison и рисование двухмерных контуров вокруг лица или ориентиров.
я сделал SceneView и применил его в качестве переднего слоя моего просмотра с чистым фоном, а под ним - AVCaptureVideoPreviewLayer , после обнаружения лица мой 3D-объект появляется на экране, но позиционируется и корректно масштабируя его в соответствии с гранью лица, которая требует непроецирования и других вещей, которые я там застрял, я также пытался преобразовать 2D BoundingBox в 3D, используя CATransform3D , но мне не удалось! мне интересно, возможно ли то, чего я хочу достичь? я помню, что 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. */
}