nar*_*ner 5 augmented-reality swift arkit
我有一个ARSessionusing aARWorldTrackingConfiguration作为其配置的一部分。我还通过以下方式启用了面部跟踪:
configuration.userFaceTrackingEnabled = true
Run Code Online (Sandbox Code Playgroud)
在func session(_ session: ARSession, didUpdate frame: ARFrame)委托方法中,我可以成功地frame.capturedImage从面向世界的摄像头获取 ,但似乎没有办法从面向世界的摄像头访问框架。
我在这个假设中正确吗?
如果是这样,当同时使用面部和世界跟踪时,是否有其他方法可以访问两个摄像头的帧?
通常,一个 ARSession 一次只能运行一个 ARConfiguration。但有一个例外:我们可以Face在World跟踪配置中使用跟踪配置。但是,ARWorldTrackingConfiguration在这种情况下是“主要Face”配置(因此跟踪是“补充”配置)。
两个摄像头(后置和前置)每秒产生 60 个 ARFrame,包含 RGB、深度、anchors轴、特征点等。每个摄像头都有自己的 ARFrame,可用于定义内部和外部 ARCamera 参数(如 3x3 摄像机矩阵)或 4x4 变换矩阵)。
@NSCopying var currentFrame: ARFrame? { get }
Run Code Online (Sandbox Code Playgroud)
但是,在 ARKit 4.0 中,如果您使用激活的实例属性运行 World tracking config userFaceTrackingEnabled,您只能访问来自后置摄像头的 ARFrames——目前无法访问来自前置摄像头的同步 ARFrames。
let config = ARWorldTrackingConfiguration()
if ARWorldTrackingConfiguration.supportsUserFaceTracking {
config.userFaceTrackingEnabled = true
}
sceneView.session.run(config, options: [])
let currentFrame = sceneView.session.currentFrame
let rearCameraTransform = currentFrame?.camera.transform
let rearCameraAnchors = currentFrame?.anchors
print(rearCameraTransform?.columns.3 as Any)
print(rearCameraAnchors as Any)
Run Code Online (Sandbox Code Playgroud)
但是,当然,您可以ARFaceAnchors在 World 跟踪环境中控制所有内容。
在 ARKit 4.0 中,您可以ARFaceTrackingConfiguration在以下设备上使用config:
|--------------------|-------------------|-----------------|--------------|
| "TrueDepth sensor" | "iOS version" | "CPU" | "Depth data" |
|--------------------|-------------------|-----------------|--------------|
| YES | iOS11.....iOS14 | A11, A12, A13 | YES |
|--------------------|-------------------|-----------------|--------------|
| no | iOS13, iOS14 | A12, A13 | no |
|--------------------|-------------------|-----------------|--------------|
Run Code Online (Sandbox Code Playgroud)
因此,作为开发者,您需要检查当前设备是否支持人脸追踪配置:
import ARKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if !ARFaceTrackingConfiguration.isSupported {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "unsupportedDeviceMessage")
}
return true
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |