智能生活垃圾检测与分类系统(UI界面+YOLOv5+训练数据集)

简介: 智能生活垃圾检测与分类系统(UI界面+YOLOv5+训练数据集)

前言


       智能垃圾分类处理系统是依托物联网、GPS、云计算、大数据等信息技术,结合各种智能化设备(智能垃圾分类箱、积分兑现、车载一体机等),采用分布式微服务架构搭建而成,对垃圾分类全过程中所涉及到的人、车、物、事进行全过程实时监管,实现垃圾投放、收集、运输、处理各环节的有源可溯。

       传统的人工垃圾分拣技术存在着效率低、耗时长、需要大量人力、分挑环境差等问题,如何有效地智能化地进行垃圾分类以及成为亟待解决的问题。如今的深度学习技术快速发展,在深层特征提取、表征,目标检测上都取得了很大进展,利用相关技术解决垃圾分类问题,无疑可以减少人力资源的消耗,有效提高垃圾分类效率,促进生态文明建设发展。

       智能生活垃圾检测分类是近年来计算机视觉领域的一个应用,同时也是目标检测领域中的难点。其目的是识别和定位图像中存在的垃圾类型,在许多领域中都有广泛的应用。本系统基于YOLOv5算法进行垃圾检测分类,对于图片、视频和摄像头捕获的实时画面,系统可检测画面中的垃圾类型和位置,支持结果记录、展示和保存,每次检测的结果记录在表格中。以下给出博主设计的界面,功能也可以满足图片、视频和摄像头的识别检测,初始界面如下图(比前面的界面稍有升级,增加了柱状图统计数目,哈哈)。



       检测类别时的界面截图(点击图片可放大)如下图,可识别画面中存在的多个类别,也可开启摄像头或视频检测:



        详细的功能演示效果参见博主的B站视频或下一节的动图演示,觉得不错的朋友敬请点赞、关注加收藏!系统UI界面的设计工作量较大,界面美化更需仔细雕琢,大家有任何建议或意见和可在下方评论交流。


1. 效果演示


       软件需要颜值与功能并存,我们还是通过动图看一下识别的效果,系统主要实现的功能是对图片、视频和摄像头画面中的垃圾识别,识别结果可视化显示在界面和图像中,另外提供多个目标的显示选择功能,演示效果如下。

(一)系统介绍

       智能生活垃圾检测与分类系统主要用于日常生活垃圾检测和智能分类,对常见的可降解、纸板、玻璃、金属、纸质和塑料等类别垃圾进行检测和计数,以方便对垃圾进行分类处理;系统提供登录注册功能,可进行用户管理;能够有效识别图片、视频等文件形式,检测目标位置、类别并统计各类别计数结果;可开启摄像头实时检测和统计画面中的垃圾类型和数目,支持结果记录、展示和保存。

(二)技术特点

        (1)YoloV5算法实现,模型一键切换更新;

        (2)检测图片、视频等图像中的各目标数目并可视化;

        (3)摄像头监控实时检测,便携展示、记录和保存;

        (4)支持用户登录、注册,检测结果可视化功能;

        (4)提供完整训练数据集,可重新训练模型;

(三)用户注册登录界面

       这里设计了一个登录界面,可以注册账号和密码,然后进行登录。界面还是参考了当前流行的UI设计,上面贴图和系统名,下面可输入账号、密码。



(四)选择图片识别

       系统可选择图片文件进行识别,点击图片选择按钮图标选择图片后,显示所有识别的结果,可通过下拉选框查看单个结果,以便具体判断某一特定目标。本功能的界面展示如下图所示:



(五)视频识别效果展示

       点击视频按钮可选择待检测的视频,系统会自动解析视频逐帧识别多个垃圾类型,并将垃圾分类结果记录在右下角表格中,效果如下图所示:



(六)摄像头检测效果展示

       在真实场景中,我们往往利用道路的摄像头获取实时画面,同时需要对垃圾进行识别,因此本文考虑到此项功能。如下图所示,点击摄像头按钮后系统进入准备状态,系统显示实时画面并开始检测画面中的垃圾,识别结果展示如下图:




2. 垃圾检测数据集与训练


