☰
基于 YOLOv8 的垃圾分类目标检测系统|Python+PyQt5 桌面端课程设计
2026/10/15 14:28:02 网站建设 项目流程

🍀项目简介

本项目是计算机视觉创新实践项目,基于 YOLOv8n 目标检测算法完成垃圾分类识别,搭配 PyQt5 开发完整桌面可视化应用。 系统支持单张图片检测、批量图片检测、视频检测、摄像头实时检测四大推理模式,能够识别 4 大类垃圾:可回收垃圾、有害垃圾、厨余垃圾、其他垃圾。

区别于简单调用模型的 Demo,本项目做大量工程优化:解决 OpenCV 中文乱码、兼容中文特殊字符路径、完善异常捕获、结果表格可视化、检测结果本地保存。从数据集准备、模型训练、调参迭代、UI 开发、指标评估形成完整闭环,非常适合大学生计算机视觉课程设计、毕业设计参考。

💡适用人群:计算机专业、人工智能专业,课程大作业、毕设;学习 YOLO 目标检测 + PyQt 桌面软件开发完整流程。

✨系统功能特性

功能模块功能说明
单张图片检测读取图片,绘制检测框、中文类别标签、置信度、目标坐标信息
批量图片检测多选多张图片批量推理,表格汇总全部检测结果
视频检测视频逐帧目标检测,支持检测后视频结果保存
摄像头实时检测调用本地摄像头,实时画面垃圾识别
结果管理检测结果保存到本地文件夹,表格展示目标坐标、类别、置信度
鲁棒性优化中文路径兼容、中文标签绘制、文件读取异常弹窗提示

🛠技术栈

技术用途
Python3.9开发环境
YOLOv8n(Ultralytics)目标检测模型,迁移学习训练
PyQt5桌面 GUI 可视化界面开发
OpenCV图像、视频、摄像头帧读取处理
Pillow(PIL)解决检测框中文文字绘制乱码问题
PyTorch深度学习模型推理与训练

📁项目目录结构

GarbageDetection/ ├── datasets/GarbageSorting/ # YOLO格式数据集,train/val/test划分 ├── models/best.pt # 训练完成最优权重文件 ├── runs/train/ # 训练输出:损失曲线、混淆矩阵、PR曲线 ├── UIProgram/ # PyQt界面UI、样式资源 ├── Font/ # 中文字体文件,解决中文绘制乱码 ├── MainProgram.py # PyQt桌面程序入口 ├── train.py # YOLO模型训练脚本 ├── detect_tools.py # 图像读取、绘制检测框工具函数 ├── Config.py # 全局路径、类别配置文件 ├── imgTest.py # 单张图片测试脚本 ├── VideoTest.py # 视频检测测试脚本 ├── CameraTest.py # 摄像头测试脚本 ├── requirements.txt # 项目依赖 └── save_data/ # 检测结果输出保存目录

🏗系统总体架构

整体采用分层架构设计,分为输入层、推理层、后处理层、交互展示层、输出层。

层次组件职责
输入层QFileDialog、OpenCV VideoCapture图片、视频、摄像头帧读取,兼容中文路径
推理层YOLOv8n best.pt目标检测推理,输出检测框、类别 id、置信度
后处理层Config.py、detect_tools.py类别中文映射、绘制中文检测框、坐标格式化
交互层PyQt5 MainProgram.py按钮、定时器、结果表格、弹窗异常提示
输出层save_data 目录保存检测后的图片、视频文件

核心原理

YOLOv8 属于端到端目标检测网络,同时完成目标定位与分类。图像输入网络完成多尺度特征提取,输出目标边界框、类别概率、置信度。 本项目从推理结果Results.boxes取出坐标、类别编号、置信度,映射为中文垃圾类别,绘制可视化检测框,支持一张画面同时检测多个不同垃圾目标。

model = YOLO(Config.model_path, task='detect') results = model(image)[0] locations = results.boxes.xyxy.tolist() classes = results.boxes.cls.tolist() confidences = results.boxes.conf.tolist()

🚀环境部署与运行

环境要求

Python 3.9,推荐 conda 虚拟环境

# 创建激活虚拟环境 conda activate py39 # 进入项目根目录 cd GarbageDetection # 安装依赖 pip install -r requirements.txt

执行命令

# 模型训练 python train.py # 启动PyQt5桌面软件 python MainProgram.py # 单图测试 python imgTest.py # 视频测试 python VideoTest.py # 摄像头测试 python CameraTest.py

📊数据集说明

数据集按照 YOLO 标准格式组织,划分为训练集、验证集、测试集,四类垃圾标注。

