我正在研究基于AR的解决方案,其中我使用SceneKit和ARKit渲染一些3D模型。我还集成了CoreML来识别对象并在场景中渲染相应的3D对象。
但是现在我只是在检测到对象时将其呈现在屏幕的中心(仅限于我拥有的对象列表)。是否有可能获得真实世界物体的位置,以便我可以在物体上方显示一些叠加?
如果我有一个水瓶装扫描,我应该能够获得水瓶的位置。它可能在水瓶中的任何地方,但不应该在它外面。这可以使用SceneKit吗?
答案 0 :(得分:4)
你问的所有部分理论上都是可能的,但是a)对于几个部分,没有集成的API可以为你做事,而b)你可能正在为自己签名{ {3}}。
你可能在Core ML集成中拥有的是一个图像分类器,因为这是大多数易于找到的ML模型所做的。图像分类回答了一个问题:“这是什么图片?”
您正在寻找的内容至少涉及两个问题:
问题1非常合理。有些模型在ML社区中进行分类和检测(图像中的位置/边界)。可能最着名的是YOLO - more difficult problem than you think。
问题2是“研究小组和五年”的一部分。您会在YOLO论文中注意到它只为检测到的对象提供粗略的边界框 - 也就是说,它在2D图像空间中工作,而不是进行3D场景重建。
要真正了解对象的形状,甚至3D边界框,都意味着将对象检测与场景重建相结合。例如,如果一个物体在2D图像中有一定的高度,你是在看一个身高较小的3D物体,还是一个长而低的物体,后退到这个距离?这样的整合需要拆除ARKit的内部工作方式,苹果公司之外没有人可以做到这一点,或者从头开始重新创建类似ARKit的工具。
但是,您可以做一些假设,以便从2D边界框中获得非常粗略的3D形状估计。例如,如果您在框的下角进行AR命中测试并发现它们位于水平面上,您可以猜测框的2D高度与对象的3D高度成正比,并且平面上的足迹与盒子的宽度成正比。你必须做一些研究和测试,看看这样的假设是否会成功,特别是在你的应用程序涵盖的任何用例中。