基于YOLO11的智能垃圾桶满溢检测系统:从训练到部署的完整实战

在城市管理中,垃圾桶满溢是一个常见但重要的问题。本文将带你从零开始,构建一个基于YOLO11的智能垃圾桶满溢检测系统,支持图片检测、视频分析和实时监控。

🎯 项目背景

随着城市化进程加快,垃圾管理成为城市治理的重要组成部分。传统的垃圾桶管理方式往往依赖人工巡检,效率低下且成本高昂。本项目利用深度学习技术,实现了:

  • 🔍 智能检测:自动识别垃圾桶、垃圾和满溢状态
  • 📊 实时监控:支持摄像头实时检测和统计
  • 🌐 Web界面:友好的用户界面,支持多种检测模式
  • 📈 数据分析:提供检测统计和事件记录

🔧 技术架构

核心技术栈

  • 深度学习框架:YOLO11 (Ultralytics)
  • 后端框架:Flask
  • 前端技术:HTML5 + Bootstrap + JavaScript
  • 计算机视觉:OpenCV
  • 数据处理:NumPy, Pandas

系统架构图

请添加图片描述

检测类别

本系统可识别三种主要对象:

  • 🔴 overflow:垃圾桶满溢状态
  • 🟠 garbage:散落的垃圾
  • 🟢 garbage_bin:正常的垃圾桶

📦 项目结构

垃圾桶满溢检测/
├── app.py                    # Flask Web应用
├── train_garbage_overflow.py # 模型训练脚本
├── test_saved_model.py       # 模型测试脚本
├── templates/
│   └── index.html           # Web前端页面
├── static/
│   └── favicon.ico          # 网站图标
├── dataset/                 # 数据集目录
│   ├── yolo/               # YOLO格式数据
│   ├── labels.txt          # 类别标签
│   ├── train_list.txt      # 训练集列表
│   └── val_list.txt        # 验证集列表
├── arg_image/              # 原始图像
├── arg_xml/                # 标注文件
├── models/                 # 预训练模型
├── garbage_overflow_results/ # 训练结果
└── detection_results/       # 检测结果

🚀 实现步骤

1. 数据准备与预处理

首先,我们需要准备VOC格式的数据集,然后转换为YOLO格式:

def voc_to_yolo(voc_dir, yolo_dir, list_file, labels_file, split):
    """将VOC格式转换为YOLO格式"""
    # 读取类别
    with open(labels_file, 'r', encoding='utf-8') as f:
        class_names = [line.strip() for line in f.readlines()]
    
    # 创建输出目录
    images_dir = os.path.join(yolo_dir, 'images', split)
    labels_dir = os.path.join(yolo_dir, 'labels', split)
    os.makedirs(images_dir, exist_ok=True)
    os.makedirs(labels_dir, exist_ok=True)
    
    # 转换标注格式
    # ... 详细转换逻辑

2. 模型训练

使用YOLO11进行训练,配置优化的超参数:

def main():
    # 加载YOLO11模型
    model = YOLO("models/yolo11n.pt")
    
    # 开始训练
    results = model.train(
        data="dataset/yolo/garbage_overflow_data.yaml",
        epochs=100,
        imgsz=640,
        batch=16,
        device='cuda',
        
        # 优化参数
        lr0=0.01,
        momentum=0.937,
        weight_decay=0.0005,
        
        # 数据增强
        hsv_h=0.015,
        hsv_s=0.7,
        hsv_v=0.4,
        degrees=10.0,
        translate=0.1,
        scale=0.5,
        flipud=0.0,
        fliplr=0.5,
        mosaic=1.0,
        mixup=0.1,
    )
训练过程可视化

在这里插入图片描述

训练过程中的损失函数和准确率变化情况

3. Web应用开发

构建Flask后端API,处理图片检测、视频处理和实时监控:

