更新: Apple 现在有一个示例代码项目,可以执行其中的一些步骤。继续阅读那些你仍然需要弄清楚自己的人......
几乎所有的部分都可以用来做你想做的事情……你大部分时候只需要把它们放在一起。
您ARFrame
可以通过定期轮询 s或将它们推送给您的会话委托来ARSession
获得s。currentFrame
(如果您正在构建自己的渲染器,那就是ARSessionDelegate
; 如果您正在使用ARSCNView
or ARSKView
,它们的委托回调引用视图,因此您可以从那里返回到会话以获取currentFrame
导致回调的。)
ARFrame
capturedImage
以 a 的形式提供电流CVPixelBuffer
。
您可以使用或类将图像传递给Vision进行处理,这两种方法都有将 a作为输入图像进行处理的方法。VNImageRequestHandler
VNSequenceRequestHandler
CVPixelBuffer
您可以在 Vision 的WWDC17 会议上找到将图像传递给 Vision + Core ML 的通用代码,如果您观看该会议,现场演示还包括将CVPixelBuffer
s 传递给 Vision。(他们在该演示中从 AVCapture 获取像素缓冲区,但如果您从 ARKit 获取缓冲区,则 Vision 部分是相同的。)
您可能遇到的一个症结是识别/定位对象。人们与 Core ML + Vision 一起使用的大多数“对象识别”模型(包括 Apple 在其ML 开发人员页面上提供的预转换版本)都是场景分类器。也就是说,他们看着一张图片说,“这是一张(东西)的图片”,而不是像“这张图片中有一个(东西),位于(边界框) ”。
Vision 为处理分类器提供了简单的 API——您的请求的结果数组中填充了VNClassificationObservation
对象,这些对象告诉您场景是什么(或“可能是”,带有置信度)。
如果你找到或训练了一个模型,它既能识别又能定位物体——我必须强调,球在你的球场上——使用 Vision 会产生VNCoreMLFeatureValueObservation
物体。这些有点像任意键值对,因此您如何从中识别对象取决于您如何构建和标记模型的输出。
如果您正在处理 Vision 已经知道如何识别的东西,而不是使用您自己的模型(例如人脸和 QR 码),您可以使用 Vision 的 API 获取图像框架中的位置。
如果在 2D 图像中定位对象后,您想在 AR 中显示与其关联的 3D 内容(或显示 2D 内容,但使用 ARKit 将所述内容定位在 3D 中),您需要针对这些 2D 图像点进行测试3D世界。
一旦你到了这一步,将 AR 内容与命中测试放在一起,Apple和社区都已经在其他地方很好地覆盖了。