当前位置: 首页 > news >正文

【图像算法 - 29】手把手教你用 YOLO + PyQt5 搭建垃圾检测系统(附完整源码)

摘要: 城市街道、公园、河道等公共区域的随意丢弃垃圾,严重影响环境卫生与城市形象。传统依赖人工巡查的方式效率低、响应慢、成本高。本文将带您构建一套基于深度学习(以 YOLO12 为例)与OpenCV的智能垃圾检测系统。我们将详细介绍从数据采集、模型训练到推理部署的完整流程,实现对常见垃圾类型(如塑料瓶、纸屑、烟头、餐盒、废弃口罩、塑料袋等)的精准识别与定位,助力智慧环卫与城市精细化管理!

关键词: 深度学习, 垃圾检测, 智慧环卫, YOLO12, OpenCV, 计算机视觉, 智慧城市, 目标检测, Python, 环境监测


【图像算法 - 29】从数据到界面:多路生活垃圾目标检测系统的 YOLO 模型训练与 PyQt5 实时部署

1. 引言:AI赋能城市治理,让垃圾无处藏身

在现代城市环境中,乱扔垃圾不仅破坏市容,还可能堵塞排水系统、污染水体、传播疾病。传统的垃圾监管依赖环卫人员定期巡查或市民举报,存在滞后性强、覆盖盲区多、取证困难等问题。

随着人工智能技术的发展,基于深度学习的视觉检测系统为城市环境治理提供了全新思路。通过在监控摄像头、巡逻机器人或无人机上部署AI模型,可实现对地面垃圾的自动发现、分类识别与实时告警,从而推动从“被动清理”向“主动预警”转变。

本文将聚焦于城市公共区域场景,利用先进的YOLO12目标检测模型,结合OpenCV的强大图像处理能力,构建一个高效、鲁棒的智能垃圾检测系统。我们的目标是让机器“看懂”街道,精准识别各类垃圾,为智慧环卫提供核心技术支撑。

在这里插入图片描述

主要功能

  1. 多路并行处理:最多支持 8 路视频/图像/摄像头/RTSP 流同时推理
  2. YOLO系列全支持:目标检测 + 实例分割(mask)+ OBB + POSE + 分类可视化
  3. 动态类别颜色映射:自动为新类别分配唯一颜色,支持模型热切换
  4. 双击放大单路视频:独立窗口查看细节,不影响主界面流畅性
  5. 全流程日志记录:时间、通道、源、目标数量,支持 CSV 导出
  6. 资源友好设计:全局推理互斥锁避免 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 数据标注

  • 工具: 使用 LabelImgCVATRoboflow 等开源标注工具。

  • 方法: 采用 矩形框 (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博客,共同探索科技如何守护城市洁净!

http://www.dtcms.com/a/516654.html

相关文章:

  • 误差优化方向-1
  • 网站建设制作公司思企互联兰州网站优化公司
  • 沈阳平台网站建设网站开发的实训周的实训过程
  • 希尔排序详解
  • 专业网站开发公司网站流量排名 全球
  • 深入浅出 SQL 注入
  • wordpress 整站 数据石林网站建设
  • 哪些网站是响应式网站网站运营是做什么的
  • TDengine 配置参数作用范围对比
  • DDPM(Diffusion)个人总结
  • 解决了“错误的问题”:对AI编程热潮的深度反思
  • 【回眸】嵌入式软件面试题背诵版
  • FreeRTOS主要寄存器说明及面试题
  • 怎么写公司网站的文案做360手机网站
  • 涿州网站制作wordpress选中改变字体颜色
  • 企业如何进行海外营销?
  • 【sqlite】WAL初探
  • 制作网站的顺序是海南网上报名系统
  • 做网站都需要哪些知识珠海市住房和城乡建设局网站
  • MySQL分组查询GROUP BY
  • 数组——双指针:75.颜色分类
  • LLD文档核心:从模块设计到落地开发
  • 雄安做网站深圳出台科技支持政策
  • 网站域名能更该吗怎样用模板建网站
  • proc文件系统入门到精通教程
  • 点积、内积与哈达玛积详解
  • 杭州模板建站2022注册公司取名
  • 政务网站建设论文西地那非片吃了多久会硬起来
  • 金融杠杆全解析:从铁矿期货保证金计算到期权盈亏分析
  • 【工具变量】绿色金融改革创新试验区DID数据集(2000-2024年)