视觉识别的生活垃圾分类系统设计

2023-11-02 08:29马含章王淼鑫钟拼扬刘华常若葵董晋峰
天津农学院学报 2023年4期
关键词:舵机种类串口

马含章,王淼鑫,钟拼扬,刘华,常若葵,董晋峰

(天津农学院 工程技术学院,天津 300392)

随着人们生活水平的提高,城市垃圾产生数量逐年增多,已经成为全国大中城市一个重要的污染来源,实行垃圾分类刻不容缓。

目前我国已出现基于不同技术原理的垃圾分类设备,随着技术的进步,垃圾分类正向精细化的趋势发展[1]。垃圾分类的基础是垃圾种类的判别,传统技术主要运用触觉和重量等传感器对垃圾进行简单分拣[2],我国早期研发的智能垃圾分类设备大多要依靠复杂的机械结构[3-4],但存在适用范围小、分类效率低的问题。2017 年后,随着垃圾分类政策的提出,针对智能垃圾分类设备的研究也逐渐增多,市面上出现了成型的垃圾分类设备[5]。

应用于垃圾种类判断的图像识别技术,在目前的计算机视觉技术领域处于相对成熟、应用难度较低的层次。计算机视觉技术的高速发展使视觉识别技术在垃圾分类领域的市场占比日益提升。此外,图像识别技术的门槛低、成本较小,能够快速形成实用化的产品投放市场,因此,目前国内外均已出现大量基于视觉识别的智能垃圾桶、垃圾分类软件等[6-8]。采用视觉识别的垃圾分类装置对垃圾的材质、重量没有限制,分类范围可涵盖全部垃圾种类,同时具有体积和重量小、分类速度快等优点。视觉识别技术的不断发展也使得垃圾识别的准确性大大提升。因此,设计一款基于视觉识别的垃圾分类装置,可大幅提高社会垃圾分类效率和准确性。

1 视觉识别技术

1.1 视觉识别原理

视觉识别,即通过模型训练,找出同一类别的物体映射到二维空间中的特征像素点在数值和相对位置方面的规律,根据规律拟合出近似的函数,该函数即为该类物体的像素特征,并与其他类别物体的像素特征加以区分,最终实现区分不同种类物体的过程。捕捉和分析图像的特征是视觉识别的核心工作内容[9]。需要注意的是,训练模型需要大量基本数据,才能保证识别准确度。

一般情况下,图像处理的对象是从完整图像中选择的部分区域。这部分区域是图像分析中被关注的重点区域,被称为感兴趣区域。提取感兴趣区域的过程在图像处理中被称为图像分割。主要的图像分割方法有如下几种:阈值分割方法、区域分割方法、边缘分割方法和模糊集理论分割方法等。其中阈值分割法因为其实现简单、计算量小、性能稳定被广泛使用[10]。提取感兴趣区域可以减少处理时间,增加精度,为区域内后续目标的检测和识别提供条件,提升系统的准确率[11]。

1.2 模型训练

图像采集过程是视觉识别的第一步。图像采集包括创建数据集、确定采集数量及拍照采集等过程,图像采集流程如图1。

图1 图像采集流程

首先在OpenMV IDE 中创建数据集,用于存放各个种类的数据,并在已创建的数据集中添加种类。创建分类后连接OpenMV 并运行。此时IDE上的framebuffer 帧缓冲区可以看到OpenMV 的实时图像。点击拍照即可完成当前图像的采集,采集数量的多少直接影响后期识别结果的准确程度。图像采集如图2。目前的数据显示,每个采集的样本数量应在100 张以上,才能使准确率保持在较高水平。

图2 图像采集

完成采集后得到四个不同种类垃圾的数据集。其中包括厨余垃圾14 类4 182 张照片,可回收垃圾2 类1 402 张照片,有害垃圾4 类1 200 张照片,其他垃圾3 类1 300 张照片,对于每一类的不同形态,均采集图像约100 张。四个种类采集照片共约8 100 张。

数据采集完成后,即可进行模型训练。模型训练可在 EDGE IMPLUSE 网站完成。EDGE IMPLUSE 是一个在线网站,可以为嵌入式产品快速生成嵌入式系统神经网络模型。

将图片上传至该网站,对图片进行DSP 预处理,根据种类特征会生成一个三维函数模型。图中不同的点代表不同种类特征,相同的点越聚集,代表该种类特征越明显;反之,如果不同的点混合在同一区域,这说明数据集前期的采集特征不够明显。图3 为预处理函数模型,该模型具有明显的聚集区域,是较为理想的训练模型。

图3 预处理函数模型

