项目介绍
我们每天都会产生各种垃圾,比如废纸、塑料瓶、果皮等。大家都知道垃圾分类对环境保护的重要性,但是在实际操作中,不是所有人都能准确地把垃圾放入正确的垃圾桶。那能不能通过人工智能技术帮助解决这个给问题呢?
当然可以,我们可以利用物体分类算法来解决这个问题。物体分类算法可以让计算机识别并区分不同的物体,包括各种类型的垃圾。我们只需要用摄像头拍摄垃圾图片,然后让物体分类算法识别垃圾种类,就可以成功帮助我们完成垃圾分类任务了。
本节课我们就使用行空板和摄像头,制作一个AI垃圾分类装置,帮助我们更好地进行垃圾分类,让我们更好地管理和保护我们的教室环境。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/eb9ba6095d6abdf8bab0fb2a0236d2d3.png)
1 项目功能
本项目将制作一个AI垃圾分类装置,利用物体分类算法实现垃圾种类的识别。
物体分类算法的实现分为采集、训练、识别三个过程,因此项目也将分为下面三个任务:
■ 任务一:采集垃圾图片。通过摄像头采集不同种类的垃圾图片,建立图片集以便于后面的训练和识别。
■ 任务二:训练垃圾分类模型。基于建立好的图片集,让行空板处理图片,训练获得专门用于垃圾分类的模型。
■ 任务三:识别垃圾种类。利用训练好的垃圾分类模型,识别摄像头拍摄的垃圾种类,并显示提示信息。
任务一:采集垃圾图片
先来利用摄像头采集不同种类的垃圾图片,建立图片集。
1 连接硬件
首先,将USB摄像头接入行空板USB接口。然后,将行空板通过USB线连接到电脑上,等待行空板屏幕亮起,并显示行空板LOGO,表示连接成功。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/33ba67186b7a6daf555eff65edac1969.png)
2 准备软件
按照下面步骤,设置Mind+软件编程方式为 Python图形化编程,并完成行空板的加载和连接。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/d0055edf5720173ca9ec86389cd4e1e9.png)
3 编写程序
编写程序,完成按键采集不同垃圾种类图片,建立训练所用图片集。
物体分类库并不属于内置库,而是属于用户自定义库功能,所以需要加载用户自定义库。进入“扩展库”中的“用户库”检索“物体分类”,点击“行空板机器学习”图形化库,完成加载。
注意:物体分类算法功能依然要使用一些依赖库,本项目不需要安装是因为相关依赖库已经内置在行空板固件里了。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/9901f201528515d2bfc731f0f69bb405.png)
加载完文字识别指令后,我们就可以按照“初始化摄像头 → 读取摄像头画面图片 → 按键拍摄保存对应分类图片到指定的文件夹中”的流程编写程序,由于录入的图片不止一张,别忘了放 循环执行 。
完整参考代码如下图。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/0fba5adf05812d33279f985afaabf569.png)
4 运行程序
点击运行按钮,运行程序,行空板屏幕上显示视频画面。摄像头画面对准垃圾(可参考附录可回收垃圾图片或者对准实物拍摄),当垃圾较为完整的出现在视频画面中时,按下A键,拍摄一次图片。此时,终端会显示采集图片存储的位置和张数。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/4335788c5a257dd70024bc91cf0780ab.png)
长按A键,同一分类下可以采集多张图片,一般来说采集图片越多,识别准确率越高,但是训练耗费的时间就越久,本项目我们选择采集30到40张图片即可。学习结束后,点击停止运行,结束本次采集。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/67212555c5785cd666359e7785f29b3e.png)
拍摄的图片在哪里?进入“行空板中的文件”,在下图所示位置,查看和下载拍摄图片。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/07c52465041e0b990d4b275837c95843.png)
5 小试牛刀
请修改代码,重复刚才的过程,采集不可回收垃圾的图片。
提示:每次运行只能学习一个类别图片,填写分类名称时,别忘了按顺序添加序号。修改核心代码示例如下:
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/2b7f1e66b48208534b8eac46b0805f6d.png)
任务二:训练垃圾分类模型
用采集的图片训练一个专门用来垃圾分类的模型。
1 编写程序
训练垃圾分类模型需要经过“导入图片集 → 创建模型 → 训练模型 → 保存模型”几个步骤。
由于我们目前只采集了两个分类的垃圾图片,在 导入图片 指令中填入分类数量为2。为了让模型效果更好,我们可以在 训练模型 指令中设置一定数量的训练次数,比如3次。当然,我们也可以加入适当的提示表示训练完成。完整示例代码如下:
注意:训练次数不要填入太多,会导致训练时间变长,也不一定会让模型变得更好。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/89d6f857a4f5f09efdf8cb0639b328d8.png)
2 运行程序
检查行空板的连接情况,运行程序,行空板会按照采集图片文件夹顺序导入图片,训练模型。
此时,终端会显示导入图片数量及训练过程,等待直到显示“训练完成”,表示垃圾分类模型训练成功并已保存在行空板内。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/cfec9dee829e379215f8ab939be0086d.png)
保存的垃圾分类模型在哪里?打开“文件系统”,在“行空板中的文件”里即可找到如下图所示的模型文件。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/a3ae58b121e240431b179a592e6a5194.png)
任务三:识别垃圾种类
基于训练好垃圾分类模型,用摄像头拍摄垃圾,按键识别垃圾种类并显示在行空板屏幕上。
1 编写程序
(1)识别垃圾种类
既然要使用摄像头来拍摄图像,利用垃圾分类模型识别垃圾种类,识别垃圾种类就需要导入模型、初始化摄像头、读取摄像头画面、按键识别以及显示摄像头画面几个部分。参考代码如下图所示。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/901ab243bf7c5e07961e8137de1d9a2e.png)
(2)显示识别结果
识别获得的结果有两个“索引”和“置信度”。其中,“索引”表示采集图片时类别文件夹的序号,“置信度”则表示识别为该类别的可能性。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/91d75da8069fb782023314d88c9278f3.png)
识别结果中没有垃圾类别名称,我们可以建立一个“表格”用“索引”去取“表格”里面的垃圾类别名称。而这个“表格”就叫做列表。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/014702025d646736338115e01ad5d853.png)
具体实现方法如下:
先建立 分类表 和 识别结果 两个变量用来保存所有垃圾种类名称以及识别的垃圾类别名称。然后,在代码开始部分将 变量分类表 初始化为 [”可回收垃圾”,”不可回收垃圾”],变量识别结果 则初始化为””(双引号内没有内容)。
注意:程序中所使用的符号(引号和逗号)均为英文。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/1b98269ab4a02ced12290b30ae1caf51.png)
当按键获得识别结果后,从 分类表 中按 识别的索引 取出识别的垃圾类别名称,并存入 变量识别结果。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/075f908f0e6fd1052a89b00a957b85a3.png)
获得了识别到的垃圾种类的名称,接下来我们就可以将它显示在摄像头画面上。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/bac07af5a16756512aa2bb963025eb9f.png)
当然,为了可以看到更加完整的识别信息,我们也可以建立 变量置信度 存储置信度,并将它也显示在摄像头画面上,项目完整示例程序如下图所示:
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/a574585d70376b005dda73d79589b631.png)
2 运行程序
点击运行按钮,运行程序,待模型导入成功后,终端会显示“model loaded”表示模型导入成功。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/5d579f4996d2a3c81aecccd103a439c8.png)
模型导入成功后,行空板屏幕上显示视频画面。摄像头画面对准已学习过的垃圾(可参考附录中的垃圾图片或者对准实物拍摄),当垃圾图像较为完整的出现在视频画面中时,按下A键,识别成功后屏幕显示垃圾类别和置信度。
![image.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/5756a8fddb7172a31678e4085607e819.png)
附录 垃圾图片样例
![截屏2024-05-10 上午10.16.05.png](https://makelogimg.dfrobot.com.cn/makelog/652ce4c9f6f6eea679b51bc3/179122922f8055c14ca6dad7fba739b1.png)
附件
hgfdgasdhhgdghj2024.05.10
不错