垃圾分类系统中的用户端设计

2022-06-08 03:03王鹏程刘兴云
关键词:电路图人脸垃圾桶

王鹏程,胡 成,刘兴云

(湖北师范大学 物理与电子科学学院,湖北 黄石 435002)

0 引言

垃圾分类是垃圾处理过程中的重要环节,一直以来都是各级政府倡导和推进的重要工作。由于基础配套设施不完善和人们垃圾分类意识薄弱,导致目前收集到的垃圾大部分仍是混合垃圾,极大地影响了垃圾处理的效率[1]。

对于垃圾的前端收集,目前有效的措施为人工引导,或智能垃圾收集设施的大范围铺设。人工引导工作量巨大。国外的智能垃圾桶,如美国纳士达,德国ccko、泽顿和日本体感智能垃圾桶等,大多基于红外感应器,液晶显示屏,国内的研究,基于NB-IoT技术的智能垃圾桶,不满足自动识别分类的需求[2]。随着智能识别的发展,出现了基于机器视觉的智能垃圾桶,可以识别投入的垃圾并自动分类,但大范围铺设成本高昂,一次投放的垃圾过多或以垃圾袋方式投放时,这种垃圾桶不能被很好地处理[2~4]。

用户倾向于从自身利益的角度来对待环境问题,这种功利心理往往造成垃圾源头分类不能达到预期效果[5]。考虑从用户端解决这个问题,设计了基于人脸识别的垃圾分类系统,可以适配在现有的垃圾桶上,结合人脸识别和服务器对个人垃圾分类情况进行更精准的监督。经济激励能够促进用户进行垃圾分类,设计增减积分、积分兑换奖励的模式来鼓励用户进行垃圾分类[6]。

1 系统架构

垃圾分类系统主要由支持各种功能的嵌入式主控、对采集数据进行处理的服务器和能适配现有垃圾桶的机械结构构成。基于成本与体积考虑,选用的是Linux系统板作为嵌入式主控,开发了服务器端程序,机械部分设计为不锈钢支架结构,能将垃圾桶放置在支架上。系统架构图如图1所示。

图1 系统架构图

每种类别的垃圾桶都配置有垃圾分类系统,当用户持垃圾走到对应垃圾桶附近时,摄像头会抓取到包含用户人脸的图像信息,在Linux系统端会对每一帧图像进行人脸检测,将包含人脸的区域进行剪裁并保存到本地,对用户投入的垃圾称重并计算积分,然后将人脸图片与垃圾重量数据上传至服务器。服务器端对接收到的图片和垃圾重量信息在数据库中进行保存与更新,同时设计了网页前端对数据库进行查看和管理,方便登记用户的个人信息,以及查询积分和兑换奖励。在处理分类投放错误的垃圾时,可以根据垃圾重量及人脸图像找到个人进行积分减扣,实现更有效的个人监督。整个投掷过程中,用户的体验与正常扔垃圾没有太大区别。

2 硬件设计

2.1 电源模块

Linux系统板,放大电路部分均为5V直流供电,A/D转换部分为3.3V供电。对于前置放大电路中的ICL7650与二级放大电路中的OP07,正负供电的输出信号更加精准,但正负两种供电会增加电路复杂度。如果使用单电源供电,对输出的精度会有一定的影响,但电路复杂程度降低很多,电源供电更加稳定。为了研究单电源供电是否能满足使用要求,对单电源工作时的放大电路的输出电压进行了测试。试验载重为0~60kg变化,试验结果如表1所示。

表1 载重0~60kg变化情况下放大电路各级输出表

从表1可以看出,二级电路(正相放大)变化范围只有3V不能满足需求,但是反相放大的变化范围4.3V可以满足,再考虑到单电源电路更简单稳定,所以选择单电源供电模式。

1)Linux系统板部分,用5V进行供电,外设如摄像头,音箱等挂载在系统板的接口上。2)放大电路部分,用系统板的5V接口引出作电源,经过整流滤波后给放大电路供电。放大部分供电电路图如图2所示。3)A/D转换部分,通过AMS1117将5V降到3.3V给A/D转换电路部分进行供电。5V转3.3V电路如图3所示。

图2 放大部分供电电路图

图3 5V转3.3V电路图

2.2 称重传感器采集电路

称重传感器数据采集电路主要由压力传感器电路、信号放大电路、A/D信号转换电路构成。流程图如图4所示。

图4 称重采集数据流程图

