🥑Flutter检测图像和实时相机流中对象

Flutter | 检测图像 | 相机流

在本指南中,我们将使用tflite软件包和预先训练的SSD-MobileNet模型在Flutter中开发应用程序,该模型能够检测图像和实时相机流中的对象。 该应用程序能够离线检测对象。 我们还将能够从应用程序内拍照,并将其输入模型进行检测。

设置

如果尚未安装,请在计算机上设置Flutter。 Flutter网站上的本指南是一个很好的起点。设置Flutter之后,通过在终端中键入以下内容来创建一个新项目。

现在,您可以在自己喜欢的编辑器中打开项目。

安装包

我们使用image_picker从图库中选择图像,使用tflite运行模型,并使用用于控制相机的相机包。您可以在pub.dev上阅读有关它们的更多信息。

在您的应用程序级别build.gradle文件(/ android / app)中,在android块下,添加以下几行,以确保Flutter不压缩您的模型或tflite包。

模型

您可以从本文代码压缩包中或从任何地方下载SSD-MobileNet模型及其标签,并将它们放置在您的项目中。然后,在您的pubspec.yaml文件中添加您的资产。

相机安装

该应用程序的主要功能是通过以下方式创建的:在应用程序启动后立即初始化所有摄像机。然后,将摄像机描述传递给所有需要它的类。

图像中对象检测

要检测图像中的对象,我们首先需要使用tflite包中提供的Tflite.loadModel方法加载模型。 然后,我们需要从图库中获取图像,或者通过启动相机从应用程序中获取图像。 camera程序包提供了可同时用于两种方法的getImage方法。

加载图像后,我们使用Tflite.detectObjectOnImage方法将其输入到我们的模型中。此方法返回检测到的类,置信度和兴趣点,这将帮助我们在对象周围绘制边界框。

绘图边界框

在检测到的对象周围绘制边界框的基本思想是使用模型和图像尺寸中的POI。

使用堆栈小部件,我们可以将边界框放置在图像顶部。 在“定位”小部件内,我们放置一个容器,该容器周围具有边框。 我们还可以通过简单地添加文本小部件并将置信度转换为百分比来将检测到的类别及其准确性显示为百分比。

静态图像检测页面具有两个浮动操作按钮。使用其中一个,我们可以直接从图库中选择图像,然后在其上运行我们的模型。使用另一个,打开相机,我们可以拍照并将其输入到我们的模型中。

实时对象检测

实时检测物体有点类似于检测图像中的物体。 视频流中的每个帧都被视为图像,并在其上运行模型。 该模型每帧显示结果,并在图像流的顶部一遍又一遍地绘制边界框。

相机插件中的相机控制器对象具有一种称为startImageStream的方法,可用于将帧馈送到我们的模型。 在此方法内部,我们可以调用Tflite.detectObjectOnFrame方法,该方法获取相机流并通过我们的模型运行它。 其余方法相同,即模型返回detectedClass,confidence和POI,我们使用它们在摄像机流顶部绘制边界框。

本文完整代码

🏈指点迷津 | Brief

Last updated