ARKit可以检测特定表面作为平面吗?

7

通过使用iOS 11和iOS 12以及ARKit技术,我们目前可以在水平面上检测平面,并且我们也可以在表面上可视化该平面。

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

如果不可能实现以上功能,那么我们是否可以通过捕获检测到的平面(通过图像),然后通过一个CoreML模型处理识别出该特定表面?


为了分析场景中检测到的结果,似乎我们得到了一个“ARHitTestResult”对象列表。但我不知道怎样从中提取图像。https://developer.apple.com/documentation/arkit/arhittestresult - Michael Ramos
2个回答

2
ARKit目前不支持此功能。您确实可以将检测到的平面捕捉为图像,如果您能够通过核心ML实时匹配这些图像,我相信很多人会感兴趣!
您需要:
- 获取平面角落的3D位置 - 使用“sceneView.projectPoint”在帧中找到它们的2D位置 - 从“currentFrame.capturedImage”中提取帧 - 对图像进行仿射变换,以得到重投影到矩形上的平面 - 进行一些ML/图像处理来检测匹配
请记住,ARKit矩形检测通常不对齐,并且可能只有部分平面。
最后,不幸的是,ARKit公开的特征点并不有用,因为它们不包含用于匹配跨帧特征点的任何特征,并且苹果也没有说明他们用于计算特征点的算法。

我认为苹果公司有一个演示应用程序,其中包含QR码提取功能,他们会对2D角落进行仿射变换,但我不记得在哪里看到过。 - Guig
@Guig,使用sceneView.projectPoint将节点位置投影到平面上时,生成的视图坐标形状不规则。有什么帮助吗? - Roshan Bade

-1

这里是一个查找水平面的小演示代码。使用 #Swift5 Github


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接