一、垃圾桶类型
(1)有害垃圾桶
(2)可回收垃圾桶
(3)厨余垃圾桶
(4)其他垃圾桶
分别代表:有害垃圾、可回收物、厨余垃圾、其他垃圾。
分类垃圾桶的颜色分别代表如下:
(1)红色垃圾桶
红色代表有害垃圾。有zhi害物质包括废电池、荧光灯管、油漆、过期药dao品、化妆品等等不可回收,且带有一定污染危害的物质。
(2)绿色垃圾桶
绿色代表厨余垃圾。厨余垃圾可以作为植物养分的肥料使用,土壤掩埋后可被大自然微生物和植物分解吸收,起到废物再利用的作用。
(3)蓝色垃圾桶
蓝色代表可回收再利用垃圾,包括塑料、纸类、金属等有利用价值的物质,这些物质将被纳入废品回收系统,作资源再生处置使用。
(4)灰色垃圾桶
除了有害物质与可回收物质以外的垃圾,砖瓦、陶瓷、渣土等难以回收的废弃物,这类物质一般会被焚烧、掩埋等处理。
分类垃圾桶,不管是从他的真正意义上的使用价值还是实用价值,或者是他的质量和价格都是突出,人们s先分类垃圾桶,对于生活中每个家庭里的分类垃圾桶都是默默无闻无私奉献,在家里z需要的时候它就会出现在我们的面前,对于分类垃圾桶我们已经很自觉的已经把它默认为生活中的必需品更是家庭中的一分子。
二、系统设计
1. 建立图像识别库
从网上查找“有害垃圾”、“可回收物”、“厨余垃圾”和“其他垃圾”4种垃圾桶图像,形成垃圾桶图像库。
2. 图像数据归一化
对于深度学习卷积神经网络需要输入的图像大小是一致的,因此对所以类别的图像进行归一化处理,是每张图像大小一致。
主要目的是由两个一个是训练时需要所以图像大小一致,还由一个时模型训练的时候数据太大会导致训练时间太长。
原图
归一化图像
3. 建立深度学习卷积神经网络
采用matlab深度学习工具箱,对4类垃圾桶图像进行训练,建立分类模型。网络设置如下:
layers = [
imageInputLayer(inputSize) % 输入图像
convolution2dLayer(5,20) % 卷积层
batchNormalizationLayer % 批量归一化
reluLayer % Relu激活函数
fullyConnectedLayer(numClasses) % 全连接层
softmaxLayer % softmax 层
classificationLayer]; % 输出类别
训练设置:
options = trainingOptions('sgdm', ... % 优化函数 sgdm
'MaxEpochs',20, ... % 最大迭代次数
'ValidationData',imdsValidation, ... % 显示验证集误差
'ValidationFrequency',30, ... % 验证频率,几个batchsize后验证一次
'Verbose',false, ... % 实时训练进程,默认为true
'Plots','training-progress'); % 画出实时训练进程
4. 对未知图像进行识别
从网上查找“有害垃圾”、“可回收物”、“厨余垃圾”和“其他垃圾”4种垃圾桶图像,对模型进行识别。
首先对网上下载的图像进行归一化处理,然后再进行识别。具体代码如下所示。
%% 预测
% 判断是否已经建立模型
if isfield(handles,'net') == 0 % 如果变量 handles.net没有定义
errordlg('请先建立模型!') % 弹出错误对话框
return
end
% 导入图像
[filename, pathname, ~] = uigetfile(...
{'*.jpg','图像文件(*.jpg)';'*.png','图像文件(*.png)';...
'*.bmp','图像文件(*.bmp)';'*.tif','图像文件(*.tif)'},...
'MultiSelect','off');
% 判断是否选择图片
if isequal(filename,0)||isequal(pathname,0)
return; % 如果没有选择图像文件结束程序
end
%% 读取图像
fig_name = strcat(pathname, filename);
I = imread(char(fig_name));
newI = imresize(I,[50,50]);
axis(handles.axes1)
imshow(I)
%% 预测
net = handles.net;
testImage = newI;
testLabel = classify(net, testImage);
if testLabel == "1"
y_label = '厨余垃圾桶';
elseif testLabel == "2"
y_label = '可回收垃圾桶';
elseif testLabel == "3"
y_label = '其他垃圾桶';
elseif testLabel == "4"
y_label = '有害垃圾桶';
end
set(handles.edit8,'string',y_label)