【图像算法 - 29】手把手教你用 YOLO + PyQt5 搭建垃圾检测系统(附完整源码)
摘要: 城市街道、公园、河道等公共区域的随意丢弃垃圾,严重影响环境卫生与城市形象。传统依赖人工巡查的方式效率低、响应慢、成本高。本文将带您构建一套基于深度学习(以 YOLO12 为例)与OpenCV的智能垃圾检测系统。我们将详细介绍从数据采集、模型训练到推理部署的完整流程,实现对常见垃圾类型(如塑料瓶、纸屑、烟头、餐盒、废弃口罩、塑料袋等)的精准识别与定位,助力智慧环卫与城市精细化管理!
关键词: 深度学习, 垃圾检测, 智慧环卫, YOLO12, OpenCV, 计算机视觉, 智慧城市, 目标检测, Python, 环境监测
【图像算法 - 29】从数据到界面:多路生活垃圾目标检测系统的 YOLO 模型训练与 PyQt5 实时部署
1. 引言:AI赋能城市治理,让垃圾无处藏身
在现代城市环境中,乱扔垃圾不仅破坏市容,还可能堵塞排水系统、污染水体、传播疾病。传统的垃圾监管依赖环卫人员定期巡查或市民举报,存在滞后性强、覆盖盲区多、取证困难等问题。
随着人工智能技术的发展,基于深度学习的视觉检测系统为城市环境治理提供了全新思路。通过在监控摄像头、巡逻机器人或无人机上部署AI模型,可实现对地面垃圾的自动发现、分类识别与实时告警,从而推动从“被动清理”向“主动预警”转变。
本文将聚焦于城市公共区域场景,利用先进的YOLO12目标检测模型,结合OpenCV的强大图像处理能力,构建一个高效、鲁棒的智能垃圾检测系统。我们的目标是让机器“看懂”街道,精准识别各类垃圾,为智慧环卫提供核心技术支撑。

主要功能
- 多路并行处理:最多支持 8 路视频/图像/摄像头/RTSP 流同时推理
- YOLO系列全支持:目标检测 + 实例分割(mask)+ OBB + POSE + 分类可视化
- 动态类别颜色映射:自动为新类别分配唯一颜色,支持模型热切换
- 双击放大单路视频:独立窗口查看细节,不影响主界面流畅性
- 全流程日志记录:时间、通道、源、目标数量,支持 CSV 导出
- 资源友好设计:全局推理互斥锁避免 GPU 内存溢出
2. 技术选型:深度学习 + OpenCV 的强强联合
- 深度学习模型 (YOLO12):
- 高效实时: YOLO系列以其卓越的实时检测性能著称。YOLO12作为其最新迭代版本,在保持高速推理的同时,进一步提升了小目标(如烟头、口罩)的检测精度,非常适合城市监控或移动巡检设备。
- 高精度识别: 采用更先进的网络架构和训练策略,能够精准区分多种常见垃圾类型,即使在复杂背景(如落叶、阴影、积水)或光照变化下也能保持稳定表现。
- 端到端训练: 简化了模型开发流程,从原始图像直接输出检测框和类别,易于集成与部署。
- OpenCV (Open Source Computer Vision Library):
- 图像预处理专家: 负责图像的读取、缩放、色彩空间转换(如BGR转RGB)、去噪、增强等,为深度学习模型提供高质量的输入。
- 结果可视化大师: 将模型输出的检测框、类别标签和置信度,以直观的彩色矩形框和文字形式叠加回原图,便于结果展示与分析。
- 后处理引擎: 可用于实现更复杂的逻辑,如计算垃圾密度、生成告警区域、联动环卫调度系统等。
- 跨平台集成枢纽: 作为连接AI模型与监控系统、无人车或管理平台的桥梁。
3. 数据准备:构建高质量的城市垃圾图像数据集
“Garbage in, garbage out.” 模型的性能很大程度上取决于训练数据的质量。我们构建了一个专门用于城市垃圾检测的数据集。
3.1 数据采集
-
来源: 使用街道监控摄像头、手持手机、巡逻机器人或无人机在公园、人行道、公交站、河道沿岸、校园周边等典型场景采集图像。
-
多样性: 包含不同天气(晴天、雨天、阴天)、不同时段(清晨、正午、夜晚)、不同地面材质(水泥、沥青、草地、砖石)以及不同垃圾堆积状态(单件、成堆、半掩埋)。
-
目标类别:
-
重点识别垃圾类型,例如:
Plastic_bottle(塑料瓶)Cigarette_butt(烟头)Paper_waste(纸屑/传单)Takeout_box(餐盒)Plastic_bag(塑料袋)Mask(废弃口罩)Can(易拉罐)
-
初期也可将部分相似类别合并(如所有“可回收物”),后续再细分。

-
3.2 数据标注
-
工具: 使用 LabelImg、CVAT 或 Roboflow 等开源标注工具。
-
方法: 采用 矩形框 (Bounding Box) 标注。为图像中的每件可见垃圾绘制边界框。
-
类别定义:
names:0: garbage -
格式: 保存为 YOLO 格式的
.txt文件(每行:class_id center_x center_y width height,坐标已归一化)。