(一)YOLOv5项目进行生活垃圾检测

        YOLOv5的代码是开源的,因此我们可以从github上克隆其源码。在不断更新和完善中,YOLOv5就已经有了多个分支,几经更新成为一项比较成熟的深度学习技术了,在发布这个智能垃圾检测系统的时候,YOLOv6-v8的代码版本也有了,不过看起来还有改进和更新的空间,因此这里先使用YOLOv5进行开发了,后续也会升级本系统的算法。

        生活垃圾检测分类的数据集已经整理和添加进项目中,项目的目录如下图所示。其中train.py是训练程序,在配置好Python环境和依赖库的基础上,可以点击运行重新进行训练。



        一般为了缩短网络的训练时间,并达到更好的精度,我们一般加载预训练权重进行网络的训练。而yolov5给我们提供了几个预训练权重,我们可以对应我们不同的需求选择不同的版本的预训练权重。通过如下的图可以获得权重的名字和大小信息,可以预料的到,预训练权重越大,训练出来的精度就会相对来说越高,但是其检测的速度就会越慢。预训练权重可以通过这个网址进行下载,本次训练自己的数据集用的预训练权重为yolov5s.pt。



(二)数据集及训练

       这里我们使用的生活垃圾数据集,包含可降解、纸板、玻璃、金属、纸质、塑料等垃圾类型,每张图片除包括类别标签外,还有一个标注的物体边框(Bounding Box),其类别标注如下图所示。

python
Chinese_name = {'BIODEGRADABLE': "可降解", "CARDBOARD": '纸板', 'GLASS': "玻璃", 'METAL': "金属", 'PAPER': "纸质", 'PLASTIC': "塑料"}



       每张图像均提供了图像类标记信息,训练数据集具有7324张图片,验证集2098张,测试集1042张,共计10000余张图像,部分图片的截图如下图所示。



       安装好Yolov5的依赖库,配置一个Python3.8然后按照requirements.txt里面的依赖装环境就可以运行了,训练的具体参数需要具体配置,配置数据集的训练集路径、验证集路径、测试集路径,类别nc设置为6,包括'BIODEGRADABLE', 'CARDBOARD', 'GLASS', 'METAL', 'PAPER', 'PLASTIC'这6类,配置好这些就可运行train.py训练了。

python
train: ./Garbage/images/train
val: ./Garbage/images/val
test: ./Garbage/images/test
nc: 6
names: ['BIODEGRADABLE', 'CARDBOARD', 'GLASS', 'METAL', 'PAPER', 'PLASTIC']


       在深度学习中,我们通常通过损失函数下降的曲线来观察模型训练的情况。而YOLOv5训练时主要包含三个方面的损失:矩形框损失(box_loss)、置信度损失(obj_loss)和分类损失(cls_loss),在训练结束后,我们也可以在logs目录下找到生成对若干训练过程统计图。下图为博主训练生活垃圾类识别的模型训练曲线图。



       一般我们会接触到两个指标,分别是召回率recall和精度precision,两个指标p和r都是简单地从一个角度来判断模型的好坏,均是介于0到1之间的数值,其中接近于1表示模型的性能越好,接近于0表示模型的性能越差,为了综合评价目标检测的性能,一般采用均值平均密度map来进一步评估模型的好坏。我们通过设定不同的置信度的阈值,可以得到在模型在不同的阈值下所计算出的p值和r值,一般情况下,p值和r值是负相关的,绘制出来可以得到如下图所示的曲线,其中曲线的面积我们称AP,目标检测模型中每种目标可计算出一个AP值,对所有的AP值求平均则可以得到模型的mAP值。



       以PR-curve为例,可以看到我们的模型在验证集上的均值平均准确率为0.546。从训练结果和数据集进行分析,存在一定干扰样本,部分数据集图像中的垃圾相互遮盖,垃圾存在的环境复杂多变,很容易造成模型误检。


3. 智能生活垃圾检测


       在训练完成后得到最佳模型,接下来我们将帧图像输入到这个网络进行预测,从而得到预测结果,预测方法(predict.py)部分的代码如下所示:

python
parser = argparse.ArgumentParser()
parser.add_argument('--weights', nargs='+', type=str, default='./weights/garbage-best.pt',
                    help='model.pt path(s)')  # 模型路径仅支持.pt文件
parser.add_argument('--img-size', type=int, default=480, help='inference size (pixels)')  # 检测图像大小,仅支持480
parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold')  # 置信度阈值
parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS')  # NMS阈值
# 选中运行机器的GPU或者cpu,有GPU则GPU,没有则cpu,若想仅使用cpu,可以填cpu即可
parser.add_argument('--device', default='',
                    help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
parser.add_argument('--save-dir', type=str, default='inference', help='directory to save results')  # 文件保存路径
parser.add_argument('--classes', nargs='+', type=int,
                    help='filter by class: --class 0, or --class 0 2 3')  # 分开类别
parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')  # 使用NMS
opt = parser.parse_args()  # opt局部变量,重要
out, weight, imgsz = opt.save_dir, opt.weights, opt.img_size  # 得到文件保存路径,文件权重路径,图像尺寸
device = select_device(opt.device)  # 检验计算单元,gpu还是cpu
half = device.type != 'cpu'  # 如果使用gpu则进行半精度推理


       应用训练得到的模型,可以运行testPicture.py代码,我们只需更改图片路径,该脚本调用已训练好的模型进行预测并通过OpenCV绘制标记框,运行效果如下图所示。



       博主对整个系统进行了详细测试,最终开发出一版流畅得到清新界面,就是博文演示部分的展示,完整的UI界面、测试图片视频、代码文件,以及Python离线依赖包(方便安装运行,也可自行配置环境),均已打包上传,感兴趣的朋友可以通过下载链接获取。


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
22天前
|
计算机视觉 Python
基于Dlib的人脸识别客户端(UI界面)
基于Dlib的人脸识别客户端(UI界面)
44 2
|
12天前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
54 8
|
22天前
|
机器学习/深度学习 数据可视化 计算机视觉
基于opencv的车牌识别系统(UI界面采用tkinter设计)
基于opencv的车牌识别系统(UI界面采用tkinter设计)
31 0
|
2月前
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
随着移动应用市场的蓬勃发展,用户对界面设计的要求日益提高。为此,掌握由Google推出的Material Design设计语言成为提升应用颜值和用户体验的关键。本文将带你深入了解Material Design的核心原则,如真实感、统一性和创新性,并通过丰富的组件库及示例代码,助你轻松打造美观且一致的应用界面。无论是色彩搭配还是动画效果,Material Design都能为你的Android应用增添无限魅力。
57 1
|
3月前
|
开发者 图形学 前端开发
绝招放送:彻底解锁Unity UI系统奥秘,五大步骤教你如何缔造令人惊叹的沉浸式游戏体验,从Canvas到动画,一步一个脚印走向大师级UI设计
【8月更文挑战第31天】随着游戏开发技术的进步,UI成为提升游戏体验的关键。本文探讨如何利用Unity的UI系统创建美观且功能丰富的界面,包括Canvas、UI元素及Event System的使用,并通过具体示例代码展示按钮点击事件及淡入淡出动画的实现过程,助力开发者打造沉浸式的游戏体验。
87 0
|
28天前
|
开发框架 JavaScript 前端开发
鸿蒙NEXT开发声明式UI是咋回事?
【10月更文挑战第15天】鸿蒙NEXT的声明式UI基于ArkTS,提供高效简洁的开发体验。ArkTS扩展了TypeScript,支持声明式UI描述、自定义组件及状态管理。ArkUI框架则提供了丰富的组件、布局计算和动画能力。开发者仅需关注数据变化,UI将自动更新,简化了开发流程。此外,其前后端分层设计与编译时优化确保了高性能运行,利于生态发展。通过组件创建、状态管理和渲染控制等方式,开发者能快速构建高质量的鸿蒙应用。
100 3
|
14天前
|
JavaScript API 开发者
掌握ArkTS,打造HarmonyOS应用新视界:从“Hello World”到状态管理,揭秘鸿蒙UI开发的高效秘诀
【10月更文挑战第19天】ArkTS(ArkUI TypeScript)是华为鸿蒙系统中用于开发用户界面的声明式编程语言,结合了TypeScript和HarmonyOS的UI框架。本文介绍ArkTS的基本语法,包括组件结构、模板和脚本部分,并通过“Hello World”和计数器示例展示其使用方法。
33 1
|
21天前
|
缓存 测试技术 C#
使用Radzen Blazor组件库开发的基于ABP框架炫酷UI主题
【10月更文挑战第20天】本文介绍了使用 Radzen Blazor 组件库开发基于 ABP 框架的炫酷 UI 主题的步骤。从准备工作、引入组件库、设计主题、集成到 ABP 框架,再到优化和调试,详细讲解了每个环节的关键点和注意事项。通过这些步骤,你可以打造出高性能、高颜值的应用程序界面。
|
6月前
|
Android开发 缓存 双11
android的基础ui组件,Android开发社招面试经验
android的基础ui组件,Android开发社招面试经验
android的基础ui组件,Android开发社招面试经验
|
2月前
|
前端开发 开发者 UED
前端只是切图仔?来学学给开发人看的UI设计
该文章针对前端开发者介绍了UI设计的基本原则与实践技巧,覆盖了布局、色彩理论、字体选择等方面的知识,并提供了设计工具和资源推荐,帮助开发者提升产品的视觉与交互体验。