基于卷积神经网络的垃圾图像分类系统研究与实现

1.摘要

        垃圾分类作为资源回收利用的重要环节之一, 可以有效地提高资源回收利用效率, 进一步减轻环境污染带来的危害. 随着现代工业逐步智能化, 传统的图像分类算法已经不能满足垃圾分拣设备的要求. 本文提出一种卷积神经网络的垃圾图像分类>基于卷积神经网络的垃圾图像分类模型 (Garbage Classification Network, GCN). 实验结果证明, GCN 在垃圾分类数据集上取得了优异的结果, 能够有效地提高垃圾识别精度。最后,本文基于训练好的GCN模型实现一个垃圾分类系统,该系统旨在向用户提供垃圾分类的知识,介绍不同类型的垃圾,并提供一个实用的界面,使用深度学习模型对垃圾图片进行分类。

2.基于卷积神经网络的垃圾分类模型实现与训练

垃圾数据集统计如下:(大家可以自己基于该数据集添加更多的类别)

************************************************************
                  Total Images per class
************************************************************
* cardboard => 403 images
* glass => 501 images
* metal => 410 images
* paper => 594 images
* plastic => 482 images

具体数据展示为:

  1. 加载和预处理数据

    # Load and preprocess the data
    train_datagen = ImageDataGenerator(horizontal_flip=True, rescale=1./255, zoom_range=0.2, validation_split=0.2)train_generator = train_datagen.flow_from_directory("./dataset/",target_size=(128, 128),batch_size=100,class_mode='categorical',subset='training'
    )validation_generator = train_datagen.flow_from_directory("./dataset/",target_size=(128, 128),batch_size=100,class_mode='categorical',subset='validation'
    )
    

    使用ImageDataGenerator加载和预处理训练数据和验证数据。在这里,数据进行了水平翻转、像素值缩放和缩放范围设置,并划分了验证集。

  2. 模型架构:创建了一个卷积神经网络(Convolutional Neural Network, CNN)模型,并依次添加了两个卷积层、池化层、Flatten层以及三个全连接层。卷积层用于提取图像特征,池化层用于降维,全连接层用于分类。

model = Sequential()
model.add(Conv2D(32, (3,3), input_shape=(128, 128, 3), activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(32, (3,3), activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(300, activation='relu'))
model.add(Dense(150, activation='relu'))
model.add(Dense(5, activation='softmax'))

        使用Conv2D函数添加一个卷积层,参数包括:32个滤波器(filters):表示该层输出的特征图数量。卷积核大小为(3, 3)。输入形状为(128, 128, 3),表示输入图像的尺寸为128x128,通道数为3(RGB)。激活函数为ReLU。padding设置为'same',表示对输入图像进行边界填充,保持输出与输入尺寸相同。使用MaxPooling2D函数添加一个最大池化层,参数为池化核大小为(2, 2),用于降低特征图的空间维度。再次添加一个相同参数的卷积层和池化层,用于进一步提取图像特征并降维。使用Flatten函数添加一个Flatten层,用于将多维数据压扁成一维数据,以便连接到全连接层。添加两个全连接层,分别包含300个和150个神经元,使用ReLU激活函数。添加一个输出层,包含5个神经元,对应5个类别(假设是5类问题),使用softmax激活函数进行多类别分类。

3. 训练模型:

最终,准确率可以训练达到90%左右。并使用save方法保存训练好的模型到文件中。

3.基于深度学习的垃圾分类系统实现

        将训练好的模型集成到 Flask 应用程序中:在 Flask 应用程序的代码中,添加模型的加载和预测函数。确保模型可以正确加载并对上传的图片进行预测。在服务器上部署 Flask 应用程序:将整个 Flask 应用程序上传到服务器,并确保服务器上已经安装了 Flask 和其他必要的依赖项。然后通过命令行运行 Flask 应用程序,使其在服务器上监听指定的端口。确保可以通过浏览器访问:在浏览器中输入服务器的 IP 地址或域名,加上相应的端口号(默认为 5000),即可访问部署好的 Flask 应用程序。本文将要实现的垃圾分类系统包含以下功能:
1.上传图片进行预测:用户可以通过网页界面上传垃圾图片。上传的图片会经过预处理,并使用预先训练好的深度学习模型进行分类预测。
2.预测结果展示:系统会将分类预测结果显示在网页上,告知用户该垃圾属于哪一类别。结果展示以图文结合的方式呈现,包括图片和分类标签。
3.多类别分类:模型可以对多种类别的垃圾进行分类,例如纸张、玻璃、金属、塑料等。
每个类别都有对应的图片和说明,用户可以通过预测结果了解垃圾的分类情况。
4.响应式界面设计:界面设计采用了响应式布局,适配不同大小的屏幕,提供良好的用户体验。
5.关于本项目页面:提供了关于本项目的介绍,说明了垃圾分类的重要性以及项目的解决方案。
6.展示了几种常见垃圾的图片和说明,增加了用户对垃圾分类的认识。
7.轮播图片展示:在页面顶部设置了轮播图片,通过动态展示图片和配文吸引用户关注。

        在项目文件夹中创建一个名为 templates 的文件夹,然后在其中创建 HTML 文件,设计上传图片的界面(例如 index.html)和显示预测结果的界面(例如 result.html)。最后设计实现的界面如下:

开始进行垃圾图像预测:

 上传图像:

预测:

4.总结 

        本文主要研究了基于深度学习和 Flask 的垃圾分类系统的设计与实现过程。首先,提出一种卷积神经网络的垃圾图像分类>基于卷积神经网络的垃圾图像分类模型 (Garbage Classification Network, GCN),实验结果证明, GCN在垃圾分类数据集上取得了优异的结果, 能够有效地提高垃圾识别精度。其次,是Flask 应用程序开发部分,将深度学习模型应用于垃圾分类系统中。这个系统可以让用户上传垃圾图片,然后通过深度学习模型进行分类预测,最终展示预测结果给用户。

本文代码基于python3.7.0配置numpy==1.19.5、Flask==1.0.2、Keras==2.2.4、tensorflow等

完整代码下载链接:

https://download.csdn.net/download/weixin_40651515/89183885


http://www.ppmy.cn/ops/12508.html

相关文章

关于TC简单编程的AB爪爪的几点东西

最近在帮公司写一个SAP页面的自动录入数据的小工具。 端口是5000,SAP版本好像是7.2.很老的东西,老到页面只支持IE打开。其他浏览器打开就报IVEW不支持什么的一大堆错误。 没办法,拉出TC。但是更麻烦的又来了。TC自带的AB爪爪抓不到各种输入…

【SpringBoot整合系列】SpringBoot配置多数据源

目录 背景技术选型配置多数据源思路(以两个为例)代码实现1.导入依赖2.各自的配置 3.各自的dataSourcenews数据库的smbms数据库的注意:Primary注解 4.各自的SqlSessionFactory等news数据库的smbms数据库的 5.去掉启动类头上的MapperScan6.各自的mapper接口7.各自的ma…

【iOS】—— SDWebImage源码学习(2)(源码解读)

【iOS】—— SDWebImage源码学习(2)(源码解读) 1.UIKit层取消当前正在进行的异步下载占位图策略判断url是否合法下载图片操作 2. SDWebImageManager判断url是否合法判断已加载失败的url保存操作查找缓存 3. SDWebImageDownloaderS…

python 装饰器在类中使用的工作原理

装饰器是一个非常关键的概念,它在软件开发中频繁地被使用。特别是在我们接手旧的项目,需要对原有的方法进行改写或扩展功能时,装饰器就显得尤为重要。通过使用装饰器,我们可以在不改变原有代码的基础上,对方法进行“装…

OpenHarmony 视图缩放组件—subsampling-scale-image-view

简介 深度缩放视图,图像显示,手势平移缩放双击等 效果图(旋转、缩放、平移) 下载安装 ohpm install ohos/subsampling-scale-image-view OpenHarmony ohpm 环境配置等更多内容,请参考如何安装 OpenHarmony ohpm 包 使…

Qt的坐标转换

1. QPoint mapToGlobal(const QPoint &point) const; 用法:将部件内的一个点的局部坐标转换为全局屏幕坐标。 使用场景:当你需要知道部件内某个点在屏幕上的确切位置时。 示例: QWidget widget; QPoint localPos(10, 10); QPoint glo…

centos学习-掌握核心命令之-yum

引言 在CentOS系统中,yum(Yellowdog Updater Modified)是一个强大的包管理工具,用于自动从指定的远程仓库下载并安装、更新、删除软件包。yum简化了依赖关系管理,使得Linux系统的软件包管理变得非常容易。下面是对Cen…

QML中使用正则表达式

我想在TextField控件中使用正则表达式,然后GPT4给出的回答是这样的: TextField {id: versionInputplaceholderText: qsTr("输入版本号")validator: RegExpValidator { regExp: /^[a-zA-Z0-9]*$/ } // 仅允许字母和数字width: 120 // 设置合…

考研数学精选题目013

题目 已知 ∫ 0 ∞ sin ⁡ x x d x π 2 \int_0^{ \infty } {{{\sin x} \over x}dx} {\pi \over 2} ∫0∞​xsinx​dx2π​,求 ∫ 0 ∞ sin ⁡ 2 x x 2 d x \int_0^{ \infty } {{{{{\sin }^2}x} \over {{x^2}}}dx} ∫0∞​x2sin2x​dx. 来源 群友提问 证明 ∫…

【网络安全】在网络中如何对报文和发送实体进行鉴别?

目录 1、报文鉴别 (1)使用数字签名进行鉴别 (2)密码散列函数 (3)报文鉴别码 2、实体鉴别 鉴别(authentication) 是网络安全中一个很重要的问题。 一是要鉴别发信者,即验证通信的对方的确是…

【华为OD机试C++】字符逆序

《最新华为OD机试题目带答案解析》:最新华为OD机试题目带答案解析,语言包括C、C++、Python、Java、JavaScript等。订阅专栏,获取专栏内所有文章阅读权限,持续同步更新! 文章目录 描述输入描述输出描述示例1示例2代码描述 将一个字符串str的内容颠倒过来,并输出。 数据范围…

5.组合与继承

1.面向对象 在C中,面向对象(Object-Oriented)是一种程序设计范式,它使用“对象”来设计应用程序和软件。面向对象编程(OOP)的核心概念包括类(Class)、对象(Object&#x…

ARM GPIO模拟IIC获取温湿度

IIC.c #include "iic.h" extern void printf(const char *fmt, ...); /** 函数名 : delay_us* 函数功能:延时函数* 函数参数:无* 函数返回值:无* */ void delay_us(void) {unsigned int i 2000;while (i--); } /** 函…

Redis事务全解析:从MULTI到EXEC的操作指南!

【更多精彩内容,欢迎关注小米的微信公众号“软件求生”】 亲爱的粉丝朋友们,大家好!今天我们要讨论的主题是Redis的事务。Redis作为一款优秀的NoSQL数据库,凭借其高性能和灵活性广受欢迎。事务是Redis的一项关键功能,它为我们提供了一种在数据操作中确保一致性的机制。接…

AWS ECS Fargate 实现批量启用部署断路器

背景介绍 在 AWS Elastic Container Service (ECS) 中,部署断路器是服务滚动更新过程中的一项重要功能。它可以持续监控新版本任务的运行状况,判断它们是否已达到稳定状态。如果新版本任务无法正常运行,部署断路器将自动停止部署并回滚到先前的稳定版本,从而确保服务的高可用性…

安卓手机APP开发__媒体开发部分__检索元数据

安卓手机APP开发__媒体开发部分__检索元数据 目录 在播放期间 没有播放时 动作照片 在播放期间 媒体的元数据在播放期间能以多种方式来检索。最正常不过的方法 是监听Player.Listener这个监听器的方法onMediaMetadataChanged的事件, 这将提供一个可以使用的Med…

【Flutter 面试题】 怎么减少Widget的重新构建?

【Flutter 面试题】 怎么减少Widget的重新构建? 文章目录 写在前面口述回答补充说明示例代码解释运行结果写在前面 🙋 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主,51CTO专家博主。2023博客之星TOP153。 👏🏻 正在学 Flutter 的同学,…

SpringBoot内容协商机制(就是接受数据的类型如json,xml)

目录 一、基于请求头的内容协商机制 二、基于请求参数的内容协商机制 一、基于请求头的内容协商机制 如果我们的Java服务为浏览器和安卓手机同时提供服务,浏览器期望接受的请求是JSON格式,安卓客户端期望接收的请求是XML格式,这个时候是否需…

Bert基础(十八)--Bert实战:NER命名实体识别

1、命名实体识别介绍 1.1 简介 命名实体识别(NER)是自然语言处理(NLP)中的一项关键技术,它的目标是从文本中识别出具有特定意义或指代性强的实体,并对这些实体进行分类。这些实体通常包括人名、地名、组织…

【Hadoop3.3.6全分布式环境搭建】

说明: 完成Hadoop全分布式环境搭建,需准备至少3台虚拟机(master slave01 slave02)环境: VMWare + Centos7 + JDK1.8+ Hadoop3.3.6主机规划: 主节点:master从节点:slave01 , slave02 一、准备工作 1、所有主机安装jdk 上传jdk-8u171-linux-x64.tar.gz到/root目录下,然后…