作者:D | 来源:互联网 | 2023-01-13 14:08
我正在研究一种基于AR的解决方案,其中使用SceneKit和ARKit渲染了一些3D模型。我还集成了CoreML以识别对象并在场景中渲染相应的3D对象。
但是现在,我一检测到对象就将其呈现在屏幕中央(仅适用于我拥有的对象列表)。是否可以获取现实世界对象的位置,以便可以在对象上方显示一些叠加层?
也就是说,如果我扫描了水瓶,则应该能够找到水瓶的位置。它可能在水瓶中的任何地方,但不应放在水瓶外面。使用SceneKit是否可能?
1> rickster..:
从理论上讲,您所要求的所有部分都是可能的,但是a)几个部分,没有集成的API可以为您做事,b)您可能会提出自己想像的难题。
大概您与Core ML集成所拥有的就是图像分类器,因为这就是大多数容易找到的ML模型所做的。图像分类回答了一个问题:“这是什么图片?”
您要查找的内容至少涉及另外两个问题:
“鉴于此图像已被分类为包含(某些特定对象),该对象在2D图像中的何处?”
“给出被检测物体在2D视频图像中的位置,在ARKit跟踪的3D空间中它在哪里?”
问题1非常合理。在ML社区中,有些模型可以进行分类和检测(图像中的位置/边界)。也许最著名的是YOLO- 这是一篇有关将其与Core ML一起使用的博客文章。
问题2是“研究团队和五年”部分。您会在YOLO论文中注意到,它只为检测到的对象提供粗略的边界框-也就是说,它在2D图像空间中工作,而不在进行3D场景重建。
要真正知道对象的形状,甚至是3D边界框,都意味着将对象检测与场景重建集成在一起。例如,如果某个对象在2D图像中具有一定的高度,那么您是在看一个3D对象,该对象高大且占用空间小,又或者长而低的3D对象会缩回远处?这种集成将需要拆散ARKit的内部工作,而Apple以外的人都做不到,或者从头开始创建类似ARKit的工作。
但是,您可能需要做出一些假设,才能从2D边界框获得非常粗略的3D形状估计。例如,如果您在框的下角进行AR命中测试,并发现它们在水平面上,则可以猜测框的2D高度与对象的3D高度成正比,平面上的足迹与盒子的宽度成比例。您必须进行一些研究和测试,看看这种假设是否成立,尤其是在您的应用涵盖的任何用例中。