基于树莓派的垃圾智能分类系统设计
2023-11-27刘丰俭
王 科,刘丰俭
(江苏工程职业技术学院 信息工程学院,江苏 南通 226007)
随着国民经济的快速发展,人们的生活方式、消费结构有了较大的改变,生活垃圾产量与日俱增,垃圾处理问题变得越发严峻。目前,通常采取掩埋、焚烧或堆肥等方式处理生活垃圾,易造成土壤、空气和水资源等环境污染。有效处理日益增加的生活生产垃圾,更好地回收利用垃圾资源,促进经济的可持续发展,有着重要的现实意义。实施垃圾分类,可显著降低垃圾处理成本,提高垃圾循环再利用价值,减少资源浪费。但是,由于生活垃圾种类庞杂,许多人并不清楚垃圾的准确类别,导致乱投放,反而增加了垃圾处理的人力和财力。因而,研究一个有效的垃圾分类系统尤为重要。针对垃圾的收集分类,国内外市场推出了智能垃圾桶[1-2]。智能垃圾桶大多基于红外感应器、距离感应器进行设计,还未能实现垃圾识别自动分类。近年来,深度学习技术广泛应用于计算机视觉特别是图像分类领域,为垃圾识别研究提供了新方向[3-5]。本文探究将ResNet 网络模型和迁移学习相结合的垃圾分类方法,利用树莓派硬件设计开发垃圾智能分类系统,以期提升日常生活垃圾分类的准确性和处理效率。
1 系统总体结构设计
如图1 所示,基于树莓派的垃圾智能分类系统的总体结构分为硬件和软件系统两部分。硬件系统包含树莓派4B 主控板、高清摄像头、驱动电路及四个舵机。四个舵机分别连接可回收垃圾、厨余垃圾、其他垃圾和有害垃圾桶盖,当舵机开启时,转动一定角度,驱动相应的垃圾桶盖打开。软件系统包含提供用户交互的前端界面和后端处理模块。
图1 垃圾智能分类系统结构
垃圾智能分类系统的工作流程如下:
1)用户将垃圾置于识别区域,高清摄像头采集垃圾图片,并传输至树莓派后端处理模块;
2)后端处理模块调用已训练的深度神经网络进行模型推理,得到识别结果;
3)根据不同的识别结果驱动不同的舵机进行相应动作,使相应类别的垃圾桶盖自动开合。
2 硬件设计
系统所需的硬件模块之一是图像采集模块,其功能为连接摄像头以获取由摄像头采集的图片;模块之二是舵机控制模块,连接四个舵机并分别进行控制,用于根据后端处理模块识别的垃圾种类驱动舵机,使相应的垃圾桶盖打开,垃圾进入对应的箱体。为了能正常运行后端处理服务程序,需要较高的硬件处理能力。树莓派具有体型较小、功耗较低、性能强大、便于携带等诸多优点,作为嵌入式技术被广泛应用于工业、科研等领域。为满足上述硬件处理要求,选取最新一款型号为4B的树莓派作为系统的开发板,其具有64 位1.5 GHz 四核CPU,2G DDR4 内存,且搭载博通Videocore-IV型GPU,拥有串行、USB、Wifi、蓝牙等接口,可运行Linux 操作系统。
垃圾智能分类系统的硬件连线如图2 所示。摄像头通过USB 口与树莓派相连接,提供图像采集功能;舵机驱动板采用PCA9685,通过产生不同占空比的PWM 波控制舵机转动相应角度;树莓派与PCA9685 驱动板间采用I2C 协议连接;为保障舵机驱动能力,PCA9685 单独使用一路5 V电源进行供电;垃圾分类系统样品中采用SG90 舵机,力矩为0.147 N·m,工作角速度为200(°)/s,满足系统工作要求。
图2 垃圾智能分类系统硬件连线
硬件系统的工作流程如下:
1)树莓派通过OpenCV 调用摄像头视频流,获取视频和图片数据;
2)获取的视频流和图片数据经后端处理模块的API 接口传至后端;
3)等待后端处理结束得到图片识别结果;
4)根据识别结果驱动相应舵机执行动作,由Python 的Adafruit_PCA9685 包控制舵机操作。
3 软件设计
3.1 前端架构设计
前端页面功能是提供用户与系统的交互接口,用户通过浏览器使用系统功能。用Vue.js 框架开发前端页面代码,通过ElementUI 组件提供页面中的插件功能,最后采用Webpack 工具构建完整结构,以便于开发人员快速搭建页面。垃圾智能分类系统的前端界面包含预览和结果界面页,见图3。预览界面的功能主要是当垃圾置于识别区域时实时显示垃圾图像;另外,页面中还有识别组件,点击识别按钮可传递图像至后端程序。结果页面主要展示当前垃圾种类的识别结果,并且通过控制组件,通知后端程序驱动相应的舵机操作。
图3 前端架构组成
3.2 后端架构设计
基于Flask 框架搭建的垃圾识别平台后端程序用于垃圾图像的处理及推理。Flask 框架是使用Python 语言开发Web 应用的主流框架,具有小巧、轻量级的特点,适合中小型项目开发。Flask 框架使用MVC 设计模式,降低了代码的耦合性。另外,Flask 自带Web 服务器,在非生产环境中可以直接运行,无需使用Apache 或Nginx 服务器。后端架构如图4 所示,其中包含舵机驱动、图像处理和图像推理三个模块。舵机驱动模块主要通过上位机程序产生相应的PWM 波驱动舵机进行操作;图像处理模块通过OpenCV 生成视频流,当用户点击识别按钮时,生成一张静态图像并传递给图像推理模块处理;图像推理模块调用已训练的卷积神经网络进行预测并输出识别结果。
图4 后端架构组成
舵机驱动模块的关键代码如表1 所示。首先创建一个PWM 实例,然后设置PWM 波频率,最后调用set_pwm 方法产生PWM 波。servo1 参数控制PWM 波高电平时间,通过查找舵机的参数手册,可得舵机旋转角度angle 和servo1 参数间的计算关系,如式(1)所示。
表1 舵机驱动关键代码
其中,s 为servo1 参数,a 为旋转角度angle,f 为PWM 波的频率freq。
图像处理模块的关键代码如表2 所示。通过VideoCapture 方法获取视频数据,保存图片。当用户在前端点击识别按钮时,调用此代码传递图像至图像推理模块。
表2 图像处理关键代码
在图像推理模块中,基于卷积神经网络搭建ResNet50 网络模型,对ImageNet 数据集进行预训练,采用数据增强、Dropout、Adam 和早停机制等关键技术[6-7]建立训练模型如图5 所示。由图5 可见,ResNet50 网络分为5 个阶段层,其中第一层结构较为简单,即对输入进行卷积计算,可视其为对输入图像的预处理。后4 个阶段由残差网络构成,分别用已设计的残差块依次叠加3,4,6,3次,然后进行全连接,再经归一化形成各自类别的概率。采用TensorFlow 的Keras 完成网络模型的逐层构建和精细化调参。
图5 ResNet50 网络模型
4 系统实现及测试
4.1 数据集训练测试
选取华为云人工智能大赛提供的垃圾图像数据集进行训练和测试。数据集涵盖了常见的生活垃圾类别,按最新标准分成可回收垃圾、厨余垃圾、有害垃圾和其他垃圾四大类。如表3 所示,数据集共有图片14 802 张,其中最多的是可回收垃圾,有图像8 611 张,最少的是有害垃圾,有图像1150张。
表3 垃圾数据集类别及图像数量
垃圾图像标签由两部分组成,包括4 大类和40 个小类。其中可回收垃圾包含23 个小类别,有害垃圾、厨余垃圾及其他垃圾分别包含3 个、8 个及6 个小类别。具体分类如图6 所示。
图6 垃圾数据集数据分类
对数据集进行数据增强及归一化处理后,在数据集中随机抽取80 %数据作为训练集,20 %数据作为测试集,进行训练,结果如图7 所示。模型在26 轮训练结束后触发了早停机制,提前终止训练。最终得到垃圾识别训练准确率为98.7 %,测试准确率为90.8 %。
图7 ResNet50 模型训练结果
4.2 系统测试
以Python 为编译语言开发垃圾智能分类系统,其中图像推理模块使用TensorFlow 框架,系统部署方案采用Flask 框架,Web 端界面采用Vue.js框架配合ElementUI 组件库进行构建开发。最后,采用Electron 将整个Web 应用打包,并部署于树莓派的Raspbian 操作系统,实现模型的系统化与应用化。
搭建的系统实物如图8 所示。其中:树莓派与摄像头之间通过USB 口连接,与PCA9685 之间通过I2C 协议连接,四个垃圾桶分别由四个舵机控制打开和关闭。
图8 垃圾智能分类系统实物
前端预览界面如图9,其中a)是摄像头实时识别窗口,b)为识别按钮界面。当用户点击识别按钮时,对当前的预览图像进行识别。
图9 前端预览界面
在识别窗口放置一个易拉罐,点击识别按钮,得到的页面结果如图10 所示。由图10 可以看到,垃圾智能分类系统准确识别易拉罐为“可回收垃圾”,并打开相应的舵机,控制垃圾桶盖打开。
图10 垃圾智能分类识别测试结果
选取6 种不同的垃圾进行识别测试,结果如表4 所示。由表4 可见,垃圾智能分类系统对6 种垃圾识别无误,舵机能很好地驱动相应的垃圾桶拨板动作,实现垃圾正确分类回收。测试结果表明,设计的系统能高效完成常见垃圾的自动识别与分类,满足智能垃圾桶控制要求。
表4 垃圾自动分类系统测试结果
5 结语
基于树莓派硬件设计了一种垃圾智能识别分类系统,通过ResNet 网络模型与迁移学习相结合的图像分类方法进行垃圾识别,采用Vue.js 框架配合ElementUI 组件库构建开发Web 端界面,采用Flask 框架进行部署。测试结果显示,所设计的垃圾分类系统软硬件工作稳定,能对常见的生活垃圾进行正确分类回收,在垃圾分类和环境保护方面具有良好的应用前景。