ARKit – 如何将 ARImageTrackingConfiguration 与 ARFaceTrackingConfiguration 结合使用?

问题描述 投票:0回答:1

我构建了一个使用图像跟踪和交换平面图像的应用程序。我还使用了人物遮挡(现在),这样人们就可以在这些图像前面拍摄照片。我真的希望这个应用程序有一个自拍模式,这样人们就可以在图像交换区域前拍摄自己的照片。

我正在阅读 ARKit 3.5 上的功能,但据我所知,唯一支持前置摄像头的是

ARFaceTrackingConfiguration
,它不支持图像跟踪。
ARImageTrackingConfiguration
ARWorldTrackingConfiguration
仅使用后置摄像头。

有没有办法使用前置摄像头制作带有人物遮挡(和图像跟踪)的自拍模式?

swift augmented-reality arkit realitykit
1个回答
6
投票

关于 AR 配置

答案是

NO
,除了前置摄像头
ARFaceTrackingConfiguration
之外,您不能使用任何AR配置。不过,您可以同时在前置摄像头上使用
ARFaceTrackingConfiguration
和在后置摄像头上使用
ARWorldTrackingConfiguration
。这允许用户使用他们的脸作为特定控制器与后置摄像头中的 AR 内容进行交互。

查看 this 文档页面,了解哪个配置对应哪个摄像头(后置或前置)。

这是包含 ARKit 5.0 八种跟踪配置的表格:

AR配置 什么相机?
ARWorldTracking配置 后部
ARBodyTracking配置 后部
AR方向跟踪配置 后部
AR图像跟踪配置 后部
ARFaceTracking配置 正面
AR对象扫描配置 后部
AR位置跟踪配置 后部
ARGeoTracking配置 后部

同步世界和脸部配置

要根据驱动程序面部跟踪使用驱动世界跟踪,请使用以下代码:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    guard ARFaceTrackingConfiguration.isSupported,
          ARFaceTrackingConfiguration.supportsWorldTracking
    else {
        fatalError("We can't do face tracking")
    }        
    let config = ARFaceTrackingConfiguration()
    config.isWorldTrackingEnabled = true
    sceneView.session.run(config)
}

或者您可以使用面部追踪作为辅助配置:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    let config = ARWorldTrackingConfiguration()
    
    if !ARWorldTrackingConfiguration.supportsUserFaceTracking {
        print("NOT SUPPORTED")
    } else {
        config.userFaceTrackingEnabled = true
    }
    sceneView.session.run(config)
}

请注意,这两个属性都在 iOS 13+ 上可用。

var userFaceTrackingEnabled: Bool { get set }

var isWorldTrackingEnabled: Bool { get set }

附注

目前(2024年3月15日),

.userFaceTrackingEnabled = true
仍然不起作用。苹果在配置并启动会话部分正式报告了这一点(阅读代码注释):

2020 iPads do not support user face-tracking while world tracking.

© www.soinside.com 2019 - 2024. All rights reserved.