难以从 iPhone X 上的 2D 区域获取面部标志点的深度(SceneKit/ARKit 应用程序)

2024-03-14

我正在使用 iPhone X 上的前置摄像头运行面部标志检测,并且正在努力获取面部标志的 3D 点(VNFaceLandmarkRegion2D 仅提供图像坐标 X、Y)。

我一直在尝试使用ARSCNView.hitTest or ARFrame.hitTest,但到目前为止我还没有成功。我认为我的错误可能在于将初始地标点转换为正确的坐标系。我已经尝试了很多排列,但目前根据我的研究,这是我想出的:

let point = CGPoint(x: landmarkPt.x * faceBounds.width + faceBounds.origin.x, y: (1.0 - landmarkPt.y) * faceBounds.height + faceBounds.origin.y)
let screenPoint = CGPoint(point.x * view.bounds.width, point.y * view.bounds.height)
frame.hitTest(screenPoint, types: ARHitTestResult.ResultType.featurePoint)

我也尝试过这样做

let newPoint = CGPoint(x: point.x, y: 1.0 - point.y) 

转换后,但似乎没有任何效果。我的frame.hitTest结果始终为空。我在转换过程中遗漏了什么吗?

前置摄像头是否又增加了一个层次? (我还尝试在某一点反转初始 X 值,以防坐标系被镜像)。在我看来,最初的里程碑normalizedPoints有时是负数,有时也大于 1.0,这对我来说没有任何意义。我在用着ARSession.currentFrame?.capturedImage捕捉前置摄像头的画面(如果这很重要)。

任何帮助将非常非常感谢,非常感谢!

- 解决了 -

对于任何有类似问题的人: 我终于得到了命中测试结果!