@app.route('/detect_image', methods=['POST'])
def detect_image():
    """图片检测API"""
    if 'image' not in request.files:
        return jsonify({'error': '未提供图像文件'}), 400
    
    file = request.files['image']
    
    # 读取图像
    file_bytes = file.read()
    nparr = np.frombuffer(file_bytes, np.uint8)
    img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
    
    # 执行检测
    model = YOLO(SELECTED_MODEL)
    results = model(img, conf=CONFIDENCE_THRESHOLD)
    
    # 处理结果
    detections = []
    for result in results:
        # ... 处理检测结果
    
    return jsonify({
        'success': True,
        'detections': detections,
        'image': img_base64
    })

4. 实时检测功能

实现摄像头实时检测和视频流处理:

def detection_worker():
    """后台检测工作线程"""
    model = YOLO(SELECTED_MODEL)
    frame_idx = 0
    
    while detection_active:
        ret, frame = current_video_capture.read()
        if not ret:
            break
            
        # 处理帧
        processed_frame, detections = process_frame(frame, model)
        
        # 更新统计
        if event_counter:
            event_counter.update(processed_frame, detections, frame_idx)
        
        frame_idx += 1
        time.sleep(0.03)  # 控制帧率

5. 前端界面设计

创建响应式的Web界面,支持多种检测模式:

<!-- 检测模式切换 -->
<div class="btn-group w-100" role="group">
    <input type="radio" class="btn-check" name="detectionMode" id="imageMode" checked>
    <label class="btn btn-outline-primary" for="imageMode">图片检测</label>
    
    <input type="radio" class="btn-check" name="detectionMode" id="videoMode">
    <label class="btn btn-outline-primary" for="videoMode">视频检测</label>
    
    <input type="radio" class="btn-check" name="detectionMode" id="cameraMode">
    <label class="btn btn-outline-primary" for="cameraMode">摄像头检测</label>
</div>

<!-- 检测结果展示 -->
<div id="resultPanel" class="mt-4">
    <h5>检测结果</h5>
    <table class="table table-striped">
        <thead>
            <tr>
                <th>类别</th>
                <th>置信度</th>
                <th>位置</th>
                <th>面积</th>
            </tr>
        </thead>
        <tbody id="resultTableBody"></tbody>
    </table>
</div>

📊 效果展示

检测准确率

在这里插入图片描述

各类别检测准确率对比图

检测效果

  • 满溢检测准确率:92.5%
  • 垃圾识别准确率:89.3%
  • 垃圾桶识别准确率:95.8%
  • 平均检测时间:45ms/帧

性能对比

在这里插入图片描述
不同YOLO11模型的检测速度和模型大小对比

检测统计分析

在这里插入图片描述

检测类别分布、时间分析和准确率热力图

功能特性

  1. 多模式检测:支持图片、视频、实时摄像头
  2. 参数调节:置信度阈值、IOU阈值可调
  3. 统计分析:实时统计满溢事件和帧数
  4. 结果保存:自动保存检测结果和统计数据

🔧 部署指南

环境要求

pip install ultralytics flask opencv-python numpy

快速启动

# 1. 训练模型
python train_garbage_overflow.py

# 2. 测试模型
python test_saved_model.py

# 3. 启动Web应用
python app.py

访问应用

打开浏览器访问:http://localhost:5000

💡 核心亮点

系统优势对比

与传统垃圾桶管理方法的全面对比

1. 智能数据处理

  • 自动VOC到YOLO格式转换
  • 智能数据集分割(8:2训练验证比例)
  • 多种数据增强技术

2. 优化的训练策略

  • 渐进式学习率调度
  • 适合垃圾检测的数据增强
  • 早停机制防止过拟合

3. 实时性能优化

  • 多线程处理框架
  • 帧率控制和缓存优化
  • GPU加速推理

4. 用户体验

  • 直观的Web界面
  • 实时检测反馈
  • 详细的统计信息

📝 总结

本项目展示了如何使用现代深度学习技术解决实际的城市管理问题。通过YOLO11的强大检测能力,结合Flask Web框架,我们构建了一个完整的智能垃圾桶管理系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值