是否可以使用 CoreML 和 ARKit 获得世界对象的"SCNVector3"位置?



我正在开发一个基于AR的解决方案,在该解决方案中,我使用SceneKit和ARKit渲染一些3D模型。我还集成了CoreML来识别对象并在场景中渲染相应的3D对象。

但现在我只是在检测到对象后立即在屏幕中心渲染它(仅适用于我所拥有的对象列表)。有可能得到真实世界物体的位置,这样我就可以在物体上方显示一些覆盖物吗?

也就是说,如果我对水瓶进行了扫描,我应该能够得到水瓶的位置。它可以放在水瓶里的任何地方,但不应该放在水瓶外面。这可能使用SceneKit吗?

理论上,你所问的所有部分都是可能的,但a)对于几个部分,没有集成的API为你做事情,b)你可能正在为一个比你想象的更困难的问题注册。

您的Core ML集成可能有一个图像分类器,因为这是大多数易于找到的ML模型所做的。图像分类回答了一个问题:"这是什么图片?">

你要找的至少涉及两个额外的问题:

  1. "假设此图像已被分类为包含(某个特定对象),则该对象在2D图像中的何处?">
  2. "给定2D视频图像中检测到的对象的位置,ARKit跟踪的3D空间中它在哪里?">

问题1非常合理。在ML社区中,存在同时进行分类和检测(图像内的位置/边界)的模型。可能最著名的是YOLO——这里有一篇关于将其与Core ML一起使用的博客文章。

问题2是"研究团队和五年"部分。你会在YOLO的论文中注意到,它只为检测到的对象提供粗略的边界框——也就是说,它在2D图像空间中工作,而不是进行3D场景重建。

要真正了解对象的形状,甚至3D边界框,就意味着将对象检测与场景重建相结合。例如,如果一个物体在2D图像中有一定的高度,你看到的是一个占地面积小的高3D物体,还是一个又长又低的物体,向后退?这样的集成需要拆开ARKit的内部工作,这是苹果以外的任何人都无法做到的,或者从头开始重新创建类似的ARKit。

不过,为了从二维边界框中获得对三维形状的粗略估计,可能会做出一些假设。例如,如果在长方体的下角进行AR命中测试,发现它们位于水平面上,则可以猜测长方体的二维高度与对象的三维高度成比例,并且它在平面上的足迹与长方体的宽度成比例。你必须做一些研究和测试,看看这样的假设是否成立,尤其是在你的应用程序涵盖的任何用例中。

最新更新