2.2.1 压力传感器 压力传感器能将压力转换为电信号。本设计使用的为E型半桥应变式称重传感器,结构如图5所示。该压力传感器为半桥传感器,不是一个完整的桥路,本设计采用四个半桥传感器组成全桥使用,如图6所示。利用惠斯通电桥原理把外部的压力通过传感器的弹性梁变形使其贴在上面的电阻式应变片发生阻值变化,在激励电压的作用下,输出与被测物成正比的模拟电信号。组成全桥后,其理论最大称重200 kg,输出灵敏度1.0mV/V,在激励电压为5V的情况下,理论满量程输出为5mV.全桥传感器本身存在零点漂移,所以在两个信号输出端串接可调电阻来进行调零。

图5 压力传感器结构图

图6 压力传感器组成全桥电路图

2.2.2 放大电路 压力传感器满量程输出5mV,与A/D转换需要的电压值相差很大,所以选用了两级放大电路来进行放大,由ICL7650构成前置放大电路,OP07构成二级放大电路。

1)前置放大电路

前置放大电路主要由ICL7650构成,该芯片是利用 CMOS 工艺和动态校零技术制作的一款斩波稳零式高精度运算放大电路,具有输入偏置电流小、失调小、增益高、共模抑制能力强、响应快、漂移低等优点。前置放大电路图如图7所示,因为系统是单电源供电,所以采用差分信号输入。压力传感器输出的信号Vout+接入IN-,Vout-接入IN+,进行反相放大,放大倍数为100倍[7,8]。

图7 ICL7650前置放大电路图

2)二级放大电路

二级放大电路主要由OP07构成,是一种非噪声,非斩波稳零的双极性运算放大集成电路。由于有非常低的输入失调电压,所以不需要额外的调零措施。放大电路如图8所示,将ICL7650输出的电压信号放大10倍。为了能在单电源供电的情况下使用,二级放大电路设计为反相放大,通过程序调整对反变换进行矫正[8]。

图8 OP07二级放大电路图

2.2.3 A/D转换电路 A/D转换电路主要由ADS1115构成。ADS1115是具有16位分辨率的高精度模数转换器,具有一个输入多路复用器,可以提供2个差分输入或4个单端输入。16位二进制数,第一位为符号位,因为只使用了正数范围,所以输出数据为15位二进制数,即0~32767.放大后的电压变化范围为0~4.3V,可知实际最大称重为172 kg.通过计算可知,1个二进制数变化对应5.24 g,精度符合需求。因为二级放大电路是反相放大,所以采集后的数据为32767~0变化,需要在程序算法进行调整。A/D转换电路图如图9所示。

图9 A/D转换电路图

2.3 结构设计

考虑配置到现有的垃圾桶上。具体设计为底座加支架的结构。底座设计类似电子秤,两层钢板中间固定传感器,为了稳固,四个传感器分别固定在四角。在底座后端,固定一根长杆,顶端放置摄像头、音箱等外设,从底座到摄像头的距离是常见垃圾桶高度加盖长。对每一个种类的垃圾桶都进行装配。系统结构图如图10所示。

图10 系统结构设计图

根据垃圾桶的建模结构设计图,进行实物制作,如图11所示。

图11 实物图

3 软件设计

本设计的程序主要有三个部分:1)Linux端,主要有人脸检测部分,称重采集数据部分,服务器通信部分;2)服务器端,主要有人脸识别部分,通信部分,数据库存取部分;3)网页前端,用于管理数据库。

3.1 人脸检测识别

人脸检测识别有两个部分,第一个是人脸检测,Linux系统端检测摄像头的每一帧图像是否有人脸并剪裁出人脸区域图像,保存到本地;第二个是人脸识别,在服务器PC(Personal Computer)端根据收到的人脸图片与数据库中的用户图片对比,完成识别。如果是数据库中没有的新用户图像,则进行保存。

3.1.1 Linux系统端 Linux系统端是人脸检测。需要把摄像头每一帧的图像进行人脸检测,将人像部分标注矩形框,根据标注的矩形框进行图片剪裁,将剪裁的人脸图片保存在本地文件夹中。

以TensorFlow1.14为工具,使用深度卷积神经络的人脸检测和人脸对齐方法——MTCNN(Multi-task convolutional neural networks)。MTCNN由三个神经网络构成:P-NET,R-NET,O-NET。首先将图片缩放到不同尺度,这样不同大小的脸可以进行同尺度的检测识别。