预处理后选择transfer learning,开始正式的模型训练。不同的训练次数对结果的准确率有影响,训练次数与准确率不完全成正比,次数过多会导致训练模型过拟合,准确率下降。经反复对比测试,训练次数在20 次左右为最优。当训练次数未达到设定值,但准确率已经足够高时,会自动停止训练,防止过拟合。

模型训练结束后,即可下载对应的OpenMV模型文件。图4 为模型文件构成。

图4 模型文件

在下载的模型文件中,共有三个文件。其中.py文件为示例代码,trained.tflite 文件是生成的模型,labels.txt 是模型各种类的标签。将这三个文件复制到OpenMV 内置的Flash 中,打开OpenMV IDE即可运行程序。

2 硬件设计

2.1 总体方案

该系统包括识别模块、控制模块以及投放模块。红外传感器为系统总开关,当红外传感器检测到有人投放垃圾时,识别模块开始工作。先由摄像头完成图像信息采集,再将采集到的图像与处理器中的模型进行比对,生成识别结果(垃圾种类)并发送给控制模块。控制模块根据收到的结果信息完成投放垃圾并复位。在识别和投放的过程中,红外传感器处于不工作状态,直到投放模块复位结束,传感器恢复等待模式。系统结构框图如图5 所示。

图5 系统结构图

2.2 电路设计

硬件电路由Arduino MEGA2560 开发板、Openmv4 H7 plus 摄像头、二自由度舵机云台和HW-201 红外传感器构成。所有元器件均与Arduino 板相连。图6 为系统接线示意图。

图6 系统接线示意图

OpenMV 与Arduino 串口通信至少需要3 根线:TXD,RXD,GND。TXD 是发送端,RXD 是接收端,GND 是地线。连线的时候,需要把OpenMV的RXD和TXD分别连到Arduino的TXD与RXD。脱机运行时,OpenMV 可通过Arduino 对其供电。

180 度舵机必需使用PWM 引脚进行驱动。因此选择Arduino MEGA2560 开发板的9、10 引脚分别控制上层、下层舵机。

红外传感器的输出信号为数字信号,连接到开发板任一数字引脚即可。

2.3 装置外观

根据已确定的投放装置,确定装置主体部分可分为两层,上层为垃圾识别区,用来安装投放口和识别装置;下层为垃圾分类区,存放投放装置及不同类别的垃圾桶。使用SOILDWORKS 软件搭建装置模型如图7 所示。

图7 装置模型

摄像头位于顶部正中间,较为关键的是摄像头与放置垃圾的托盘的距离应与模型训练时的距离一致,才能确保识别结果不受影响。经实际比对,确定摄像头与垃圾投放处的最佳距离为17 cm,此高度下各尺寸的垃圾均可清晰识别。

存放不同种类的四个垃圾桶按“田”字形摆放,舵机通过旋转、倾斜两个动作完成全种类垃圾投放。在上层舵机的U 形支架上粘贴一个圆形白色托盘作为垃圾投放点。

3 系统软件设计

3.1 OpenMV 识别程序

识别程序是整个系统的核心部分,识别的准确程度也决定了系统的性能。图8 为视觉识别程序工作流程。

图8 识别程序工作流程图

在程序初始化部分,导入程序需要用的库,定义图片的像素格式、大小等参数。定义名为start()的识别函数,将采集到的图像与模型比对,取概率最高的种类的标签,串口输出给Arduino。为保证准确率,识别对象属于某一种类的概率大于0.8 时,方可打印结果。当概率低于0.8 时,重新比对,直到概率高于0.8 为止。

3.2 Arduino 控制程序

Arduino 作为系统的控制中心,需要接收红外传感器的高低电平并控制舵机工作。

红外传感器触发是软件系统的第一个环节。红外信息触发后,识别投放环节才依次进行。HW-201 红外传感器当前方有物体遮挡时,输出低电平,没有物体遮挡时,输出高电平。图9 为此环节的工作流程。

图9 红外传感器触发检测工作流程

在初始化部分设置引脚和传感器运行电平。

定义有返回值的digitalSwitch()函数,当串口接收到高电平,即红外信号没有被遮挡时,函数返回值为0;当串口接收到低电平即红外信号被遮挡时,间隔1 秒再次检测。若仍为低电平,则函数返回值为1,反之为0。延时设计可以有效避免误触。

舵机控制主要包含下层舵机旋转、上层舵机倾斜、上层舵机复位、下层舵机复位四个部分。上下层舵机的旋转角度由OpenMV 发送的结果决定。图10 为舵机控制程序的工作流程。

图10 舵机控制程序流程图

