基于NB-IoT的智能垃圾分类系统
2020-08-31杨皓文胡琦瑶李江南陆璐
杨皓文 胡琦瑶 李江南 陆璐
摘 要:现有的垃圾分类主要依靠人工分辨,而很多居民因为意识不足或日常工作繁忙,往往无法仔细分类,导致垃圾分类效率低下。为了解决该问题,使垃圾分类适应快速发展的时代,文中设计并开发了具有自主识别、智能分类且可以监控垃圾桶温度、装载量、烟雾及可燃气体浓度数据指标的基于NB-IoT的智能垃圾分类系统。将利用CNN神经网络算法训练的模型数据搭载在树莓派(Raspberry Pi)上,对读取的图像进行分类检测,通过控制电机将垃圾送入其所属分类的收纳桶中。通过HC-SR04测距模块、MLX90614ESF红外测温传感器、MQ-2烟雾气敏传感器获得垃圾桶装载容量、箱体内温度与可燃气体数据,并上传至云端服务器,计算生成城市街道垃圾桶数据地图,同时对垃圾回收进行路径规划,并将处理后的数据下传至手机APP,方便管理人员使用。
关键词:智能垃圾分类;Raspberry Pi;深度学习;图像识别;NB-IoT;传感器
0 引 言
随着《生活垃圾分类制度实施方案》的实施,垃圾分类已经成为了我们日常生活的一部分。一方面,垃圾分类可以减少资源浪费,另一方面,垃圾分类可以减少对环境的污染,有利于我国可持续发展战略的持续推进。在目前的方案中,垃圾分类主要依赖居民的主动分类和监督员检查。但此举存在两个问题:手动垃圾分类在无形之中增加了居民和监督员的负担,节约的资源又以人力的形式浪费;由于很多居民垃圾分类意识薄弱,加之日常工作繁忙,很难对垃圾做到细致分类,导致垃圾分类成为“摆设”。为解决这些问题,本文研究设计了一套基于NB-IoT的垃圾分类综合解决方案,可实现对垃圾的自主识别、智能分类,满足人们的需求。
1 系统整体框架
本文设计的基于NB-IoT的智能垃圾分类系统的总体结构如图1所示。此系统的下位机由树莓派4B处理器、WiFi网络模块、HC-SR04测距模块、MLX90614ESF红外测温传感器、MQ-2烟雾气敏传感器、高清摄像头等组成。系统的上位机由云端服务器及手机APP组成,云端服务器用于下位机与上位机的数据交换。下位机对垃圾进行智能识别分类,并采集垃圾桶内的温度、烟雾浓度、可燃气体浓度、垃圾装载量等数据,将其上传至云端服务器。服务器利用其强大的计算能力将接收的数据转化为城市街道垃圾桶数据地图,并将数据传送至手机APP,管理人员可随时查看垃圾桶的分布地图及垃圾桶数据,及时处理存在问题的垃圾桶。
搭载在垃圾桶投掷口处的高清摄像头可以捕捉垃圾的图像,并将图像数据传送至树莓派中,系统利用神经网络算法生成的模型对垃圾图像进行识别分类,得到垃圾所属大类,之后树莓派调用GPIO资源控制传送电机运转,将垃圾送入所属收纳桶内。
红外测温传感器与烟雾气敏传感器可实时监测箱体内的各项数据。当检测到箱体内的温度、烟雾浓度或存在的危险气体浓度超过设定阈值时,手机客户端将发出警报,通知管理人员及时处理。测距模块根据箱体内所剩空余空间的垂直距离,对箱内垃圾的數量进行评估,并将数据实时上传至云端服务器,服务器根据垃圾桶装载量,更新垃圾桶数据地图,并对清理路径进行规划,清洁人员可根据规划对垃圾桶进行清理。此举既保证了垃圾桶的使用效率,也大大减少了环卫工人的工作量。
2 系统硬件设计
2.1 数据采集
本方案使用的Raspberry Pi 4B搭载了官方Raspbian系统,其处理器采用Cortex-A72内核,最高主频可达1.5 GHz,具有强大的代码执行能力和丰富的控制器应用,使得神经网络算法在小型设备上流畅应用成为了可能。本文使用树莓派主要实现以下功能:
(1)高清摄像头通过USB接口与树莓派相连,将识别的垃圾图像数据快速传回树莓派处理器进行分析处理;
(2)树莓派在识别垃圾种类后,通过GPIO接口将指令输出至传送电机,以此控制不同类别垃圾的投放;
(3)树莓派通过自带的WiFi模块与云服务器连接,可以将由各模块获取的数据上传至服务器,方便上位机终端获取相关数据,以便下一步的处理。
本文中,我们通过树莓派中的V412 API接口调用摄像头读取图像数据[1],其具体实现分为6个步骤:
(1)打开视频设备文件,初始化视频采集参数,设置视频图像的格式;
(2)申请用于采集视频图像的帧缓冲区,并从内核空间将这些申请的帧缓冲区映射到用户空间;
(3)把申请到的缓冲区放入视频采集输入队列,用于采集视频图像数据;
(4)把帧缓冲区从队列中取出,将视频图像数据处理后,再将帧缓冲区放回至队列中;
(5)依次循环上述4个步骤,以此不断获得视频图像数据;
(6)关闭视频设备文件,结束视频采集。
2.2 数据传输
本文选用Socket通信协议。在树莓派的TCP/IP通信协议下进行数据传输,将已采集的数据发送给云服务器[2]。
本文利用Python编译环境,使用Socket第三方库实现数据传输。Socket编程共分为如下5个步骤:
(1)创建Socket对象,将SOCK_STREAM设置为TCP类型;
(2)获取静态IP,并绑定IP和端口,用listen()进行监听;
(3)用accept()函数接收Client发出的请求,包含Client的IP和端口;
(4)向Client发送垃圾桶的实时数据;
(5)利用时钟设置定时循环函数,实现数据实时更新。
2.3 电机控制
本文采用ULN2003控制板和28BJY-48步进电机实现垃圾传送[3]。首先将步进电机连接到控制板上,再将控制板上的6个引脚连接到树莓派的GPIO接口,通过程序使GPIO接口输出控制信号,控制电机运转。树莓派使用GPIO进行控制,包括两种方式:使用C语言WringPi库文件提供的函数进行控制;使用Python的RPI.GPIO第三方库中提供的函数进行控制。在此系统中本文采用Python程序控制GPIO的状态,首先调用gpio.setmode()函数设置模式,之后调用gpio.PWM()函数设置PWM波的频率,最后调用ChangeDutyCycle()函数设置PWM波的占空比。
3 系统软件设计
3.1 基于机器学习的图像识别
卷积神经网络(CNN)由卷积层、池化层、全连接层组合而成,是一类包含卷积计算的前馈神经网络。该算法针对物体识别不断优化,促使识别精度越来越高,其应用潜力巨大,前景广阔[4]。
本文搭建的神经网络是在Python环境下利用第三方库TensorFlow搭建的。设计的神经网络主要包含4个部分,其结构如图2所示。
第一部分为卷积层。为第一、二层卷积层分别设计了64个3×3步长为1的三通道卷积核和16个3×3步长为1的十六通道卷积核,通过对输入图层上3×3像素大小的区域进行加权处理,得到上一图层的特征信息,其中权值是图层上的像素值。具体实施时还利用ReLu()函数增加网格的非线性分割能力,ReLu()函数见式(1):
相较于传统的Sigmoid函数,使用ReLu()函数的优点在于通过动量梯度下降法加快了收敛速度,而且梯度不易饱和[5]。
第二部分是池化层。两层池化层均为3×3,步长为2的最大池化,选取图像区域内中像素最大值作为池化后的值,对提取的信息进行降维处理,一方面使特征图变小,简化网络的复杂度;另一方面,将特征压缩,提取主要特征。针对卷积层使用的ReLu()函数,池化操作后使用lrn()进行局部响应归一化,使得其中响应比较大的值变得更大,并抑制其他反馈相对较小的神经元,增强模型的泛化能力。
第三部分为全连接层。两层全连接层均拥有128个神经元,对前面得到的特征做加权处理,处理权值的全连接公式如下:
式中:w为权值;b为偏置。通过该公式可以整合为一维向量。
第四部分是使用Softmax回归层对全连接层的输出做线性回归,计算出每一类物品的得分。Softmax值的计算方法如下:
多分类下的交叉熵损失Loss计算方法如下[6]:
式中:K为类别数量;y为布尔值,指代是否属于该类别;p为属于类别c的概率。
3.2 图像识别实验结果
本文采用生活中最常见的三种垃圾:饮料瓶、废纸箱、废报纸作为测试集。通过网上下载符合要求的图片获取测试垃圾对应的图片,少量来自于手动拍摄。本文共收集的原始数据集有2 497张图片,其中饮料瓶图片445张、报纸图片988张、纸箱图片1 064张。
对原始数据进行处理,使其适应神经网络。首先,统一图片大小,将所有图片储存转化为64×64;之后,打乱原有图片顺序,分成测试集与训练集;最后,对图像进行旋转、缩放、裁剪、归一化操作。
本文根据训练的数据规模,把实际训练的次数设置为2 000次,每训练10次打印一次识别精确度,得到的结果如图3所示。
从图像可以看出,训练开始时,系统识别精度极低,随着训练次数的增加,训练精度迅速增加,但训练精度波动较大。当训練次数达到1 250左右时,精度基本保持在100%,偶尔有小幅波动。此时训练的模型精度已经达到了使用需求。
得到所需的模型后,开始进行实际测试。使用的图片包括饮料瓶图片128张、废报纸图片113张、废纸箱图片106张。图4所示分别为报纸和饮料瓶识别的效果,准确率如图5所示。
3.3 机器学习在树莓派上的移植
为了可以使卷积神经网络算法能够在算力相对较低的树莓派中快速、稳定地运行,本文将CNN神经网络算法拆分为模型训练和图像识别两部分,进行针对性使用。具体做法如下所示:
(1)在电脑上搭建卷积神经网络;
(2)在电脑上测试训练的模型;
(3)将识别算法和训练好的checkpoint模型移植到树莓派上。
本文在树莓派上搭建了所需的Python环境,重复实验后得到图6所示的结果。
由上图可知,在树莓派上的实验结果与电脑环境下的实验结果接近,符合使用需求。
3.4 温度检测
非接触红外线测温探头可以通过测量目标表面所辐射的红外能量来确定表面温度[7]。垃圾存放在垃圾桶中时,有可能因为未灭的烟头或者桶内的特殊环境(包括可燃气体、温度等)等情况引起火灾。为了保护人民财产安全,本文通过红外线测温探头来感知垃圾桶内是否存在火情。
MLX90614ESF红外测温传感器通信流程如图7所示。使用树莓派通过该模块获取温度信息的具体过程:启动传感器,发送唤醒模式指令写入地址,经过33 ms,传感器开始收集数据,并将数据写入指定地址。之后启动传输时序传输数据,采用PWM模式与SMBus模式输出[8]。本文选择使用SMBus模式,其时序如图8所示。该传输模式规定,在同一时刻只有一个主控器有效,可以通过“写数据”与“读数据”方式完成主设备与模块之间的数据传递,因此可使用树莓派通过读取RAM指定地址来读取温度数据。从MLX90614读取的数据为16位,由高8位和低8位组成,范围从0x27AD到0x7FFF,即-70 ℃到382.19 ℃,温度数据To的计算方式为:To=高8位<<8|低8位。
若要得到摄氏温度,首先将温度数据To转化为十进制,之后将得到的结果除以50,转化为热力学温度,最后将得到的开尔文温度减去273.15,得到摄氏温度。
3.5 超声波测距
超声波测距基于超声波渡越时间法[9]。设超声波脉冲从传感器发射又被传感器接收的时间为t,超声波在空气中传播的速度为v,则目标物体到传感器的距离x可由以下公式计算得出:
本文采用的HC-SR04超声波测距模块集成了CS100超声波测距芯片,工作电压范围为3.3~5.5 V,可以提供2~600 cm的距离感应,探测精度为0.1(1±1%)cm。HC-SR04的测量过程如图9所示。首先,向Trig管脚输入一个大于10 μs的高电平,之后,发射探头循环发出8个40 kHz的脉冲,并由HC-SR04通过Echo管脚向树莓派返回一个持续时间为脉冲信号往返时间的高电平。测量过程中,整个测量周期取决于测量距离,测距模块在Echo管脚输出高电平后,即可开始下一次测量。测量距离较长时,测量周期便相应增长。具体实现步骤如下:
(1)使用函数gpio_setup_cdev创建字符设备;
(2)使用gpio_open配置输入接口;
(3)使用函数gpio_read读取测距模块发出的距离数据;
(4)加入循环使设备可以持续读入距离数据。
本文将该模块安装在收纳桶的顶端,通过垃圾与顶部之间的距离估算垃圾的承载量,数据将用于满溢判断与清扫的路径规划。
3.6 烟雾报警检测
烟雾传感器的原理:利用气敏材料在空气中电阻率的不同,将烟雾或可燃气体的浓度转化为电信号。
MQ-2烟雾气敏传感器的气敏材料是在清洁空气中电导率较低的二氧化锡,二氧化锡的電导率可以随着可燃气体和烟雾浓度的增大而增大。该传感器具有TTL开关信号输出和模拟电压信号输出两种模式,为了得到较为准确的气体浓度信息,本文采用模拟信号输出模式,利用其输出电压与浓度成正相关的特点,可以将模拟端(AO)输出的信号输入A/D转换器,将模拟量转换为与传感器检测浓度对应的数字量,得到烟雾或可燃气体浓度的精确值[10]。
3.7 手机客户端
本文在基于Java环境下的扩展平台Eclipse制作设计了配套的手机APP[11]。APP通过TCP通信协议连接至系统的云服务器,实时接收服务器获取的垃圾桶数据信息,有助于管理人员得到最新数据。APP与服务器的通信方式与上文中树莓派与服务器的通信方式一致,但实现的语言不同。实现过程分为4个步骤:建立Socket对象,通过IP与端口连接;创建接收与收发的资源配置;建立监听循环机制;跳出循环关闭连接。
本文APP的地图显示与路径规划功能通过调用高德地图URI API接口实现,具体实现方式如下:
(1)调用markers将街道垃圾桶位置添加入地图;
(2)将垃圾桶位置与下传数据捆绑,实现可视化与数据查看的功能结合;
(3)通过调取满溢垃圾桶位置,将各满溢或即将满溢的垃圾桶串联,设置起始位置和经过位置,将mode设置为walk,将callnative的值设置为0,由此实现路径可视化。
APP具体功能如下:
(1)点击数据地图上的垃圾桶图标,查看垃圾桶的各项数据;
(2)出现火情时,手机APP报警,通知相关人员及时处理;
(3)可以自动规划最优清洁路径,既减轻了清洁人员的工作压力,也可以让急需清理的垃圾桶得到及时处理,提高工作效率。
4 实验结果
系统测试分为如下两个方面:
(1)测试垃圾桶的垃圾处理性能,已在软件部分进行展示;
(2)测试软件系统的能力,本文通过选取一定区域,用服务器模拟情景进行测试。
垃圾桶数据地图如图10所示。改变服务器发送的相关参数,测试火情情况,手机客户端的报警系统如图11所示。垃圾桶清洁路径规划如图12所示。
5 结 语
本文设计了一种基于NB-IoT的垃圾分类及处理系统,其上位机是手机APP客户端,下位机由树莓派及其搭载的红外测温传感器、超声波测距模块、烟雾及可燃气体传感器以及电机和垃圾箱本体等组成。通过摄像头采集图像数据,图像识别系统对垃圾进行自主识别,将垃圾分类投放,通过温度传感器和烟雾传感器上传到处理器的数据判断是否有火情发生,若温度和烟雾浓度超过安全阈值则向手机APP发送火情警报。最后把垃圾桶装载信息送入服务器,形成垃圾桶数据地图,在手机客户端查看,如果有火情发生,会在客户端报警,通知相关人员及时处理。如果垃圾桶的装载量达到设定阈值,便会规划出清洁路径,通知清洁工进行处理。测试结果表明,此系统可以可靠地工作,相较于传统垃圾桶,可以减轻普通居民生活压力和清洁工的工作压力,提高垃圾分类效率,高效地对垃圾进行分类、处理,并能够即时报警,在物联网时代拥有出色的应用前景。
参考文献
[1]张文涯.基于嵌入式Linux的网络视频监控系统设计与实现[D].成都:西南交通大学,2009.
[2]何进,谢松巍.基于Socket的TCP/IP网络通信模式研究[J].计算机应用研究,2001(8):134-135.
[3]江衍煊,郑振杰,游德智.单片机连接ULN2003驱动步进电机的应用[J].机电元件,2010,30(3):28-31.
[4] Sadaqat ur Rehman,Shanshan Tu,Muhammad Waqas,et al. Unsupervised pre-trained filter learning approach for efficient convolution neural network [J]. Neurocomputing,2019.
[5] KRIZHEVSKY A,SUTSKEVER I,HINTON G. ImageNet Classification with Deep Convolutional Neural Networks [C]// NIPS. Curran Associates Inc. 2012.
[6] Kin Wah Edward Lin,B T Balamurali,Enyan Koh,et al. Singing voice separation using a deep convolutional neural network trained by ideal binary mask and cross entropy [J]. Neural computing and applications,2020,32(4):1037-1050.
[7]李静,裘祖荣,齐永利.MLX90601系列红外测温模块的原理及应用[J].国外电子元器件,2006(1):47-50.
[8]崔健,鲁志平.SMBus协议分析及其在双MCU通信中的应用[J].微计算机信息,2004(6):99-100.
[9]李军,申俊泽.超声测距模块HC-SR04的超声波测距仪设计[J].单片机与嵌入式系统应用,2011,11(10):77-78.
[10]张群强,赵巧妮.基于MQ-2型传感器火灾报警系统的设计[J].价值工程,2015,34(13):96-98.
[11]谢恩泽华,刘向前,王小丽,等.利用手机APP制作平台建设组织胚胎学移动学习课程的实践与思考[J].中国组织化学与细胞化学杂志,2015,24(2):193-194.