算法使用了三个神经网络。P-Net的输入是一个宽和高皆为12像素,同时是3通道的RGB图像,该网络要判断这个12×12的图像中是否含有人脸,并且给出人脸框和关键点的位置。R-NET对P-NET的结果进一步调优,结构与P-NET类似,不同在于R-Net是24×24×3的图像,P-Net,R-Net结构如图12所示。所得区域放大到48×48,输入到O-NET,O-NET结构同P-NET类似,不同在于输入的是48×48×3的图像,O-Net结构如图13所示。

图12 P-Net,R-net网络结构

图13 O-Net网络结构

整体来看,从P-Net到O-Net,网络输入的图片越来越大,卷积层的通道数越来越多,内部层数也越来越多,识别的准确率是越来越高的。P-Net到O-Net识别速度依次递减,准确率依次递增,如果只是用O-Net,识别速度会特别慢。采取这种结构的优点在于,通过P-Net,R-Net过滤后,O-Net的识别速度会快很多,整体识别速率快,准确率高。实现过程如图14所示[9,10]。

图14 实现过程

3.1.2 服务器PC(Personal Computer)端 服务器接收到人脸区域的图片后,接下来进行人脸识别。输入神经网络的是图像,经过一系列卷积计算后,全连接分类得到类别概率[10]。

在原始的CNN模型中,使用的是Softmax损失,对人脸来说,每一类就是一个人。Softmax损失可以区别每个人,单本质上对每一类向量表示之间的距离没有做出要求。使用中心损失定义改进这种情况。

设人脸图像为xi,对应类别yi,类别中心cyi,对应特征f(xi)。

中心定义为

多张图像中心损失为值加在一起

L=Lsoftmax+γLcenter

在提取特征值后,这种特征已经具有相同人对应向量距离小,不同人对应距离大的特点,只需要计算向量之间的距离,设定合适的报警阈值。

3.2 称重采集数据算法

称重算法是将输入的AD值转换为稳定的重量数据输出。

采样频率50Hz,算法流程图如图15所示。1)判断AD值是否发生变化。输入的AD值会在一个小范围内波动,当AD值处于一个范围数d中时,认为AD值不变,即此时处于稳定的状态,当AD值大于这个范围数d时,认为AD值发生变化,即重物状态发生变化。2)变化后判断是否稳定。垃圾刚扔入垃圾桶时,会有一个短暂的冲击,所以,当采集的AD值发生变化时,每接收到一个AD值,都会与上一个AD值进行比较,差值小于d,计数加1,差值大于d,计数清零,当计数达到n时,认为扔进的垃圾已经稳定,输出此时的AD差值。3)取均值。当状态稳定后,对输出的重量变化值取m个计算均值输出,即投入垃圾的重量。

图15 称重算法流程图

3.3 服务器-数据库

服务器-数据库部分主要是与Linux系统板通过Socket传输图片和文本信息,与数据库提取和存储图片及文本信息,传输过程如图16所示。

图16 Socket传输过程图

1)服务器端有一个程序在运行,Linux系统端与这个程序进行通信。Linux系统端先发送文本信息再发送图片信息。发送接收信息使用Python Socket模块中的send,recv命令。发送图片信息时,Linux系统端首先定义好文件头信息,包含文件名和文件大小,通过struct模块打包好后,先发送给服务器,之后文件则每次发送128bytes,经过多次循环后将整个文件发送给服务器端。服务器端通过struct模块获取到文件头信息,再将接收的图片文件存到本地,通过头文件信息给文件命名。

2)使用的数据库是MongoDB,一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。首先,建立一个数据库,在对应数据库中建立一个集合,通过GridFS实现图片的存取。程序流程,链接MongoDB,从本地目录遍历所有图片,将图片名字存到集合中,循环读取目录名字,在每一次循环中,使用目录地址加文件名构成存入地址,创建文件和写入流,把地址和名字拆分后将数据写入,并打印数据id。创建成功后,会在集合中产生fs.flies和fs.chunks.根据存储时打印的id读取图片,给予GridFS模块来写出[11]。

4 结语

通过实验验证,设计方案是可行的,系统运行能达到预期的效果。改善垃圾分类最好的环节是在用户端进行干预,做正确的垃圾分类投放。系统可以装配到现有的垃圾回收设施上,成本较低;通过人脸的采集和服务器数据库结合可以对个人行为进行更有效的监督和激励。

猜你喜欢
电路图人脸垃圾桶
带你学习实物电路图的连接
“且”的真与假
有特点的人脸
一起学画人脸
第7讲 电路图与动态电路专题复习
垃圾桶等
投进垃圾桶的信
投进垃圾桶的信
飞进垃圾桶
比亚迪E6纯电动汽车系统结构原理(四)