Найти расстояние между камерой устройства 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?

Другие вопросы по тегам