划分图片数目标总数可回收有害厨余其他
训练集192027501115594588453
验证集548757314152146145
测试集2754181805410084

数据集存在类别不均衡问题:有害垃圾样本数量偏少,会影响模型识别效果,可补充样本进一步优化。

📈模型训练与实验结果

训练参数

  • 预训练权重:yolov8n.pt
  • 输入尺寸:640×640
  • batch_size:4
  • 迁移学习训练,epochs=250

训练过程 loss 持续下降,精度指标逐步收敛,runs/train 目录自动保存损失曲线、PR 曲线、混淆矩阵。

独立测试集评估结果(test 划分)

指标测试集数值说明
Precision0.837预测目标中正确占比 83.7%
Recall0.762真实目标检出率 76.2%
mAP@0.50.853IoU=0.5 下综合检测性能
mAP@0.5:0.950.555严格 IoU 条件下定位分类综合性能

混淆矩阵与 PR 曲线可以看到:有害垃圾识别精度较高,样本不均衡带来部分类别存在混淆;mAP@0.5 达到 0.853,整体识别效果良好,边界框定位还有优化空间。

🖥系统软件界面展示

桌面端 PyQt5 软件界面,包含文件导入模块、检测结果表格、目标信息展示、保存退出按钮。 支持图片、视频、摄像头三种输入源,检测完成后表格输出序号、文件路径、类别、置信度、目标坐标,检测结果保存至本地 save_data 文件夹。

项目核心创新点

很多 YOLO 项目只完成模型推理,本项目偏向工程落地,解决大量实际开发痛点:

  1. ✅ 使用 PIL 字体绘制中文标签,解决 OpenCV 无法显示中文的痛点,检测框直接输出中文垃圾类别
  2. ✅ 使用np.fromfile + cv2.imdecode,完美支持中文路径、特殊字符路径图片读取
  3. ✅ UI 交互优化:把文件夹选择修改为多选图片选择器,用户可以直接预览并多选图片批量检测
  4. ✅ 完整异常处理:图片损坏、读取失败、推理异常弹出提示框,不会直接程序崩溃
  5. ✅ PyQt5 界面完整美化,表格展示检测坐标、置信度,是完整可交付原型软件,不只是推理脚本

🐛问题排查与优化迭代

  1. 中文显示乱码OpenCV 原生 putText 不支持中文,改用 PIL ImageDraw 渲染中文标签,自定义字体完成绘制。
  2. 中文 / 特殊路径读取失败OpenCV 的 imread 不支持中文路径,重写图像读取函数,通过字节流解码图片。
def img_cvread(path): encoded = np.fromfile(path, dtype=np.uint8) return cv2.imdecode(encoded, cv2.IMREAD_COLOR)
  1. 相对路径报错配置文件基于__file__获取项目根目录 BASE_DIR,拼接模型、字体、输出路径,无论从哪个目录启动程序都可以正常加载资源。
  2. UI 定时器、线程阻塞问题视频保存使用 QThread 子线程,视频帧读取使用 QTimer 定时器,防止大视频推理卡住 GUI 界面。
  3. 模型效果优化方向
  • 扩充少数类样本(有害垃圾),增加遮挡、弱光、复杂背景样本
  • 使用类别均衡采样策略训练
  • 调整 conf 置信度阈值、NMS IoU 阈值改善误检漏检

📚课程设计 / 毕设拓展加分方向

拿到基础项目后,可以做下面拓展提升报告分数:

  1. 更换 YOLOv8s/yolov9/yolov11 模型,做多模型对比实验
  2. 增加垃圾检测结果导出 Excel 报表功能
  3. 增加模型评估可视化界面,软件内直接查看 mAP、混淆矩阵
  4. 增加模型轻量化,实现 ONNX 部署,做简单的网页端推理
  5. 增加垃圾分类知识库,检测完成弹出对应垃圾投放科普提示
  6. 增加数据集增强,对比不同增强策略对精度的影响

本项目适合《计算机视觉》《深度学习》《人工智能》课程设计、毕业设计。报告可以直接复用数据集划分、训练指标、混淆矩阵、系统架构、问题分析等内容。

⚠️注意事项

  1. 运行前确认 conda 环境为 python3.9 版本,pytorch、ultralytics 版本匹配;
  2. best.pt 权重文件必须保留,否则程序无法加载模型;
  3. Font 字体文件夹不可缺失,否则中文标签绘制失效;
  4. 大批量图片批量检测建议放到子线程,避免 UI 界面卡顿。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询