# 基于卷积神经网络的校园垃圾识别系统实现
# 1 需求分析
## 1.1 功能需求
### 1.1.1 基本功能
1. 客户端拥有对常见校园垃圾的识别能力
2. 客户端可以上传识别结果
3. 服务器可以接受并储存终端的识别结果
### 1.1.2 扩展功能
1. 客户端与客户端之间可以进行关于垃圾回收消息的实时交流
2. 服务器可以储存用户信息
3. 浏览器可以实时访问识别结果
## 1.2 数据需求
### 1.2.1 C/S 架构客户端数据需求
1. 实时识别的图像数据与字符串形式的识别结果
2. 字符串形式的用户信息
3. 字符串形式的聊天消息
4. 对GUI控件的操作信号
5. 套接字文件
### 1.2.2 C/S 架构服务器数据需求
1. 字符串形式的识别结果
2. 字符串形式的聊天信息
3. 字符串形式的用户信息
4. 套接字文件
5. 字符串形式的数据库信息
### 1.2.3 B/S 架构浏览器数据需求
对垃圾识别系统的整体情况的字符串显示
## 1.3 界面需求
### 1.3.1 C/S 架构客户端界面需求
当前客户端摄像头图像的呈现
识别按钮与识别结果呈现的文本框
用户信息(用户名,登录地址、端口)的输入文本
框以及对应的登录登出聊天室按钮
聊天消息输入文本框与发送按钮
实是聊天信息显示文本框
### 1.3.2 C/S 架构服务器端界面需求
显示当前服务器的命令行打印
### 1.3.3 B/S 架构浏览器界面需求
显示垃圾回收整体情况的器html界面
## 1.4 开发运行环境需求
### 1.4.1 客户端开发环境需求
Windows操作系统
mingw套件(g++\make\gdb)
cmake构建工具
QT6框架(mingw编译版)
opencv4框架(mingw编译版)
c++11标准库
### 1.4.2 客户端运行需求
QT6动态链接库
opencv4动态链接库
Windows动态链接库
mingw运行时动态链接库
### 1.4.3 服务器开发运行环境需求
linux操作系统(raspbian发行版)
GNU套件(g++\make\gdb)
mariadb数据库及开发套件
### 1.4.4 其他环境需求
chromene内核浏览器
# 2 概要设计
## 2.1 主要数据结构
### 2.1.1 服务器线程队列
服务器由于是多线程的实现,必然有多线程装载的容器,本程序选取了C++标准库的vector数据结构进行开发 其构造为:
![](https://www.writebug.com/myres/static/uploads/2021/12/15/bbd7aa3ed4798cbecd8085462f077521.writebug)
Vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新元素,因此vector的运用对于内存的合理利用与运用的灵活性有很大的帮助了。
Vector所采用的数据结构非常简单, 线性连续空间, 它以两个迭代器-Myfirst和-Mylast分别指向配置得来的连续空间中目前已被使用的范围, 并以迭代器-Myend指向整块连续内存空间的尾端。
为了降低空间配置时的速度成本,vector实际配置的大小可能比客户端需求大一些,以备将来可能的扩充,倍增扩容使均摊时间复杂度降至O(n)复杂度。
在本程序的运用中改数据结构实现了服务器端的线程池,显然,任何接口都不是线程安全的。
### 2.1.2 用户信息词典
用户信息是用户名-回收垃圾数的键值对而且键唯一, 所以选择了C++标准库中的map数据结构进行开发其底层 构造为:
![](https://www.writebug.com/myres/static/uploads/2021/12/15/cc9a3acce21453d7c16878e1b9595e07.writebug)
map维护了一颗红黑树,以保证搜索效率在O(logn) 复杂度左右, 红黑树是一棵二叉搜索树, 它在每个节点增加了一个存储位记录节点的颜色,可以是RED也可以 是BLACK;通过任意一条从根到叶子简单路径上颜色的 约束,红黑树保证最长路径不超过最短路径的二倍,因而近似平衡,用红黑颜色标记的办法改进了AVL树。
在API调用上,对用户提供抽象的键值对接口。
## 2.2 程序总体结构
### 2.2.1 模块调用图
抽象的整体设计如下:
![](https://www.writebug.com/myres/static/uploads/2021/12/15/6245e6ab914f4bc2de4dd9355e889771.writebug)
细化后面向对象的UML设计图如下:
![](https://www.writebug.com/myres/static/uploads/2021/12/15/18c198a8085b3782a4514f43e14f632e.writebug)
服务器采用了简单的组合模式,一方面是因为线程池逻辑在本次开发中较为简单,另一方面则是在抽象关系中显然得包含关系。
![](https://www.writebug.com/myres/static/uploads/2021/12/15/15374bf31d83f00e7ff21c92b61d6a6d.writebug)
客户端采用了中介者设计模式, 将client_app类作为中介者负责对实现不同功能的类间的调度与消息传递,用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。同时也正好藕合QT库中的按 钮逻辑绑定机制。
### 2.2.2 主程序流程图
流程图如下
![](https://www.writebug.com/myres/static/uploads/2021/12/15/8c89e5c7ce7bb43ce76efc059a8d9fe8.writebug)
# 3 详细设计
## 3.1 基于 pytroch、onnx 的分类卷积神经网络垃 圾识别模块
### 3.1.1 网络架构设计
考虑到我们的任务是分类, 所以选择了经典的AlexNet卷积神经网络, 拥有五个卷积层提取featuremap,卷积层中间也有池化层对特征进行固定,通过训练 将数据集中的低层特征训练为卷积核上的权重;在五个卷积层后还有两个全连接层进行高层语义的提取,为了防止过拟合, 还设有dropout率最后通过200分类输出分类信息。
其示意图如下:
![](https://www.writebug.com/myres/static/uploads/2021/12/15/e6013337fafd0fe64d0e5b112415525e.writebug)
### 3.1.2 数据集准备
针对这个任务,选择的数据集是的百度垃圾识别数据集,原图片大小为720x540,为了适应网络的输入输出尺 寸,将resize成224x224尺寸,共43751张图片158类垃圾类别,如下图所示
![](https://www.writebug.com/myres/static/uploads/2021/12/15/0c49b5e3e8286daef42cdad04ed9655c.writebug)
### 3.1.3 训练结果
最终,在GPU的训练环境下取得了80%以上准确率的结果,如下下图所示
![](https://www.writebug.com/myres/static/uploads/2021/12/15/5f64a8d3b0e21797092d6082fbeec18f.writebug)
## 3.2 基于 linuxsocket、Qwebsocket 的 TCP/IP 协议网络通信模块
### 3.2.1 协议选择
经过了解很多IM软件的通信协议都选择的是UDP协 议, 但这是出于长距离不稳定传输的的考虑,而本次课设开发的系统是在校园网环境下进行工作的,稳定的网络环境,故选择TCP协议也是合适的。
### 3.2.2 通信的流程
本次课设选择的原生的linux socket套接字API作为服务端实现,其TCP协议服务流程如下:
![](https://www.writebug.com/myres/static/uploads/2021/12/15/38262fd12aae65f93517c45e3e894ef2.writebug)
而在客户端,考虑到与qt控件的按钮逻辑更好的契合 度,选择了qt库中的socket实现,利于按钮逻辑对通信函数的回调
### 3.2.3 自定义的数据报规约
请求数据报规约:按照功能,一共有三种可能的信息请求方式,聊天请求、上传记录请求、浏览器查看整体情况请求、所以将这三种情求分别封装成以下三种数据报报头,方便提供对应的不同服务
![](https://www.writebug.com/myres/static/uploads/2021/12/15/d9a324ce76c4f04e2b6f4d050cbbdea5.writebug)
## 3.3 基于 C++11 平台无关线程库的多线程实现
### 3.3.1 多线程需求分析
显然,在客户端,qt的GUI控件逻辑和websocket逻辑是多线程的轮询机制实现的,由于调用了第三方库,所以不用手动实现。
当然客户端的终端通信方法是要考虑的输入的拥塞机制和读和写两件并行的需要,所以需要进行并发编程。另一方面考虑到进程开销过�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本项目为使用C++和Python实现的基于卷积神经网络的校园垃圾识别系统实现。本项目的基本功能:客户端拥有对常见校园垃圾的识别能力;客户端可以上传识别结果;服务器可以接受并储存终端的识别结果。 功能需求 1.1.1 基本功能 客户端拥有对常见校园垃圾的识别能力 客户端可以上传识别结果 服务器可以接受并储存终端的识别结果 1.1.2 扩展功能 客户端与客户端之间可以进行关于垃圾回收消息的实时交流 服务器可以储存用户信息 浏览器可以实时访问识别结果 1.2 数据需求 1.2.1 C/S 架构客户端数据需求 实时识别的图像数据与字符串形式的识别结果 字符串形式的用户信息 字符串形式的聊天消息 对GUI控件的操作信号 套接字文件 1.2.2 C/S 架构服务器数据需求 字符串形式的识别结果 字符串形式的聊天信息 字符串形式的用户信息 套接字文件 字符串形式的数据库信息 1.2.3 B/S 架构浏览器数据需求 对垃圾识别系统的整体情况的字符串显示 1.3 界面需求 1.3.1 C/S 架构客户端界面需求 当前客户端摄像头图像的呈现 识别按钮与识别结果呈现的文本框 用户信息(用户名
资源推荐
资源详情
资源评论
收起资源包目录
使用C++和Python实现的基于卷积神经网络的校园垃圾识别系统实现.zip (49个子文件)
trashrecogsystem
客户端源代码
caller.cpp 1KB
CMakeLists.txt 641B
client.ui 7KB
detecter.h 11KB
client_app.h 1KB
main.cpp 945B
client_app.cpp 3KB
caller.h 552B
ui_client.h 8KB
report.pdf 5.25MB
LICENSE 1KB
服务器源代码
chatroom.h 1014B
CMakeLists.txt 406B
db_manager.cpp 2KB
main.cpp 713B
chatroom.cpp 7KB
db_manager.h 601B
神经网络训练源代码
garbageDataset.py 1KB
NervAlexNet.py 4KB
report.docx-md
12-9bb25dc358668df88e04832c495984c9.png 37KB
2-2d33c978f40941278cbde48ad1f27c0e.png 43KB
14-1583fc08ec0bb1af937df57b72b3bc26.png 90KB
3-bf4b532fb0e9ab9367333d7fdf83905d.png 69KB
10-a86e5499c0074401c99a112811404651.png 46KB
17-8c1af3c637703fb414912311dc6bbd8b.png 48KB
24-dd8895f931fd40ae74a5cb5e42656f18.png 84KB
18-ec9d91c1b9cec16578d0d21f91616675.png 58KB
22-9bda08a728755cdb5f1be3ebb64f7a20.png 171KB
7-1dc312235e06b8ad4621e178b71ddf13.png 75KB
5-3a4c042e7cfdd279fd85164f56715e31.png 54KB
15-0d8848de02285708d829fe044ba2ddc9.png 183KB
13-22b915a2437a48262b5644b13764a8d2.png 78KB
25-43527e698db844c5b11af2b66f93d086.png 173KB
21-2fea57313568b8e484c156ae4e754dfa.png 169KB
myoutput.md.md 23KB
myoutput.md 25KB
1-e5bb770631939b5ce9c7633e158008e3.png 39KB
6-fcd8b2d4276e995c6a3a4f0a540cbf74.png 109KB
19-ec9d91c1b9cec16578d0d21f91616675.png 58KB
8-4dc5c0cb133032eced49b9d6df897a9c.png 53KB
9-dd65e9ebd5902cdcc58a465625b28e95.png 463KB
11-7bf2dff14d94d90534f850bd83e1e94f.png 8KB
26-5d8f78484ad4fd9a58df23f9ccd66bbf.png 170KB
27-fed3920f3e3e9a290c9a2acda5bad169.png 35KB
16-03b943cc898b700986b0acb2d3008712.png 76KB
20-3e031a3225adedd9e28597ec01a703f6.png 123KB
4-1278b90268f00934db1c86ca3335ca9a.png 29KB
23-deb360c9f32583fc638c0d95904769d4.png 420KB
README.md 15KB
共 49 条
- 1
资源评论
- 鬼泣阿修罗2023-02-17资源内容详细,总结地很全面,与描述的内容一致,对我启发很大,学习了。
甜辣uu
- 粉丝: 8386
- 资源: 1103
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 技术面试最后反问面试官的话 校招面试非技术问题有哪些 非技术问题如何回答.png
- NB-IOT-BC26全网通模块Altium+ CADENCE +PADS三种格式(原理图SCH+PCB封装库)文件.zip
- 基于微信小程序开发的校园失物招领系统源码毕业设计(优质项目源码).zip
- 词向量是一种将自然语言中的单词转换为数值向量的技术,它能够捕捉词义和上下文信息
- nmap与masscan的简单使用
- MyBatis动态SQL.pdf
- 基于stm32单片机protues仿真的温湿度控制系统设计(仿真图、源代码)
- 词向量:自然语言处理的基石
- mybatis动态sql
- 40G微信小程序开发教程(工具插件+视频教程)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功