Найти расстояние между камерой устройства iOS и лицом пользователя
Я пытаюсь найти расстояние между фронтальной камерой устройства iOS и лицом пользователя в реальном мире.
До сих пор я пытался ARKit/SceneKit
и используя ARFaceAnchor
Я могу определить расстояние лица пользователя от камеры; но он работает только в непосредственной близости (до 88 см). Мое приложение требует определения расстояния до 200 см.
Я предполагаю, что это может быть достигнуто без использования данных trueDepth (которые используются в ARFaceAnchor
).
Можете ли вы поставить меня в правильном направлении?
1 ответ
Чтобы определить расстояние между устройством и лицом пользователя, необходимо преобразовать положение обнаруженного лица пользователя в систему координат камеры. Для этого вам нужно будет использовать метод convertPosition из SceneKit для переключения координатного пространства с координатного пространства лица на координатное пространство камеры.
let positionInCameraSpace = theFaceNode.convertPosition(pointInFaceCoordinateSpace, to: yourARSceneView.pointOfView)
theFaceNode - это SCNNode, созданный ARKit, представляющий лицо пользователя. Свойство pointOfView вашего ARSCNView возвращает узел, с которого просматривается сцена, в основном камера.
pointInFaceCoordinateSpace может быть любыми вершинами грани сетки или просто позицией theFaceNode (которая является источником системы координат грани). Здесь positionInCameraSpace - это SCNVector3, представляющий положение заданной точки в координатном пространстве камеры. Затем вы можете получить расстояние между точкой и камерой, используя значения x,y и z этого SCNVector3 (выраженные в метрах).
Вот некоторые ссылки, которые могут вам помочь:
- Расстояние между лицом и камерой с помощью ARKit
- https://github.com/evermeer/EVFaceTracker
- https://developer.apple.com/documentation/arkit/arfacetrackingconfiguration
- Как измерить расстояние устройства от лица с помощью ARKit в iOS?