Computer vision 基于ARkit和CoreML的视觉框架

Computer vision 基于ARkit和CoreML的视觉框架,computer-vision,arkit,coreml,Computer Vision,Arkit,Coreml,我一直在为正在进行的项目(即Vuforia中的Unity3D iOS项目,采用本机集成,使用AVFoundation提取帧,然后通过基于云的图像识别传递图像)研究最佳实践并尝试多种选项,但我得出的结论是,我想使用ARkit、Vision Framework、,和CoreML;让我解释一下 我想知道我将如何能够捕获ARFrames,使用Vision框架来检测和跟踪使用CoreML模型的给定对象 此外,一旦对象被识别并能够在手势触摸时添加AR对象,就有一个边界框是很好的,但这是在完成实体项目后可以实

我一直在为正在进行的项目(即Vuforia中的Unity3D iOS项目,采用本机集成,使用AVFoundation提取帧,然后通过基于云的图像识别传递图像)研究最佳实践并尝试多种选项,但我得出的结论是,我想使用ARkit、Vision Framework、,和CoreML;让我解释一下

我想知道我将如何能够捕获ARFrames,使用Vision框架来检测和跟踪使用CoreML模型的给定对象

此外,一旦对象被识别并能够在手势触摸时添加AR对象,就有一个边界框是很好的,但这是在完成实体项目后可以实现的

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


有什么想法吗?

更新:苹果现在有了一个可以完成这些步骤的软件。继续阅读那些你仍然需要了解自己的人

几乎所有的部分都是为了你想做的。。。你只需要把它们放在一起


您可以通过定期轮询会话的
ARSession
或将其推送到您的会话代理来获取。(如果您正在构建自己的渲染器,也就是说,如果您正在使用
ARSCNView
ARSKView
,则它们的委托回调会引用视图,因此您可以从那里返回到会话,以获取导致回调的
currentFrame
。)

ARFrame
CVPixelBuffer
的形式提供电流

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

  • 如果要执行使用单个类似图像的查找或或的请求,请使用图像请求处理程序
  • 您可以使用序列请求处理程序执行涉及分析多个图像之间的更改的请求,如
您可以找到将图像传递到连接到的Vision+Core ML的常规代码,如果您观看该会话,则现场演示还包括将
CVPixelBuffer
s传递到Vision。(在那个演示中,他们从AVCapture获得像素缓冲区,但如果你从ARKit获得缓冲区,视觉部分是相同的。)


您可能遇到的一个关键点是识别/定位对象。人们在Core ML+Vision中使用的大多数“对象识别”模型(包括苹果公司提供的预转换版本)都是场景分类器。也就是说,他们看着一个图像说,“这是一个(事物)的图片”,而不是像“这张图片中有一个(事物),位于(边界框)”

Vision为处理分类器提供了简单的API—您的请求的结果数组中填充了对象,这些对象告诉您场景是什么(或者“可能是”,具有置信度)

如果你找到或训练一个既能识别又能定位物体的模型——我必须强调,对于这一部分,球在你的场地上——使用视觉将产生物体。这些有点像任意的键值对,因此如何从这些键值对中识别对象取决于如何构造和标记模型的输出

如果你处理的是Vision已经知道如何识别的东西,而不是使用你自己的模型(比如人脸和QR码),你可以通过Vision的API获得这些东西在图像框中的位置


如果在二维图像中定位对象后,希望在AR中显示与其关联的三维内容(或显示二维内容,但使用ARKit将所述内容定位在三维中),则需要针对三维世界显示这些二维图像点


一旦进入这一步,在点击测试中放置AR内容已经在其他地方做了很好的介绍,包括和。

从基础开始。哦,我明白你必须使用Xcode 9和iOS 11。现在,我所说的“基础”是指学习每一件作品的内容。Vision将是最高级别的—它可以跟踪并使用CoreML模型。但是你知道如何训练模特吗?如果没有,那么首先学习ML,然后学习如何将经过训练的模型导入CoreML。我不会提到ARKit(很抱歉,这对于我的利基来说太广泛了——你确定你的利基需要它吗?),但是如果你想直接提到CoreML,你需要了解什么是
CVPixelBuffer
。祝你好运谢谢你的回复;是的,我同时使用Xcode 9和iOS 11。我可以训练一个模型,因为这就是我真正开始编程的方式(python中的NLP),我可以将模型转换并插入Xcode。除此之外,我还可以使用预先培训过的模型暂时测试应用程序的功能。我很难理解使用CoreML模型提取ARframe并通过Vision传递它的方法。目前还没有任何深入的文档,我很好奇是否有人能提供一些见解@dfd@pythlang嗨,谢谢你发布这个问题。我的目标和你的一样。“你达到你在这里要求的了吗?”@jegadeesh是的,事实上我做到了!下面的答案加上更多的独立研究、尝试和错误以及长时间的工作证明是值得的。太棒了!干得好,伙计。@Pythlang虽然我知道一些信息,但以一种连贯的方式将其组合在一起绝对令人耳目一新,所以。。。哇,非常感谢您如此详细的回复。我喜欢这样的答案,因为虽然每个人都喜欢细节和演练,但您提供的指南会让我在一段时间内忙于研究和实施。再次感谢@rickster