在城市管理中,垃圾桶满溢是一个常见但重要的问题。本文将带你从零开始,构建一个基于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模型的检测速度和模型大小对比
检测统计分析
检测类别分布、时间分析和准确率热力图
功能特性
- 多模式检测:支持图片、视频、实时摄像头
- 参数调节:置信度阈值、IOU阈值可调
- 统计分析:实时统计满溢事件和帧数
- 结果保存:自动保存检测结果和统计数据
🔧 部署指南
环境要求
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框架,我们构建了一个完整的智能垃圾桶管理系统。