2017-07-07 138 views
10

虽然我一直在研究的最佳实践和尝试多种选择一个正在进行的项目(即Unity3D iOS的项目Vuforia与本地集成,提取出与AVFoundation然后通过基于云的图像识别的图像帧) ,我得出的结论是我想使用ARkit,Vision Framework和CoreML;让我解释。视觉框架与ARkit和CoreML

我不知道我怎么会是能够捕捉ARFrames,使用视觉框架来检测和使用CoreML模型跟踪给定的对象。

此外,这将是很好有一个边框,一旦对象被识别一起在手势触摸添加一个AR对象的能力,但是这是有可能获得实实在在的项目下来后方可实施。

这无疑是可能的,但我不确定如何通过视觉的ARFrames到CoreML通过进行处理。

任何想法?

+0

从基础开始。哦,理解你**必须**使用Xcode 9和iOS 11.现在,通过“基础知识”,我的意思是了解每件* *和* *不是*。 Vision将成为最高级别 - 它可以跟踪和使用CoreML模型。但你知道吗?如何训练模型?如果不是,那么先学习ML,然后*然后*学习如何将训练好的模型导入到CoreML中。我不会解决ARKit问题(对不起,这对于我的利基来说太广泛了 - 你确定它需要你的?),但是如果你想直接解决CoreML,你需要了解CVPixelBuffer是什么。祝你好运! – dfd

+0

感谢您的回复;是的,我同时使用Xcode 9和iOS 11.我可以训练一个模型,因为这是我真正进入编程的开始(在Python中的NLP),我可以将模型转换并插入Xcode。除此之外,我还可以使用预先训练好的模型来暂时测试应用程序的功能。我无法理解使用CoreML模型提取ARframe并通过Vision传递它的方法。还没有真正的深层文件,并且很好奇,如果有人可以摆脱见解@dfd – pythlang

+0

不客气。现在,你有什么特定的问题?使用Vision跟踪对象的东西?将训练有素的模型导入CoreML?显示边界框? – dfd

回答

38

就在条关于大家都在为你想要做什么......你大多只是需要把它们放在一起。


您通过定期轮询ARSessioncurrentFrame或让他们推到您的会议代表获得ARFrame小号两种。 (如果您正在构建自己的渲染器,那是ARSessionDelegate;如果您使用的是ARSCNViewARSKView,则它们的代表回调将引用该视图,因此您可以从那里回到会话以获取导致回调的currentFrame

ARFrameCVPixelBuffer的形式提供当前的capturedImage

您传递图像以Vision用于使用任一VNImageRequestHandlerVNSequenceRequestHandler类,这两者具有采取CVPixelBuffer作为输入图像处理方法的处理。像发现rectanglesQR codesfaces,或using a Core ML model to identify the image -

你可以找到通过连接到WWDC17 session on Vision图像视觉+核心ML通用代码,如果你看这届会议的现场演示还包括通过CVPixelBuffer s到视力。 (他们得到像素缓冲区从AVCapture在该演示中,但如果你从ARKit得到缓冲的视觉部分是一样的。)


一个棘手的问题,你很可能有被识别/定位对象。 Core ML + Vision使用的大多数“物体识别”模型(包括那些在ML developer page上提供预转换版本的模型)都是场景分类器。也就是说,他们看的图像,并说,“这是一个(事)图片”,而不是像“在这张照片有一个(事),位于(边框)” 。

Vision为处理分类器提供了简单的API - 您的请求的结果数组填充了VNClassificationObservation对象,告诉你场景是什么(或“可能是”,并具有置信度等级)。

如果发现或火车,无论识别和定位对象的模型 - 和那一部分,我必须强调,球在你的场内 - 用视觉与它会导致VNCoreMLFeatureValueObservation对象。这些有点像任意的键值对,所以你如何从这些对象中识别出一个对象取决于你如何构建和标记模型中的输出。

如果您正在处理Vision已经知道如何识别的内容,而不是使用自己的模型(例如面部和QR码),则可以使用Vision的API获取图像帧中的位置。


如果2D图像中定位的对象之后,你要显示它在AR相关的3D内容(或显示2D内容,但与所述内容定位在3D与ARKit),你需要这些2D图像点与3D世界相对。

一旦您完成这一步,将AR内容与热门测试放在一起已经很好涵盖其他地方,包括by Applethe community

+0

尽管我知道一些这方面的信息,但是把它们放在一起是非常令人耳目一新的,所以......哇,非常感谢这么一个很棒的,详细的回复。我喜欢这样的答案,因为虽然每个人都喜欢细节和演练,但是您提供的指南会让我忙于研究和实施一段时间。再次感谢@rickster – pythlang