【问题标题】:Can ARKit detect specific surfaces as planes?ARKit 可以将特定表面检测为平面吗?
【发布时间】:2023-10-22 23:39:01
【问题描述】:

使用 iOS 11 和 iOS 12 以及 ARKit,我们目前能够检测水平表面上的平面,并且我们还可以在表面上可视化该平面。

我想知道我们是否可以通过某种图像文件声明我们想要检测平面的特定表面? (可能会忽略 ARKit 从其他表面检测到的所有其他平面)

如果这不可能,那么我们是否可以捕获检测到的平面(通过图像),然后我们可以通过识别该特定表面的CoreML 模型对其进行处理?

【问题讨论】:

标签: ios swift augmented-reality arkit coreml


【解决方案1】:

ARKit 目前不支持这种东西。您确实可以将检测到的平面捕获为图像,如果您能够通过核心 ML 进行实时匹配,我相信很多人都会感兴趣!

你应该:

  • 获取平面角的 3D 位置
  • 使用sceneView.projectPoint在框架中找到它们的二维位置
  • currentFrame.capturedImage 中提取帧
  • 对图像进行仿射变换,使其与您的平面一起被重新投影到一个矩形中
  • 进行一些 ML/图像处理以检测匹配项

请记住,ARKit 矩形检测通常不能很好地对齐,并且只能具有整个平面的一部分。

最后,不幸的是,ARKit 公开的特征点没有用,因为它们不包含任何用于跨帧匹配特征点的特征,Apple 也没有说明他们使用什么算法来计算特征点。

【讨论】:

  • 我认为苹果有一个带有二维码提取的演示应用程序,其中执行仿射变换形成二维角,但我不记得我在哪里看到它。
  • @Guig sceneView.projectPoint 用于平面上的节点位置,为投影视图坐标提供不规则形状。有什么帮助吗?
【解决方案2】:

这里是查找水平表面的小演示代码。在#Swift5 Github

【讨论】: