【问题标题】:ARKit 2.0 – "lookAtPoint" property always gets zerosARKit 2.0——“lookAtPoint”属性总是为零
【发布时间】:2019-01-30 10:15:30
【问题描述】:

我在 iOS 12 (16A5288q) 下使用 ARKit 2,使用 Xcode 10 beta 6 构建,在 iPhone X 上运行,lookAtPoint总是为零。

我通过以下方式访问面部数据(在 Swift 中):

func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
    guard let faceAnchor = anchor as? ARFaceAnchor else { return }

    FaceAnchorsProcessedCount = FaceAnchorsProcessedCount + 1
    let rightEyeTransform: simd_float4x4 = faceAnchor.rightEyeTransform
    let leftEyeTransform:  simd_float4x4 = faceAnchor.leftEyeTransform
    let lookAtPoint:       simd_float3   = faceAnchor.lookAtPoint
}

我得到如下数据:

rightEyeTransform    simd_float4x4    \n[ [9.999874e-01, 0.000000e+00, 5.010252e-03, -3.208227e-02],\n  [2.375229e-04, 9.988756e-01, -4.740678e-02, 2.703529e-02],\n  [-5.004618e-03, 4.740737e-02, 9.988630e-01, 2.525132e-02],\n  [0.000000e+00, 0.000000e+00, 0.000000e+00, 1.000000e+00] ]\n    
leftEyeTransform     simd_float4x4    \n[ [9.978353e-01, 0.000000e+00, -6.576237e-02, 3.208223e-02],\n  [-3.110934e-03, 9.988804e-01, -4.720329e-02, 2.703534e-02],\n  [6.568874e-02, 4.730569e-02, 9.967182e-01, 2.525137e-02],\n  [0.000000e+00, 0.000000e+00, 0.000000e+00, 1.000000e+00] ]\n    
lookAtPoint          simd_float3      (0.000000e+00, 0.000000e+00, 0.000000e+00)    

我做错了什么?或者这是一个已知的错误?

2018 年 10 月 4 日更新 我今天对lookAtPoint 做了一个简单的测试。我把脸靠近听筒,然后再远离,又靠近;反复。 lookAtPoint 的 最小值 z 为 38.59 英寸,最大值 为 39.17 英寸(从米换算)。

使用卷尺测量的实际距离分别为 ~4.5 英寸和 ~33 英寸。

Apple 声明lookAtPoint 将“[...] 估计用户的眼睛所关注的点,相对于面部。”似乎不正确。

【问题讨论】:

    标签: swift xcode augmented-reality arkit ios12


    【解决方案1】:

    是的,我在一个月前尝试过,我可以说你是绝对正确的 - 目前 lookAtPoint 实例属性不起作用甚至被淘汰。现在它总是返回float3(0.0, 0.0, 0.0)

    我猜苹果还没有实现它(它处于测试状态)。 Cross eyes' detection 是 ARKit 的一项功能,我们似乎会在 iOS 12 最终稳定版本中看到。

    目前我没有 Mac 也无法检查它,因此请尝试将 open class 与这些开放实例属性一起使用:

    open class ARFaceAnchor: ARTrackable {
        open var leftEyeTransform: simd_float4x4 { get } 
        open var rightEyeTransform: simd_float4x4 { get } 
        open var lookAtPoint: simd_float3 { get }
    }
    

    希望对你有帮助!

    【讨论】:

    • 这里似乎有一个 lookAtPoint 的示例:stackoverflow.com/questions/51531578/…> 但是,我从 Apple Developer 下载了相同的示例代码,添加了在线打印,并再次得到零,因为看点。是不是之前工作过,然后就停止了?
    • 谢谢,@andy,但对我来说,作为一个 Swift 初学者(我更喜欢 C 和 Java),这在代码 sn-p 中有点晦涩;我不太清楚如何在我正在探索的上下文中使用它。 :-(
    • 我今天做了一个简单的lookAtPoint测试。我把脸靠近听筒,然后再远离,又靠近;反复。 lookAtPoint 的最小值 z 为 38.59 英寸,最大值 为 39.17 英寸(从米换算)。
    • 结果如何?
    • 我今天对lookAtPoint做了一个简单的测试。我把脸靠近听筒,然后再远离,又靠近;反复。 lookAtPoint 的 最小 z 为 38.59 英寸,最大 为 39.17 英寸(从米换算)。用卷尺测量的实际距离分别为~4.5 英寸和~33 英寸。 Apple 声明lookAtPoint 将“[...] 估计用户的眼睛所关注的点,相对于面部。”似乎不正确。
    【解决方案2】:

    今天发布了 iOS 12 以及 XCode 10(取代了 beta 版本)。我测试了使用这些新版本访问lookAtPoint,现在得到填充向量。

    Swift 代码:

    func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
        guard let faceAnchor = anchor as? ARFaceAnchor else { return }
    
        let lookAtPoint: simd_float3 = faceAnchor.lookAtPoint
        os_log("lookAtPoint: %.12f,%.12f,%.12f", type: .debug, lookAtPoint.x, lookAtPoint.y, lookAtPoint.z)
    

    日志输出:

    2018-09-17 16:17:12.097369-0700 EyeSync[512:41060] lookAtPoint: 0.049317009747,-0.004630976822,0.981833696365
    2018-09-17 16:17:12.113925-0700 EyeSync[512:41060] lookAtPoint: 0.050239805132,-0.006484962534,0.981752157211
    2018-09-17 16:17:12.130867-0700 EyeSync[512:41060] lookAtPoint: 0.051697697490,-0.011350239627,0.981206715107
    2018-09-17 16:17:12.147272-0700 EyeSync[512:41060] lookAtPoint: 0.052744854242,-0.012763299979,0.981896817684
    2018-09-17 16:17:12.163683-0700 EyeSync[512:41060] lookAtPoint: 0.054889015853,-0.015469233505,0.982917487621
    2018-09-17 16:17:12.180636-0700 EyeSync[512:41060] lookAtPoint: 0.056391790509,-0.017265520990,0.983718335629
    2018-09-17 16:17:12.197387-0700 EyeSync[512:41060] lookAtPoint: 0.059109147638,-0.018527992070,0.983208477497
    2018-09-17 16:17:12.214021-0700 EyeSync[512:41060] lookAtPoint: 0.061453290284,-0.019032688811,0.981536626816
    2018-09-17 16:17:12.230689-0700 EyeSync[512:41060] lookAtPoint: 0.063107110560,-0.019657038152,0.978309571743
    

    【讨论】:

      猜你喜欢
      • 2019-07-30
      • 2019-03-22
      • 2020-10-04
      • 2012-01-30
      • 2019-02-25
      • 2014-11-15
      • 2019-09-25
      • 2017-05-14
      • 1970-01-01
      相关资源
      最近更新 更多