3.3 数据集划分
- 按 7:2:1 的比例划分为 训练集 (train)、验证集 (val) 和 测试集 (test)。
- 创建数据配置文件
urban_litter.yaml:
# urban_litter.yaml
path: /path/to/urban/litter/dataset
train: images/train
val: images/val
test: images/testnames:0: garbage
4. 模型训练:用深度学习“学习”辨识垃圾
利用 Ultralytics YOLO 的 API,训练过程变得异常简单。
4.1 环境准备
确保已安装:
pip install ultralytics opencv-python numpy
4.2 开始训练
使用命令行启动训练:
yolo train \model=yolo12n.pt \ # 选择YOLO12n模型data=urban_litter.yaml \ # 指向数据配置文件epochs=120 \ # 训练轮数imgsz=640 \ # 输入图像尺寸batch=16 \ # 批次大小device=0 \ # 使用GPUname=urban_litter_yolo12n_v1 \ # 训练任务名称patience=20 \ # 早停轮数lr0=0.01 \ # 初始学习率optimizer=AdamW \ # 优化器cos_lr=True # 余弦退火学习率
4.3 监控与评估
- 训练过程中,Ultralytics 会自动生成训练指标和可视化结果。
- 训练结束后,使用测试集评估最终性能:
yolo val model=runs/detect/urban_litter_yolo12n_v1/weights/best.pt data=urban_litter.yaml
- 评估结果将给出 mAP@0.5 等关键指标,重点关注小目标(如烟头)的召回率。

5. 推理与可视化:OpenCV展现AI慧眼
训练好的模型 (best.pt) 可用于实际检测。以下是核心代码:
import cv2
import numpy as np
from ultralytics import YOLO# --- 1. 加载训练好的深度学习模型 ---
MODEL_PATH = 'runs/detect/urban_litter_yolo12n_v1/weights/best.pt' # 替换为您的模型路径
model = YOLO(MODEL_PATH)# --- 2. 加载待检测的街道图像 ---
IMAGE_PATH = 'street_scene.jpg' # 替换为您的测试图像路径
image = cv2.imread(IMAGE_PATH)
if image is None:raise FileNotFoundError(f"无法加载图像: {IMAGE_PATH}")
original_height, original_width = image.shape[:2]
print(f"输入图像尺寸: {original_width}x{original_height}")# --- 3. 使用模型进行预测 ---
results = model.predict(source=image,imgsz=640,conf=0.5,iou=0.45,device=0,verbose=False
)# --- 4. 处理并可视化结果 ---
result = results[0]
boxes = result.boxes
names = model.names# 为不同垃圾类别定义颜色 (BGR格式)
colors = {'garbage': (255, 0, 0), # 蓝色
}annotated_image = image.copy()for box in boxes:x1, y1, x2, y2 = map(int, box.xyxy[0].tolist())cls_id = int(box.cls[0])class_name = names[cls_id]conf = float(box.conf[0])color = colors.get(class_name, (255, 255, 255)) # 默认白色# 绘制检测框cv2.rectangle(annotated_image, (x1, y1), (x2, y2), color, 2)# 绘制标签label = f"{class_name}: {conf:.2f}"(text_width, text_height), _ = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.6, 1)cv2.rectangle(annotated_image, (x1, y1 - text_height - 10), (x1 + text_width, y1), color, -1)cv2.putText(annotated_image, label, (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 255), 1)# --- 5. 显示与保存结果 ---
cv2.imshow('Urban Litter Detection - Deep Learning + OpenCV', annotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()output_path = 'litter_detection_result.jpg'
cv2.imwrite(output_path, annotated_image)
print(f"检测结果已保存至: {output_path}")# --- (可选) 统计垃圾信息 ---
print("\n检测到的垃圾:")
litter_count = {}
for box in boxes:cls_id = int(box.cls[0])class_name = names[cls_id]litter_count[class_name] = litter_count.get(class_name, 0) + 1if litter_count:total_items = sum(litter_count.values())print(f" 共发现 {total_items} 件垃圾:")for item, count in litter_count.items():print(f" {item}: {count} 件")
else:print(" 未检测到明显垃圾。")
6. 代码详解
- 模型加载与预测: 核心是加载训练好的 YOLO12 模型并进行预测。
- 类别与颜色映射: 为不同垃圾类型分配鲜明颜色,便于视觉区分。
- 结果分析: 可统计各类垃圾数量,生成环卫作业建议(如“该区域烟头密集,需加强宣传”)。



7. 应用场景与展望
- 智慧环卫巡查: 在环卫车上部署摄像头,AI自动识别垃圾点位,生成清扫路线。
- 城市监控联动: 与公安/城管视频平台对接,发现乱扔行为自动抓拍取证。
- 社区环境评估: 定期巡检小区、公园,生成“洁净指数”报告。
- 无人机河道巡检: 识别水面漂浮垃圾,指导打捞作业。
- 未来方向:
- 结合 YOLO12-seg 实现实例分割,精确勾勒垃圾轮廓;
- 引入 多目标跟踪(MOT),追踪乱扔行为全过程;
- 部署至边缘设备(如 Jetson Nano),实现低功耗实时检测。
8. 总结
本文成功构建了一套基于深度学习(YOLO12)与OpenCV的智能垃圾检测系统。该系统能够高效、准确地识别多种常见垃圾类型,为城市环境治理提供了强有力的技术支持。这套方案不仅提升了环卫管理的智能化水平,也为建设“干净、整洁、有序”的智慧城市开辟了新路径。
核心优势:
- 智能高效: 自动化识别,7×24 小时无休巡查。
- 精准分类: 支持多类垃圾识别,助力分类回收。
- 技术成熟: 基于主流深度学习框架,易于部署与扩展。
- 应用广泛: 可适配街道、公园、河道、校园等多种场景。
9. 完整代码与资源
- Ultralytics YOLO12 官方文档: https://docs.ultralytics.com/yolo12/
- OpenCV 官方文档: https://docs.opencv.org/
- LabelImg 下载: https://github.com/tzutalin/labelImg
感谢阅读! 如果您对智慧环卫或AI视觉应用感兴趣,希望本文能为您提供有价值的参考。请点赞、收藏、分享,并关注我的CSDN博客,共同探索科技如何守护城市洁净!
