将对象检测模型嵌入到iOS应用中,然后将其部署到UIView的内容而不是相机流上?

时间:2019-01-19 07:57:07

标签: ios objective-c xcode tensorflow coreml

我已经通过自定义类上的tensorflow对象检测API重新训练了ssd_mobilenet_v2。现在,我有了一个Frozen_inference_graph.pb文件,可以将其嵌入到我的应用程序中。 tutorials on tensorflow's github和网站仅显示如何将其用于iOS内置相机流。取而代之的是,我有一个用于iPhone的外部摄像头,该摄像头流到UIView组件。我希望我的网络能够检测到其中的物体,但是我的研究并未指出任何明显的实现/教程。

我的问题:有人知道这是否可能吗?如果是这样,实现这种事情的最佳方法是什么? tensorflow-lite?张量流移动?核心ML?金属吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

在该TensorFlow源代码中,文件 CameraExampleViewController.mm 中的方法runCNNOnFrame采用CVPixelBuffer对象作为输入(来自相机)并复制其内容进入image_tensor_mapped.data()。然后,它在该image_tensor对象上运行TF图。

要使用其他图像源,例如UIView的内容,您需要先将该视图的内容读取到某种类型的内存缓冲区(通常为CGImage)中,然后复制该内存缓冲区放入image_tensor_mapped.data()

将TF模型转换为Core ML(如果可能)可能会更容易,然后使用Vision框架运行模型,因为可以直接使用CGImage作为输入。这使您不必先将图像转换为张量。