ARkit和CoreML

时间:2017-07-07 17:18:43

标签: computer-vision arkit coreml

虽然我一直在研究最佳实践并为正在进行的项目(即Vuforia中的Unity3D iOS项目进行原生集成,使用AVFoundation提取帧然后通过基于云的图像识别传递图像)试验多个选项,但我来到了结论我想使用ARkit,Vision Framework和CoreML;让我解释一下。

我想知道如何捕获ARFrame,使用Vision Framework使用CoreML模型检测和跟踪给定对象。

此外,一旦识别出对象并且能够在手势触摸时添加AR对象,就可以拥有一个边界框,但这可以在获得实体项目后实现。

这无疑是可能的,但我不确定如何通过Vision将ARFrame传递给CoreML进行处理。

有什么想法吗?

1 个答案:

答案 0 :(得分:47)

更新:Apple现在有sample code project执行其中一些步骤。继续阅读那些你仍需要弄清楚自己的人......

几乎所有的作品都是为了你想做的......你大多只需要将它们组合在一起。

您可以通过定期轮询其ARFrameARSession或将其推送到您的会话代表来获取currentFrame。 (如果您正在构建自己的渲染器,那就是ARSessionDelegate;如果您正在使用ARSCNViewARSKView,则他们的委托回调会引用该视图,所以你可以从那里回到会话,以获得导致回调的currentFrame。)

ARFrameCVPixelBuffer的形式提供当前capturedImage

您可以使用VisionVNImageRequestHandler类将图像传递到VNSequenceRequestHandler进行处理,这两个类都有将CVPixelBuffer作为输入图像进行处理的方法。

您可以找到将图像传递到附加到WWDC17 session on Vision的Vision + Core ML的通用代码,如果您观看该会话,则实时演示还包括将CVPixelBuffer传递给Vision。 (他们在该演示中从AVCapture获取像素缓冲区,但如果您从ARKit获取缓冲区,则Vision部分是相同的。)

您可能遇到的一个问题是识别/定位对象。大多数"对象识别"人们使用Core ML + Vision的模型(包括那些Apple在其ML developer page上提供预转换版本的模型)是场景分类器。也就是说,他们看一张图片然后说,"这是(thing)的图片,"不是像"这张照片中有一个(thing),位于(边界框)"。

Vision为处理分类器提供了简单的API - 您的请求结果数组中填充了VNClassificationObservation个对象,告诉您场景是什么(或者"可能是",与信心评级)。

如果你找到或训练一个既能识别和定位物体的模型 - 又对于那部分,我必须强调,球在你的球场 - 使用Vision会导致{{3对象。这些类似于任意键值对,因此您从这些键中确定对象的确切方式取决于您如何构建和标记模型的输出。

如果你正在处理Vision已经知道如何识别的东西,而不是使用你自己的模型 - 像面部和QR码这样的东西 - 你可以用Vision'来获取图像框架中的那些位置。 s API。

如果在2D图像中找到对象后,您希望在AR中显示与其关联的3D内容(或显示2D内容,但所述内容使用ARKit以3D形式定位),则您需要{{ 3}}那些2D图像指向3D世界。

一旦你完成这一步骤,将AR内容与点击测试放在一起已经很好地涵盖在其他地方,VNCoreMLFeatureValueObservationhit test