收藏和点赞,您的关注是我创作的动力
概要
本文首先分析了垃圾分类国内外研究现状,针对我国的垃圾分类情况,本文先采用OpenCV将载入的垃圾图像进行滤波,边缘化,找外接矩形等操作;再采用mobilenetv3_Small模型对716张垃圾图像进行训练,得到训练模型,同时利用Tensorboard可视化,展示训练过程;然后进行垃圾图像识别与分类;最后采用串口通信将垃圾图像识别的结果传输给STM32,在LCD液晶显示屏上显示结果,实现垃圾分类。
关键词:图像识别;STM32;垃圾分类;深度学习;OpenCV
一、课题研究主要内容
课题研究主要内容
分析完国内外垃圾分类研究现状后,鉴于我国垃圾分类设备还不完善,本课题设计了一种垃圾分类系统,能实现垃圾图像的自动识别,分类。采用OpenCV图像处理功能提取图像的主要特征,缩小识别范围,实现图像的分割[19],再基于MobileNet V3模型实现图像识别与分类[20]。本课题研究的主要内容包括:
(1)基于OpenCV的图像处理算法
采用OpenCV对图像进行分割,完成对载入图片的滤波和边缘检测,对图片进行二值化,完成外接矩形轮廓的寻找,最终在图片上分割出物体所在位置。
(2)卷积神经网络图像识别与分类
运用MobileNetV3_Small模型进行垃圾识别、分类,将常见垃圾分为可回收垃圾、厨余垃圾、有害垃圾和其它垃圾四大类,利用Python和TensorFlow搭建实验环境[21],用MobileNetV3_Small预训练模型训练自己制作的数据集并保存,得到训练的准确率和损失值,最后完成图像的识别与分类[22]。
(3)垃圾分类硬件系统
硬件系统采用STM32开发板,选用STM32F103ZET6作为主芯片,根据功能要求确定器件的选型,设计程序,用ST-LINK/V2调试器下载程序到开发板,实现计算机与开发板之间的数据通信,最终将图像分类结果展示在LCD显示屏上
二、系统总方案设计
2.1 系统总体方案确定及分析
2.1.1 系统总体方案概述
根据课题设计要求,在学习OpenCV基本操作方法和卷积神经网络基本知识后,采用OpenCV进行垃圾图像分割[23],将提供的图片特征提取出来,确定物体在图像中的区域;然后训练模型,用CNN卷积神经网络实现垃圾图像的识别与分类[24];最后将识别的结果传送给STM32,
2.1.2 系统总体框图设计
系统的具体组成主要包括OpenCV图像分割模块,CNN卷积神经网络图像识别模块,系统总体结构框图如下图2.1所示。
图2.1 系统总体结构框图
2.1.3 主芯片的选择
进行硬件系统设计前要考虑诸多因素,如设计成本,设计时间,设计项目的难易程度等,选择合适的芯片是至关重要的。经过性能,价格和功能对比,本课题硬件设计模块开发板用的是STM32F103ZET6芯片。
STM32F103ZET6是一个基于ARM Cortex-M3内核的32位通用微控制器,它拥有256到512KB的闪存,还有高达72Hz的工作频率,它的3个12位模数转换器可以实现三倍采样和保持功能。
2.2 系统主要模块介绍
2.2.1 OpenCV垃圾图像分割
OpenCV是一个开源计算机视觉库,它是在VC++编译环境下运行的,可以实现物体识别和图像分割等功能。OpenCV分割垃圾图像包括以下几个步骤:加载图像、显示图像、处理图像[25]。加载图像即将图像数据从文件夹中加载进来,显示图像由namedWindow和imshow函数实现,在创建的窗口上显示加载进来的图片,处理图像就是运用一些基本算法完成对图像的转换,如色彩转换,形态学操作,阈值化操作和膨胀腐蚀操作等。
2.2.2 CNN卷积神经网络识别垃圾图像
一个卷积神经网络一般由5种结构组成,分别是输入层、卷积层、池化层、全连接层和Softmax层[26]。输入层是用来输入数据的,一般是图片的像素矩阵;卷积层在卷积神经网络中占据了重要地位,卷积层工作是先定义一个卷积核,一般为33或55的卷积核,用定义的卷积核提取原图像中的像素值,进行矩阵对应相乘在相加,得到卷积层输出,在卷积层的计算过程中每层的神经元都只会和上一层中的部分神经元相连;池化层用来提取图像的主要特征,池化有两种常见的形式,分别是最大池化和均值池化。最大池化就是在每个选定的区域内选取最大的数值来代替这片区域,最终得到一个全新的图像,而均值池化就是取区域里的平均值;全连接层则是起一个分类器的作用,使用激活函数,用梯度下降算法将参数优化,传入下一层,进行损失值计算,并将分类结果输出;softmax层是用来输出物体概率的,即将神经网络的输出转变为概率的输出,因此,softmax层所有输出的概率和为1,其计算公式如
2-1所示:
卷积神经网络的出现解决了传统神经网络不能解决的问题,它的出现加深了神经网络层数,使深度学习由此展开。本课题就是基于深度学习的垃圾图像识别。
2.2.3 硬件系统简介
垃圾分类硬件系统采用了ALIENTEK精英STM32F103开发板,该开发板资源充分,小巧精致,设计灵活,接口和功能模块丰富,可以验证多个内部资源,选用了STM32F103ZET6芯片。在Keil中设计程序,将垃圾分为四大类,连接开发板与计算机,用STLINK/V2调试器将仿真成功的程序下载到开发板,进行硬件调试,将CNN图像识别的结果发送给计算机,收到对应的指令,显示屏就能显示出相应的垃圾分类
三、系统实现
3.2 垃圾图像滤波
图像滤波对目标图像噪声进行去除,是图像处理的重要部分,在图像预处理方面应用广泛,图像滤波的好坏决定着后续处理的结果好坏。由于收集的垃圾图像并不是完全光滑的,垃圾周围或多或少都会出现杂物,在进行垃圾分割前要先滤波,去除周围的噪声,使图像变得平滑。本文使用的是线性领域滤波中的高斯滤波。
高斯滤波器的本质是一个低通滤波器,它可以根据高斯函数的形状来选择权值,通过对整个图像的像素值加权平均来实现滤除噪声的功能,被称为最有用的滤波器。如图3.4所示为玻璃瓶的高斯滤波程序,滤波前后玻璃瓶的对
比如图3.5、3.6所示。
图3.4 高斯滤波算法
图3.5 图像滤波前
图3.6 图像滤波后
由图3.5和图3.6的对比分析得出,使用高斯滤波后,图像的对比度降低了,原图中玻璃瓶贴纸的像素被模糊化了,贴纸上的特征,颜色被弱化,一些不相关的的噪声信号被成功滤去了,但依旧保留了图像的轮廓和边缘。
3.3 垃圾边缘检测
要想将垃圾从图像中分割出来,就要先找到图像的边缘,确定分割范围。边缘检测是用来检测图像边缘部分的。计算一幅图像的微分,得到的dy大小就表示图像边缘的强弱。在边缘检测时,滤波模板应设置为奇数,这样卷积出来的结果就能放在中间,如果滤波模板为偶数,那么结果就会出现0.5的偏差,无法放在正中间。因此,本设计中模板设为3。边缘检测是基于边界进行图像分割的基础,图像分割的依据就是边缘,常用的边缘检测算子有Canny算子,Sobel算子和Laplacian算子等。
本文采用的是Sobel边缘检测。先在垃圾图像的x,y两个方向上分别求导,单独显示x,y两个方向上的图,再利用图像加算法合成一张图,便于后续观察。如图3.9所示,采用Sobel边缘检测算法后,图像将易拉罐的边缘和突出地方用线条表明出来,减少了图像的内容,提取了图像的重要轮廓特征,便捷了之后图像的分类匹配。如下图3.7所示为Sobel边缘检测的程序,图3.8和3.9分别是边缘检测前后的图像。
图3.7 Sobel边缘检测算法
图3.8 Sobel边缘检测前
图3.9 Sobel边缘检测后
Sobel边缘检测时有两个模板,一个用于水平方向,一个用于垂直方向,先在两个领域各自进行加权平均,再进行一阶微分处理,可以得到想,x,y两个方向的边缘检测图,图3.9是使用图片加算法得到的边缘检测合成图。
硬件设计实物图
主要程序
硬件实物图反面
附录B:主要程序清单
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "key.h"
#include "usmart.h"
#include "malloc.h"
#include "sdio_sdcard.h"
#include "w25qxx.h"
#include "ff.h"
#include "exfuns.h"
#include "text.h"
int main(void)
{
u16 key;
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
usmart_dev.init(72);
LED_Init();
KEY_Init();
LCD_Init();
W25QXX_Init();
my_mem_init(SRAMIN);
exfuns_init();
f_mount(fs[0],"0:",1);
f_mount(fs[1],"1:",1);
while(font_init())
{
LCD_Clear(WHITE);
POINT_COLOR=RED;LCD_ShowString(30,50,200,16,16, "ELITE STM32F103 ^_^");
while(SD_Init())
{LCD_ShowString(30,70,200,16,16,"SD Card Failed!");
delay_ms(200);
LCD_Fill(30,70,200+30,70+16,WHITE);
delay_ms(200);
}LCD_ShowString(30,70,200,16,16,"SD Card OK");LCD_ShowString(30,90,200,16,16,"Font Updating...");
LCD_ShowString(30,110,200,16,16,"Font Update Success! ");
delay_ms(1500);
LCD_Clear(WHITE);
}
POINT_COLOR=RED;
Show_Str(30,50,200,16,"欢迎来到智能垃圾分类",16,0);
Show_Str(30,70,200,16,"测试开始!”,16,0);
Show_Str(30,90,200,16,"南京工程学院”,16,0);
Show_Str(30,110,200,16,"2021年5月20日",16,0);
Show_Str(30,130,200,16," 该垃圾的识别结果是",16,0);
while(1)
{
LED0=!LED0;
key=KEY_Scan(0);
if(key)
{
switch(key)
{
case WKUP_PRES:
POINT_COLOR=BLUE;Show_Str(30,150,200,16,"可回收垃圾 (塑料)”,16,0);LCD_Fill(30,150,200+20,
110+16,WHITE);
break;
case KEY1_PRES: POINT_COLOR=BLUE; Show_Str(30,150,200,16," 有害垃圾 (电池) ",16,0);LCD_Fill
(30,150,200+20,110+16,WHITE);
break;
case KEY0_PRES: POINT_COLOR=BLUE; Show_Str(30,150,200,16," 其它垃圾 (纸杯)",16,0);LCD_Fill
(30,150,200+20,110+16,WHITE);
break;
}
}else if(KEY0==0&&KEY1==0){POINT_COLOR=BLUE; Show_Str(30,150,200,16,"厨余垃圾 (香蕉皮)",16,0);
LCD_Fill(30,150,200+20,110+16,WHITE);
}
}
}
四、总结
随着垃圾分类问题逐渐成为人们关注的重点,智能垃圾分类系统成为现阶段人们研究的热门方向。近几年,深度学习技术不断地进步,数据处理能力不断提升,深度学习算法在图像识别方面一骑绝尘。本论文首先提出了总体方案的设计,分析对比卷积神经网络各种模型和优化器,最终制定了适合本课题的方案。本文的主要研究内容有以
下几点:
(1)基于OpenCV的图像分割,经过滤波、边缘检测、二值化等一系列操作后,提取图像的特征,确定图像的位置,并用外接矩形标注出来。
(2)基于mobilenetV3的垃圾图片识别与分类,收集图像数据,进行模型训练,用预训练模型训练自己的数据集,得到训练准确率和损失值,并对训练过程和结果进行分析。
(3)基于STM32的垃圾分类系统,通过Keil编写程序,ST-LINK下载程序,进行综合调试,最终在STM32开发板上显示垃圾分类。
四、文章目录
目 录
摘 要I
ABSTRACTTII
第一章 绪 论1
1.1 课题研究背景及意义1
1.2 国内外研究现状1
1.3 课题研究内容3
1.4本章小结3
第二章 系统总方案设计4
2.1 系统总体方案确定及分析4
2.2 系统主要模块介绍5
2.3 本章小结6
第三章 OpenCV垃圾图像分割7
3.1 OpenCV基本操作7
3.2 垃圾图像滤波8
3.3 垃圾边缘检测10
3.4 图像灰度化、二值化设计12
3.5 图像外接矩形16
3.6 本章小结17
第四章 CNN垃圾图像识别18
4.1 开发环境搭建18
4.2 数据集的制作与分析18
4.3 模型与优化器的选择19
4.4 垃圾分类训练分析21
4.5 本章小结25
第五章 垃圾分类系统硬件设计26
5.1 ALIENTEK精英STM32开发板26
5.2 程序设计28
5.3 程序下载与调试32文章来源:https://www.toymoban.com/news/detail-765038.html
5.4 本章小结34
第六章 系统调试、结果与成本分析35
6.1 系统调试与分析35
6.2 数据结果记录与分析36
6.3 系统成本分析37
6.4 本章小结37
第七章 总结与展望38
7.1 全文总结38
7.2 研究展望38
致 谢39
参考文献40文章来源地址https://www.toymoban.com/news/detail-765038.html
到了这里,关于基于STM32和OpenCV的垃圾分类系统设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!