Можно ли отследить лицо и отобразить его в RealityKit ARView? - PullRequest
3 голосов
/ 10 января 2020

В документе Apple говорится, что вы можете установить userFaceTrackingEnabled для одновременной передней и задней камеры. После добавления ARView и правильной настройки конфигурации я могу подтвердить, что функции ARSessionDelegate будут вызываться нормально, как показано ниже:

func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
    for anchor in anchors where anchor is ARFaceAnchor {
        // triggerd
    }
}

func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
    for anchor in anchors where anchor is ARFaceAnchor {
        // triggerd
    }
}

Итак, теперь у меня есть объект ARFaceAnchor, что мне делать дальше? Можно ли сделать это ARFaceAnchor с помощью RealityKit? Или может быть предоставлено только SceneKit? Потому что все примеры на inte rnet реализованы с использованием SceneKit.

Ответы [ 2 ]

1 голос
/ 10 января 2020

Если вы хотите использовать RealityKit технологию рендеринга, вы должны использовать свои собственные якоря.

Итак, для RealityKit опыт отслеживания лица вам просто нужно:

AnchorEntity(AnchoringComponent.Target.face)

И вам даже не нужен экземпляр session(_:didAdd:) и session(_:didUpdate:) методы в случае, если вы используете Reality Composer scene.

Если вы готовите сцену в Reality Composer .face, то тип привязки доступен для вас при запуске. Вот как выглядит нередактируемый скрытый код Swift в файле .reality:

public static func loadFace() throws -> Facial.Face {

    guard let realityFileURL = Foundation.Bundle(for: Facial.Face.self).url(forResource: "Facial", 
                                                                          withExtension: "reality") 
    else {
        throw Facial.LoadRealityFileError.fileNotFound("Facial.reality")
    }

    let realityFileSceneURL = realityFileURL.appendingPathComponent("face", isDirectory: false)
    let anchorEntity = try Facial.Face.loadAnchor(contentsOf: realityFileSceneURL)
    return createFace(from: anchorEntity)
}

Если вам нужна более подробная информация об якорях, прочитайте этот пост .

PS

Но на данный момент есть одна неприятная проблема - если вы используете сцену, встроенную в Reality Composer, вы можете использовать только один тип якоря за один раз (horizontal, vertical, image, face или object). Следовательно, если вам нужно использовать ARWorldTrackingConfig вместе с ARFaceTrackingConfig - не используйте сцены Reality Composer. Я уверен, что эта ситуация будет исправлена ​​в ближайшее время.

0 голосов
/ 10 января 2020

Я полагаю, что это не может быть сделано с помощью Reality Kit, так как я читал документацию по отслеживанию лиц, я не мог найти ничего о отслеживании с помощью Reality Kit. Но вы можете использовать SceneKit, а также SpriteKit. Пожалуйста, проверьте этот документ.

https://developer.apple.com/documentation/arkit/tracking_and_visualizing_faces

Это предложение также привлекло мое внимание.

Этот пример использует ARSCNView для отображения 3D-контента с помощью SceneKit, но вы также можно использовать SpriteKit или создать собственный рендер, используя Metal (см. ARSKView и Отображение опыта AR с Metal).

...