首页 文章

是否可以使用CoreML和ARKit获取World对象的“SCNVector3”位置?

提问于
浏览
0

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

但是现在我只是在检测到对象时将其呈现在屏幕的中心(仅用于我拥有的对象列表) . 是否有可能获得现实世界对象的位置,以便我可以在对象上方显示一些叠加?

那就是如果我有一个水瓶装扫描,我应该能够得到水瓶的位置 . 它可能在水瓶中的任何地方,但不应该超出它 . 这可以使用SceneKit吗?

1 回答

  • 4

    你问的所有部分理论上都是可能的,但是a)对于几个部分,没有集成的API可以为你做事,而b)你可能正在签署自己的more difficult problem than you think .

    您可能与Core ML集成的内容是图像分类器,因为大多数易于查找的ML模型都是如此 . 图像分类回答了一个问题:“这是什么图片?”

    你要找的是至少还有两个问题:

    • “鉴于此图像已被归类为包含(某些特定对象),2D图像中的哪个是该对象?”

    • “考虑到2D视频图像中检测到的物体的位置,它在ARKit跟踪的3D空间中的哪个位置?”

    问题1非常合理 . 有些模型可以在ML社区中进行分类和检测(图像中的位置/边界) . 可能最着名的是YOLO - here’s a blog post about using it with Core ML .

    问题2是“研究小组和五年”的一部分 . 您会在YOLO论文中注意到它只为检测到的对象提供粗略的边界框 - 也就是说,它在2D图像空间中工作,而不是进行3D场景重建 .

    要真正了解对象的形状,甚至3D边界框,都意味着将对象检测与场景重建相结合 . 例如,如果一个物体在2D图像中有一些高度,你是在看一个身高较小的3D物体,还是一个长而低的物体,后退到这个距离?这样的整合需要拆除ARKit的内部工作方式,苹果公司之外没有人可以做到这一点,或者从头开始重新创建类似ARKit的工具 .

    但是,您可以做一些假设,以便从2D边界框中获得非常粗略的3D形状估计 . 例如,如果您在框的下角进行AR命中测试并发现它们位于水平平面上,您可以猜测框的2D高度与对象的3D高度成正比,并且平面上的足迹与盒子的宽度成正比 . 你必须做一些研究和测试,看看这样的假设是否会成功,特别是在你的应用程序涵盖的任何用例中 .

相关问题