for point in observation.landmarks?.allPoints?.pointsInImage(imageSize: sceneView.bounds.size) {
    let result = ARSCNView.hitTest(point, options: [ARSCNHitTestOption.rootNode: faceNode)
}

我使用面几何体作为附加到面节点的遮挡节点。

谢谢里克斯特!


你正在使用ARFaceTrackingConfiguration, 正确的?在这种情况下,featurePoint命中测试类型对您没有帮助,因为特征点是世界跟踪的一部分,而不是面部跟踪......事实上,几乎所有ARKit命中测试机制特定于世界跟踪,对面部跟踪没有用处。

你可以做的是利用面部网格(ARFaceGeometry)和面部姿势跟踪(ARFaceAnchor)从 2D 图像点到 3D 世界空间(或相机空间)点。为此,您至少可以走几条路:

  1. 如果您已经在使用 SceneKit,则可以使用SceneKit的命中测试而不是 ARKit 的。 (也就是说,您针对 SceneKit 中建模的“虚拟”几何体进行命中测试,而不是针对 ARKit 建模的真实世界环境的稀疏估计进行测试。在这种情况下,面部网格的“虚拟”几何体通过以下方式进入 SceneKit ARKit。)也就是说,你想要ARSCNView.hitTest(_:options:) https://developer.apple.com/documentation/scenekit/scnscenerenderer/1522929-hittest(继承自SCNSceneRenderer), not hitTest(_:types:)。当然,这意味着您需要使用ARSCNFaceGeometry可视化场景中的面部网格,以及ARSCNView的节点/锚点映射以使其跟踪面部姿势(尽管如果您希望视频图像显示出来,您可以使网格透明) - 否则 SceneKit 命中测试将无法找到任何 SceneKit 几何体。

  2. 如果您不使用 SceneKit,或者由于某种原因无法将面部网格放入场景中,则您拥有针对面部网格重建命中测试所需的所有信息。ARCamera具有视图和投影矩阵,可以告诉您 2D 屏幕投影与 3D 世界空间的关系,ARFaceAnchor告诉你脸部在世界空间中的位置,并且ARFaceGeometry告诉你每个点在脸上的位置 - 所以它只是一个一堆数学 https://gamedev.stackexchange.com/search?q=3d%20hit%20test从屏幕点到面网格点,反之亦然。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

难以从 iPhone X 上的 2D 区域获取面部标志点的深度(SceneKit/ARKit 应用程序) 的相关文章

随机推荐

  • boost::计算流压缩

    如何使用 boost compute 进行流压缩 例如 如果您只想对数组中的某些元素执行繁重的操作 首先 生成掩码数组 其中包含与要执行操作的元素相对应的元素 mask 0 0 0 1 1 0 1 0 1 然后对掩码数组进行排它扫描 前缀和
  • Unity 从脚本创建 UI 控件

    我通过代码创建了一个切换 但它不会显示 此外 我无法更改文本字段的位置 我尝试了很多 但没有任何效果 这是我当前的版本 也许你看到了错误 我是 Unity 的新手 这非常困难 public class Game MonoBehaviour
  • Posix 线程问题

    我试图通过示例来理解 pthreads 我编写了以下代码 每次运行时都会给出不同的答案 有人可以解释一下这个错误吗 TIA 斯维亚 代码在这里 include
  • 如何从现有的 Azure 服务主体获取客户端密钥

    我已经创建了启用 RBAC 的服务主体 https learn microsoft com en us cli azure ad sp view azure cli latest在 Azure 中使用环境变量在我的操作系统中配置 Key V
  • 当我单击可扩展子元素时,如何获取 EditBox 和 RadioButton 的每个值?

    我有一个可扩展的 ListView 其中每个父视图都有一个子视图 在子视图中 我有一个子子元素 EditText TextView 和 RadioButton 子元素在单选按钮上单击时具有不同的值 并且在输入后编辑文本值 类别活动 java
  • ACCESS/SQL:如何同时插入/更新?

    这是我的情况 首先 我不是在关系数据库上工作 我只是使用访问作为操作数据的简单方法 目前 我有很多桌子 一个主表 我们称之为 MAIN 还有大约 10 个其他表 我们可以称之为 X1 X2 X3 等 X1 表包含具有 X1 属性的项目 X2
  • 在.NET v4.0中解析MP3文件

    如何解析 MP3 文件以获取其所有属性 另外如何编辑MP3文件的属性 NET v4 0 中有可用的类吗 这些属性称为 ID3 标签 我认为 NET 框架不负责提供对它们的阅读 这是来自 SourceForge 的一些代码 http sour
  • 在 MacOS X 上的 GHCi 中工作的 Haskell 图形库

    是否存在满足以下要求的 Haskell 图形库或绑定到外部库 可以使用从ghci 即我不必链接并重新启动程序 适用于 MacOS X 与 1 结合使用很棘手 可以制作简单的矢量图形 线条 多边形 简单的填充和描边 可以将位图图像放在屏幕上
  • 在lisp中,如何使用floor函数返回的第二个值?

    当我这样做时 4楼3 我得到了 1 1 3 但我该如何使用这 1 3 呢 例如 您可以使用将其绑定到变量multiple value bind multiple value bind quot rem floor 4 3 format t
  • 移动 Safari 与主屏幕 Web 应用程序

    我正在为 iOS 开发一个 web 应用程序 我注意到在移动 safari 上运行和从主屏幕运行之间存在一些奇怪的事情 是否有任何资源可以提供在模式之间切换的通用接口 如果没有 是否有任何资源详细说明这两种模式之间的所有差异和陷阱 我遇到过
  • 将数据从节点传递到jade?

    问题是我渲染视图并发送一些数据 console log products shows an array res render seller sell shop id req user shop id products products 我将
  • Spring Data Rest - 如何从页面中删除元素?

    我的项目中有以下 REST 控制器方法 RequestMapping method GET value applications produces MediaType APPLICATION JSON VALUE public Respon
  • GitHub Probot:错误 probot:签名与事件负载和秘密不匹配

    我正在尝试使用构建 GitHub 应用程序机器人框架 https probot github io 这是文件的内容index js module exports robot gt robot log Yay the app was load
  • docker-compose restart 连接池已满

    我和我的团队正在使用 docker compose 将我们的一些基础设施转换为 docker 一切似乎都工作得很好 我遇到的唯一问题是重新启动它给我一个连接池已满错误 我正在尝试找出造成这种情况的原因 如果我删除 2 个容器或 1 个完整设
  • 如何强制 Ruby 尊重 Net::HTTP 标头中的下划线

    我如何强制 Ruby 尊重 a 中的下划线Net HTTP header uri URI parse url headers api key my private key request Net HTTP Post new uri head
  • 删除node.js中的几个文件

    删除node js中的多个文件的最佳方法是什么 function deleteFiles files callback var files file1 js file2 jpg file3 css deleteFiles files cal
  • 如何在 M1 mac 上安装自制软件

    我刚买了一台新 Mac M1 Macbook pro 我正在尝试安装自制程序 但每次我完成安装时 它都会告诉我它没有写入路径 然后当我尝试建议的任何内容添加到路径 什么也没有发生 终端或其他任何东西根本无法识别该命令 就好像它没有安装一样
  • 在 VBE 中无法查看 Excel 工作表

    我正在使用其他人创建的 Excel 文件 一张包含宏的工作表似乎受密码保护 但我不明白的是我无法在工作表列表下的 VBE 中看到它 工作表选项卡在 Excel 中可见 但我看不到内容 有没有办法在VBE中取消隐藏它 一张包含宏的工作表 这是
  • Rails:Watir 中的代理身份验证(Chrome 驱动程序)

    我尝试添加代理身份验证chrome在 watir 上运行的 webdriver 如下所示 require watir proxies proxy server 185 264 167 184 63109 proxy auth usernam
  • 难以从 iPhone X 上的 2D 区域获取面部标志点的深度(SceneKit/ARKit 应用程序)

    我正在使用 iPhone X 上的前置摄像头运行面部标志检测 并且正在努力获取面部标志的 3D 点 VNFaceLandmarkRegion2D 仅提供图像坐标 X Y 我一直在尝试使用ARSCNView hitTest or ARFram