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