基于 Python 的桌面端智能识别与可视化系统——生活垃圾分类可视化大屏

生活垃圾分类可视化大屏

基于 Python 的桌面端智能识别与可视化系统:融合深度学习目标检测/实例分割、桌面 GUI、ECharts 数据分析与本地归档存储,实现生活垃圾多目标识别、分割展示、准确率分析与可视化大屏展示。


目录

  1. 项目简介

  2. 功能说明

  3. 基础框架与技术架构

  4. [所用 Python 算法与原理](#所用 Python 算法与原理)

  5. 环境与依赖

  6. 安装与启动

  7. 使用方式与操作流程

  8. 数据存储与配置

  9. 项目目录结构

  10. 自定义模型

  11. 常见问题

  12. 快速开始


一、项目简介

本程序面向「生活垃圾分类」场景,提供从 图像/视频输入 → 深度学习推理 → 可视化标注 → 统计分析 → 日志归档 的完整闭环。界面采用大屏风格,顶部图标导航切换各功能页,适合演示、课程设计与二次开发。

核心能力一句话概括:

用 YOLO 实例分割识别画面中的多个生活垃圾目标,画出检测框并标注分类与准确率,再通过 ECharts 对当前(或历史)结果做多维度可视化分析,结果自动按日期保存到文件与 SQLite。


二、功能说明

2.1 功能模块一览

页面/模块 功能要点
智能识别 上传图片/视频;多目标检测 + 实例分割;检测框、分类名、准确率;分割裁剪图;缩放/旋转/拖拽
日志记录 操作日志检索;当日结果图列表与预览;打开日志目录;清空日志
数据分析 ECharts 多图看板;「仅当前结果」/「结合历史」双模式;随机或全量图表组合
参数配置 模型路径、设备、置信度/IoU、存储目录、数据库路径等
主题样式 主题配色、字体字号、顶栏/按钮/表格等尺寸;即时预览与保存
自动归档 原图、结果图、裁剪图、参数 JSON、日志按日期落盘,并写入 SQLite

2.2 生活垃圾四分类

系统最终展示的分类为:

类别 典型含义 界面配色(示意)
可回收物 瓶、杯、书、电子设备等 绿色
有害垃圾 有害相关物品等 红色
厨余垃圾 果蔬、食品等 黄色
其他垃圾 其余或未明确映射类别 灰色

默认模型为通用 COCO 预训练权重时,通过 类别名映射规则 将检出物体归入上述四类;接入自训练权重后可直接输出四类名称。

2.3 识别结果图上显示的内容

  • 彩色 检测方框(白边 + 彩色框 + 角点)

  • 垃圾分类名称准确率(置信度 %)

  • 原始检测类别名与目标序号

  • 半透明 实例分割掩膜

  • 单目标 分割裁剪图(棋盘格背景突出前景)


三、基础框架与技术架构

3.1 总体分层

复制代码
┌─────────────────────────────────────────────────────────┐
│  表现层(PyQt5)                                         │
│  顶部导航 · 智能识别 · 日志 · 数据分析 · 配置 · 样式      │
├─────────────────────────────────────────────────────────┤
│  业务核心层(core/)                                      │
│  检测器 · 配置 · 存储 · 日志 · 数据库 · 图表数据组装       │
├─────────────────────────────────────────────────────────┤
│  算法/引擎层                                              │
│  Ultralytics YOLO-Seg · PyTorch · OpenCV · Pillow        │
│  ECharts / ecStat(经 QWebEngineView 渲染)               │
├─────────────────────────────────────────────────────────┤
│  持久化层                                                 │
│  SQLite · JSON 配置 · 按日期文件系统(images/results/logs)│
└─────────────────────────────────────────────────────────┘

3.2 基础框架说明

层次 框架/库 在本项目中的作用
GUI 基础框架 PyQt5 主窗口、多页面、控件、样式表(QSS)、信号槽、后台线程 QThread
内嵌浏览器 PyQtWebEngine 在桌面内加载本地 HTML,渲染 ECharts 看板
深度学习框架 PyTorch YOLO 模型底层张量计算与推理(CPU/CUDA)
检测封装框架 Ultralytics 加载权重、统一 predict 接口,输出 boxes / masks / conf / cls
图像算法库 OpenCV / NumPy / Pillow 读写图像、掩膜处理、叠加、中文标注绘制
可视化引擎 Apache ECharts 5 + echarts-stat 面积/柱/饼/环/雷达/散点/盒须/回归等图表
本地数据库 SQLite3(Python 标准库) 识别记录、操作日志、参数历史
配置管理 JSON config/settings.json 持久化运行参数与 UI 参数

3.3 技术栈汇总

类别 技术
语言 Python 3(建议 3.10+)
界面 PyQt5、PyQtWebEngine、自定义 QSS 主题
AI PyTorch、Ultralytics YOLOv8-Seg
图像 OpenCV、Pillow、NumPy
图表 ECharts、ecStat
存储 SQLite、JSON、按日目录归档
并发 QThread 异步推理,避免界面卡顿

3.4 关键数据流

复制代码
用户上传图片/视频
        ↓
DetectWorker(QThread)解码帧
        ↓
WasteDetector.predict_image()
        ↓
YOLO 推理 → boxes + masks + confidence + class
        ↓
类别映射(COCO→四分类)→ 绘制框/标签/掩膜 → 裁剪分割图
        ↓
界面展示 + Storage 按日期存盘 + Database 写记录 + Logger 写日志
        ↓
ChartPage 读取「当前结果」或「当前+历史」→ 生成 ECharts HTML → WebEngine 显示

四、所用 Python 算法与原理

本节说明程序中真正用到的 算法/方法,以及它们在代码中的位置与作用。

4.1 目标检测与实例分割:YOLOv8-Seg

算法类型: 单阶段深度学习目标检测 + 实例分割(Instance Segmentation)

原理要点:

  1. 输入图像经骨干网络提取特征;

  2. 检测头输出每个目标的边界框(Bounding Box)、类别与置信度;

  3. 分割头输出与目标对应的像素级掩膜(Mask);

  4. 推理阶段结合 置信度阈值(conf) 过滤低分框,用 IoU / NMS 抑制重叠框。

本项目用法:

  • 默认权重:yolov8n-seg.pt(轻量分割模型)

  • 调用:ultralytics.YOLO(...).predict(source, conf, iou, max_det)

  • 输出解析:result.boxes(xyxy、cls、conf)、result.masks(实例掩膜)

  • 实现文件:core/detector.pyWasteDetector

4.2 非极大值抑制与阈值过滤(NMS / Confidence)

算法类型: 经典检测后处理

参数 含义 界面可调
confidence 低于该置信度的检测丢弃
iou NMS 中重叠框合并/抑制阈值
max_det 单图最多保留目标数

由 Ultralytics 在 predict 内完成;业务层只传入阈值。

4.3 类别映射算法(规则映射)

算法类型: 基于字典/别名的规则分类(非再训练)

当使用 COCO 预训练模型时,将检出英文类名映射到生活垃圾四类,例如:

  • bottle / cup / book / cell phone可回收物

  • banana / apple / pizza 等 → 厨余垃圾

  • hair drier 等 → 有害垃圾

  • 未命中规则 → 其他垃圾

同时支持中文类名、英文别名(如 recyclablekitchen)直接归一。 实现:WasteDetector._map_category()

说明:这是工程上的 后处理映射。若要提高真实垃圾场景精度,应使用专用数据集训练 YOLO,使模型直接输出四类。

4.4 掩膜可视化与图像合成

算法类型: 图像处理 / Alpha 混合

  1. 将实例掩膜缩放到原图尺寸;

  2. 按类别颜色填充 overlay;

  3. cv2.addWeighted(overlay, α, base, 1-α) 半透明叠加;

  4. 再绘制检测框与文字,避免标签被半透明层冲淡。

参数 mask_alpha 控制分割透明度。

4.5 分割目标裁剪与棋盘格背景

算法类型: 基于掩膜的 ROI 提取 + 背景合成

  • 按 bbox 裁剪;

  • 仅保留 mask 前景像素;

  • 背景用棋盘格填充,便于观察分割边界;

  • 轮廓描边强化边缘。

4.6 中文标注绘制

算法类型: 光栅文字渲染(Pillow)

OpenCV 默认字体不支持中文,因此:

  1. BGR → RGB;

  2. Pillow ImageDraw + 系统字体(如微软雅黑);

  3. 绘制带背景色的标签块;

  4. 再转回 BGR。

4.7 视频抽帧识别策略

算法类型: 时序下采样 + 最优帧选择(启发式)

  1. 读取视频帧率 FPS;

  2. 按「视频抽帧 FPS」计算采样间隔;

  3. 对采样帧分别推理;

  4. 选取检出目标数量最多的一帧作为展示与保存结果。

适用于演示场景,避免逐帧全量推理过慢。

4.8 准确率(置信度)统计分析

算法类型: 描述性统计 + 分档评估

对单次识别结果的置信度列表计算:

  • 均值 / 最小 / 最大;

  • 高(≥70%)、中(45%~70%)、低(<45%)计数;

  • 给出等级(优秀/良好/一般/较差)与文字建议。

此处「准确率」在工程上展示的是模型 置信度 Confidence,用于衡量检测可信程度;若有人工标注真值,可另行计算 Precision/Recall/mAP。

4.9 数据分析侧的聚合与统计

实现于 core/chart_data.pyui/echarts_builder.py

方法 说明
计数聚合 Counter 统计各类别目标数
分组聚合 按类别收集置信度列表
分箱(Binning) 将置信度划入 0--20%...80--100% 区间,用于堆叠面积图
漏斗过程 原始目标 → 有效检测 → 完成分类 → 高置信保留
五数概括 最小值、Q1、中位数、Q3、最大值 → 盒须图
线性回归 前端 echarts-stat 对「目标序号--准确率」做一元线性回归
雷达映射 将类别占比、平均准确率、高置信占比映射为 AQI 风格雷达指标

4.10 双模式分析策略

模式 算法数据来源 默认
仅当前识别结果 内存中本轮 DetectResult.objects
结合历史记录 当前结果 ∪ SQLite detect_records.details(不足则用类别计数字段近似展开)

4.11 界面与系统侧算法/机制

机制 说明
异步推理 QThread + 信号槽,推理不阻塞 UI
主题样式 配置驱动生成 QSS;多主题色板
随机组合图表 random.Random(seed) 从 11 种 ECharts 类型中抽取布局
日期归档 YYYY-MM-DD 创建子目录存储

五、环境与依赖

5.1 运行环境

  • 操作系统:Windows 10/11(主要验证平台)

  • Python:3.10+ 推荐

  • 可选:NVIDIA GPU + CUDA(配置中设备选 cuda

  • 首次运行需联网下载 YOLO 权重(若本地尚无)

5.2 Python 依赖(requirements.txt)

复制代码
PyQt5>=5.15.0
PyQtWebEngine>=5.15.0
torch>=2.0.0
ultralytics>=8.0.0
opencv-python>=4.8.0
matplotlib>=3.7.0
Pillow>=10.0.0
numpy>=1.24.0
包名 用途
PyQt5 桌面 GUI 基础框架
PyQtWebEngine 内嵌网页渲染 ECharts
torch 深度学习计算后端
ultralytics YOLO 训练/推理框架封装
opencv-python 图像与视频处理
Pillow 中文标注与图像转换
numpy 数组与数值计算
matplotlib 历史兼容/辅助(主看板已用 ECharts)

前端静态资源(无需 pip):

  • assets/echarts/echarts.min.js

  • assets/echarts/ecStat.min.js


六、安装与启动

6.1 进入项目目录

复制代码
cd python2

6.2 安装依赖

复制代码
pip install -r requirements.txt

若使用 GPU,请另行安装与本机 CUDA 匹配的 PyTorch 版本(参见 PyTorch 官网)。

6.3 启动程序

复制代码
python main.py

或:

复制代码
py -3 main.py

入口文件 main.py 会:

  1. 将项目根目录加入 sys.path

  2. 在创建 QApplication 之前 导入 QtWebEngineWidgets(WebEngine 硬性要求);

  3. 加载配置与字体;

  4. 打开主窗口并进入事件循环。


七、使用方式与操作流程

7.1 界面导航

顶部图标按钮(无侧边栏):

  1. 🔍 智能识别

  2. 📋 日志记录

  3. 📊 数据分析

  4. ⚙️ 参数配置

  5. 🎨 主题样式

窗口大小会按屏幕可用区域自适应。

7.2 推荐完整操作流程

复制代码
① 启动 python main.py
        ↓
②(可选)参数配置:模型路径、存储目录、cpu/cuda、默认阈值
        ↓
③(可选)主题样式:字号/主题调到适中并保存
        ↓
④ 智能识别:上传图片或视频 → 调整置信度等 → 开始识别
        ↓
⑤ 查看「分割结果」:确认方框、分类名、准确率、掩膜
        ↓
⑥ 点击列表/缩略图 →「分割目标」查看单目标分割图
        ↓
⑦(可选)显示全部信息 / 保存结果
        ↓
⑧ 数据分析:默认「仅当前结果」刷新看板;需要时改「结合历史」
        ↓
⑨ 日志记录:检索操作、预览当日归档结果图

7.3 智能识别页详解

操作 说明
上传图片 支持 jpg/png/bmp/webp 等
上传视频 支持 mp4/avi/mov/mkv 等;抽帧识别
置信度/IoU/最大检测数 直接影响检出数量与框质量
分割透明度 掩膜叠加强度
视频抽帧 FPS 越大抽帧越密、越慢
开始识别 后台线程推理
完整分割图 切回整图结果标签
显示全部信息 弹窗展示全部目标与分割图
保存结果 额外手动保存当前结果图

图片查看器支持:滚轮缩放、拖拽平移、左转/右转/复位

7.4 数据分析页详解

模式:

选项 含义 默认
仅当前识别结果 只分析本轮识别目标
结合历史记录分析 当前 ∪ 数据库历史明细

图表:

可随机组合或一次显示全部,类型包括:渐变堆叠面积、带背景柱状、标签旋转柱状、嵌套环形、饼图纹理、数据聚合、聚合过程漏斗、线性回归、单轴散点、AQI 雷达、盒须图。

7.5 日志 / 配置 / 样式

  • 日志:关键词搜索、刷新、清空库内日志、打开日志目录、预览当日结果图。

  • 配置 :路径与模型参数保存到 settings.json,并可重新加载模型。

  • 样式:主题与字号即时预览,保存后全局生效。


八、数据存储与配置

8.1 目录约定(按日期划分)

复制代码
data/
├── images/YYYY-MM-DD/          # 原图备份
├── results/YYYY-MM-DD/         # 标注结果图
│   └── crops/                  # 单目标分割裁剪
├── logs/YYYY-MM-DD/            # app.log、参数 JSON 快照
├── charts/dashboard.html       # 最近一次 ECharts 看板
└── waste_classify.db           # SQLite 数据库

8.2 SQLite 表

表名 用途
detect_records 识别记录(路径、目标数、平均置信度、类别 JSON、明细 JSON、参数 JSON)
operation_logs 操作日志
param_history 参数历史快照

8.3 配置文件

  • 路径:config/settings.json

  • 内容:模型、阈值、设备、各存储目录、UI 主题字号、图表相关参数等

模型文件默认:models/yolov8n-seg.pt


九、项目目录结构

复制代码
python2/
├── main.py                     # 程序入口
├── requirements.txt            # Python 依赖
├── README.md                   # 本说明文档
├── config/settings.json        # 运行配置
├── assets/echarts/             # ECharts / ecStat
├── models/                     # YOLO 权重
├── core/                       # 业务与算法核心
│   ├── config.py               # 配置与日期目录
│   ├── detector.py             # YOLO 检测分割与标注
│   ├── database.py             # SQLite
│   ├── logger.py               # 双写日志
│   ├── storage.py              # 文件归档
│   └── chart_data.py           # 分析数据组装
├── ui/                         # 界面层
│   ├── main_window.py          # 主窗口
│   ├── nav_bar.py              # 顶部导航
│   ├── detect_page.py          # 识别页
│   ├── log_page.py             # 日志页
│   ├── chart_page.py           # 数据分析页
│   ├── echarts_builder.py      # ECharts HTML 生成
│   ├── settings_page.py        # 参数配置
│   ├── style_page.py           # 主题样式
│   ├── theme.py                # 主题与 QSS
│   └── widgets/image_viewer.py # 图片查看器
└── data/                       # 运行时数据

十、自定义模型

  1. 准备 Ultralytics 兼容的 .pt 权重(建议分割模型以获得掩膜)。

  2. 打开 参数配置 → 选择模型文件 → 保存。

  3. 点击 重新加载模型

  4. 若类别名为四类中文名或其别名,将直接使用;否则走 COCO 映射逻辑。


十一、常见问题

Q:第一次启动很慢? A:正在加载或下载 YOLO 权重,请保持网络畅通;之后使用本地 models/ 缓存。

Q:数据分析没有数据? A:默认只看「当前识别结果」。请先识别成功,再进入数据分析刷新;或切换「结合历史记录」。

Q:检出类别不准? A:默认是通用 COCO 模型 + 规则映射,适合演示。正式垃圾分类请换专用训练权重。

Q:中文标签乱码/方框? A:需系统存在中文字体(如微软雅黑)。程序会自动尝试常见字体路径。

Q:如何用 GPU? A:安装 CUDA 版 PyTorch,配置中设备选 cuda 并重新加载模型。

Q:视频很慢? A:降低抽帧 FPS,或提高置信度阈值减少后处理目标数。

Q:ECharts 页面空白? A:确认已安装 PyQtWebEngine,且 assets/echarts/ 下 JS 文件完整;main.py 需在创建应用前导入 WebEngine。


十二、快速开始

复制代码
pip install -r requirements.txt
python main.py

最短演示路径:

  1. 打开「智能识别」→ 上传一张含瓶/水果等物体的图片 → 开始识别;

  2. 在「分割结果」中查看方框、分类与准确率;

  3. 打开「数据分析」(默认仅当前结果)查看 ECharts 组合图;

  4. 在「日志记录」中确认当日结果已归档。


附录:算法与框架对照速查

需求 采用的基础框架/库 采用的算法/方法
桌面界面 PyQt5 信号槽、QThread、QSS
多目标检测+分割 PyTorch + Ultralytics YOLOv8-Seg、NMS、置信度过滤
四分类展示 纯 Python 规则 字典/别名映射
画框与中文标签 OpenCV + Pillow 几何绘制、字体栅格化、Alpha 混合
视频处理 OpenCV 抽帧、最优帧启发式选择
统计分析 collections / 自研聚合 计数、分箱、分位、漏斗
可视化大屏 ECharts + WebEngine 多种图表 + 线性回归插件
持久化 SQLite + JSON + 文件系统 按日期归档

说明

本项目适用于学习、演示与课程设计。默认预训练模型并非专用垃圾数据集训练,真实投放前建议使用标注好的生活垃圾数据微调 YOLO,以提升分类与分割精度。

GitHub - zhangsansh/PyQt5-OpenCV-Pillow-SQLite-JSON: 基于Python的桌面端智能识别与可视化系统:融合深度学习目标检测/实例分割、桌面 GUI、ECharts 数据分析与本地归档存储,实现生活垃圾多目标识别、分割展示、准确率分析与可视化大屏展示。 · GitHub基于Python的桌面端智能识别与可视化系统:融合深度学习目标检测/实例分割、桌面 GUI、ECharts 数据分析与本地归档存储,实现生活垃圾多目标识别、分割展示、准确率分析与可视化大屏展示。 - zhangsansh/PyQt5-OpenCV-Pillow-SQLite-JSONhttps://github.com/zhangsansh/PyQt5-OpenCV-Pillow-SQLite-JSON.git

相关推荐
何以解忧,唯有..1 小时前
Python os模块详解:文件与目录操作指南
java·服务器·python
言乐62 小时前
Python实现自动拉人脚本示例
开发语言·windows·python·django·pygame
归去来 兮2 小时前
Python爬虫爬取数据案例
开发语言·爬虫·python
何以解忧,唯有..2 小时前
Python logging 模块:从入门到精通
python·microsoft·php
quantdash_cc2 小时前
历史数据断层与REST请求慢到崩溃?QuantDash高性能量化数据API终极解决方案
开发语言·python·缓存·php·量化·quantdash
熊野君2 小时前
Prompt / RAG / 规则 / Skills —— 定位、协作与实现路线
开发语言·python
zhangphil3 小时前
Python Web后端框架FastAPI vs Flask
python·ai·llm
ly76893 小时前
XML 从入门到实践:语法、命名空间、XPath、XSD 与 Java 安全解析
xml·java·python