在初始化部分调用舵机的库函数,设置舵机信号引脚,其中上层舵机为pin9,下层舵机为pin10。设置舵机初始角度,上层舵机90 度,下层舵机30 度。在setup()函数中,定义舵机的脉冲宽度,并初始化舵机。

完成初始化后,定义舵机四个动作的子函数,统一放入void runSteer()函数中。baseAngle 和upperAngle 两个局部变量即为上下层舵机的目标角度,其数值由垃圾种类决定。四个子函数的设计思路为比较目标角度与舵机初始化角度。在投放过程中,当目标角度大于初始化角度时,舵机正转,当目标角度小于初始化角度时,舵机反转。在复位过程中,与上述过程相反。接收到OpenMV发送的种类后,在loop()函数中调用void runSteer()函数,并给baseAngle 和upperAngle 两个变量赋值,即规定舵机的旋转角度。相比于在loop()函数中定义舵机的投放函数,将投放动作定义为子函数,并在loop()函数中调用。

3.3 OpenMV 与Arduino 通信

OpenMV 与Arduino 通信属于两个模块的交互,涉及Arduino 发送开始信号、OpenMV 接收开始信号、OpenMV 发送识别结果、Arduino 接收识别结果等过程。必须保证二者在相同信息上设定的字符一致。图11 为通信部分的软件工作流程。

图11 通信流程

在初始化部分,首先设定串口引脚,Arduino的RX、TX 引脚分别对应OpenMV 的TX、RX 引脚。两者波特率应保持一致。

在设定OpenMV 的TX、RX 引脚时应注意,OpenMV4 H7 plus 的UART 总线的物理引脚设定为:

UART(1):(TX,RX)=(P1,PO)

UART(3):(TX,RX)=(P4,P5)

初始化完成后,Arduino 作为控制中心,等待红外传感器输出高电平,红外传感器输出高电平后,给OpenMV 发送开始字符“1”。在发送前、后都必须clear 串口,以避免串口存在异常数据导致系统混乱。在OpenMV 上同样设定字符“1”,当串口接收到Arduino 发送该字符后,调用设定好的识别程序,并将结果发送给Arduino。

Arduino 接收OpenMV 发送的识别结果。在串口打印出等待状态或接收到的识别结果,可实时判断系统是否正常工作,方便调试。应注意的是,要确保OpenMV和Arduino上设定的垃圾桶编号一致。

4 测试

在软、硬件系统完成后,对整个系统进行脱机运行测试。本系统目前可以识别的垃圾种类有:

厨余垃圾:完整或切割过的香蕉、苹果、橘子、番茄、土豆、萝卜、青椒;可回收垃圾:易拉罐、小号矿泉水瓶;有害垃圾:纽扣电池、2号电池、5 号电池、7 号电池;其他垃圾:小砖块、瓷器碎片、烟头。

取每种垃圾的各种不同形态样本各2~3 种进行准确率测试。其中厨余垃圾取各类的完整形态和切割成不同大小形态为样本集;可回收垃圾、有害垃圾取各类的不同品牌为样本集;其他垃圾取各类不同形态为样本集。每个样本进行3 次测试。

经过多次试验得出,可回收垃圾和有害垃圾的识别准确率较高,可达到90%以上;厨余垃圾和其他垃圾的准确率则较低,约为70%。整体准确率约为78%。在所有分类错误的案例中,将厨余垃圾归类为其他垃圾,和将其他垃圾归类为厨余垃圾是两种最常见的情况。也有少量有害垃圾被识别为其他垃圾。具体统计数据见表1。

表1 测试数据统计表 %

导致以上结果的原因在于易拉罐、矿泉水瓶和电池的特征较为明显,不易与其他种类的垃圾混淆;而其他垃圾中的小砖块、瓷器碎片等,与切割过的厨余垃圾的形态、颜色相似度较高,使系统产生了错误判断。

5 总结

本文基于目前的社会垃圾分类设施需求和相关方面的研究现状,设计了一款使用视觉识别技术的智能垃圾分类设备。该系统针对生活垃圾进行了有效分类,经测试,可回收垃圾和有害垃圾识别准确率可高达90%以上,设计方案可行。同时视觉识别技术目前已相对成熟且广泛商业化,采用视觉识别技术作为垃圾种类识别依据,有着低成本、高效率的优势。

猜你喜欢
舵机种类串口
浅谈AB PLC串口跟RFID传感器的通讯应用
含齿隙弹载舵机的全局反步模糊自适应控制
种类丰富的酒具
消防车种类知多少
基于dsPIC单片机的飞艇舵机控制实现
镜头像差的种类
基于高速同步485总线通信的多通道舵机控制器设计
消防车有哪些种类
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信