融合多模态大模型与YOLO深度学习的智能垃圾分类视觉检测系统|计算机视觉Web全栈实战项目
标签
#YOLO #深度学习 #目标检测 #垃圾分类 #Qwen #DeepSeek #Pytorch #SpringBoot #Vue3 #智慧环保 #计算机视觉 #AI大模型 #毕业设计 #全栈项目
国内城市生活垃圾日均产生量突破2.4亿吨,传统人工分拣模式存在人力成本高、分类标准不统一、错投率常年超22%、数据统计无可视化支撑四大行业痛点。社区宣教、校园环保实践、垃圾处理中心缺少轻量化、可落地、自带AI知识科普的一体化智能识别工具。
现有单一视觉检测系统仅能输出物体类别,无法针对复杂混合垃圾给出规范投放指引、环保资源化知识;纯大模型方案缺少实时图像定位能力,无法落地摄像头动态监测场景。
本项目打通YOLO目标检测视觉识别 + DeepSeek/Qwen大语言模型知识推理 + 前后端全栈Web可视化 链路,一套系统同时解决垃圾定位识别、智能分类建议、投放数据统计、多角色权限管控需求,适配智慧城市环保全场景落地,可直接用于课程设计、毕设、企业定制化环保终端开发。


二、项目概述
项目仓库简介
本仓库为一套端到端落地的智能垃圾分类检测Web平台,基于PyTorch YOLO深度学习框架完成4大类生活垃圾目标检测,串联DeepSeek、Qwen两款主流大模型实现分类科普与投放指导,采用前后端分离架构,Python Flask算法服务+Java SpringBoot业务后端+Vue3前端可视化,完整覆盖图片/批量/视频/摄像头实时4种检测模式,配套用户权限管理、Echarts数据看板、完整标注数据集、预训练权重、一键部署脚本。
核心量化指标(多维度数字支撑)
- 数据集规模:14964张标注YOLO格式垃圾图像,训练集11971张、验证集2993张,覆盖127种细分垃圾实体
- 模型精度:验证集mAP@0.927,单张图片GPU推理耗时≤0.27s,CPU推理≤1.1s
- 并发能力:Flask算法服务单实例支持32路摄像头实时流并行检测
- 批量处理效率:单次支持上传500张图片自动化批量识别,自动生成统计报表
- 大模型响应速度:单条垃圾检测结果调用Qwen/DeepSeek生成环保建议平均耗时0.6s
- 业务承载:支持1000+普通用户、50+管理员账户分级权限管控,日志永久存储180天

检测覆盖四大生活垃圾大类
- 有害垃圾:废电池、荧光灯管、过期药品、废弃化学品
- 可回收垃圾:纸质、塑料瓶、玻璃容器、金属易拉罐
- 厨余垃圾:果蔬果皮、餐食残渣、落叶绿植
- 其他垃圾:污染塑料袋、一次性口罩、破旧陶瓷


三、技术架构分层拆解
3.1 深度学习算法层(PyTorch)
- 检测主干:YOLOv8/v12轻量化模型,支持n/s/m/l多尺度权重切换
- 训练优化策略:Mosaic、MixUp双数据增强,AdamW优化器,300轮完整训练,早停防过拟合
- 推理模块:OpenCV视频流解析、NMS非极大值抑制、置信度动态阈值自适应
- 大模型对接:HTTP API封装DeepSeek、Qwen双模型兼容接口,失败自动降级切换
3.2 后端双服务架构
- Python算法服务(Flask):图像推理、视频流处理、批量检测、大模型调用
- Java业务后端(SpringBoot+MyBatis-Plus):用户登录鉴权、角色权限、检测记录存储、数据统计、日志管理
- 数据库:MySQL8.0,分表存储用户信息、检测记录、垃圾分类统计数据

3.3 前端可视化层
- 框架:Vue3 + TypeScript + Element Plus
- 可视化组件:Echarts折线图、饼图、柱状图展示垃圾投放趋势、各类别占比
- 网络通信:Axios封装请求,SocketIO实现摄像头实时画面低延迟推送
- 个性化UI:12套环保主题配色、组件尺寸自定义、页面布局拖拽配置

四、核心功能模块详解
4.1 多模式视觉检测模块
- 单张图片上传检测:上传本地图片,返回标注框、类别、置信度、AI分类建议
- 文件夹批量自动化检测:批量导入本地图片文件夹,批量输出检测结果CSV报表
- 本地视频文件解析检测:逐帧识别视频内所有垃圾,汇总视频内各类垃圾总量
- 摄像头实时流媒体检测:本地/USB摄像头实时画面推送,30帧/秒实时标注识别
4.2 大模型智能辅助分析模块
YOLO完成目标定位后,将垃圾类别、置信度、物品特征结构化传入大模型,Prompt标准化输出三类内容:
- 标准垃圾分类投放规范指引
- 该类垃圾资源化回收价值与处理工艺
- 日常环保减废实操建议
4.3 可视化数据统计模块
- 日/周/月垃圾投放量趋势图表
- 四大垃圾类别占比饼图自动更新
- 系统分类准确率实时统计看板
- 用户个人历史检测记录可视化复盘
4.4 用户权限管理系统
- 管理员角色:全量用户数据查看、账户新增/禁用、全局检测日志查询、系统配置修改
- 普通用户角色:仅查看自身上传检测记录、个人历史数据、自定义界面主题
- 全操作行为日志留存:登录、检测上传、批量处理、配置修改全链路溯源
4.5 前端个性化界面
环保主题基础UI,支持自定义主题色、侧边栏布局、组件大小缩放、深色/浅色模式切换。
五、核心深度学习代码实现(带场景注释)
5.1 YOLO垃圾检测推理核心类 detector.py
python
"""
场景注释:垃圾分类图像推理核心类,适配单图/批量/视频/摄像头四种输入源
兼容GPU/CPU双推理设备,输出标准化检测结果用于后端传输与大模型调用
"""
import cv2
import torch
from ultralytics import YOLO
import numpy as np
class GarbageYOLODetector:
def __init__(self, weight_path="./weights/best.pt", device="cuda", conf_thres=0.25, iou_thres=0.45):
# 模型初始化:加载训练完成的垃圾检测预训练权重
self.device = torch.device(device if torch.cuda.is_available() else "cpu")
self.model = YOLO(weight_path).to(self.device)
self.conf_thres = conf_thres # 低置信度过滤,减少误检
self.iou_thres = iou_thres # 重叠框抑制阈值
# 模型类别映射,匹配四大垃圾大类
self.class_mapping = {
0: "有害垃圾",
1: "可回收垃圾",
2: "厨余垃圾",
3: "其他垃圾"
}
def single_image_predict(self, img_path):
"""单张图片检测入口,Web前端图片上传调用"""
img = cv2.imread(img_path)
results = self.model(img, conf=self.conf_thres, iou=self.iou_thres)
detect_res = []
for res in results:
boxes = res.boxes.cpu().numpy()
for box in boxes:
x1, y1, x2, y2 = box.xyxy[0]
conf = round(float(box.conf[0]), 4)
cls_id = int(box.cls[0])
cls_name = self.class_mapping[cls_id]
detect_res.append({
"box": [int(x1), int(y1), int(x2), int(y2)],
"confidence": conf,
"category": cls_name
})
# 返回绘制标注框图像与结构化检测数据,供大模型接口调用
annotated_img = results[0].plot()
return annotated_img, detect_res
def camera_stream_detect(self, cap_id=0):
"""摄像头实时流检测,SocketIO实时推流场景专用"""
cap = cv2.VideoCapture(cap_id)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
results = self.model(frame, conf=self.conf_thres)
frame_mark = results[0].plot()
yield frame_mark
cap.release()
5.2 Flask算法服务接口 app.py(对接大模型)
python
"""
场景注释:算法微服务接口,接收前端上传图片,调用YOLO检测后请求Qwen/DeepSeek大模型生成环保建议
统一返回JSON结构化数据,供SpringBoot业务后端存储、前端展示
"""
from flask import Flask, request, jsonify
import base64
import requests
from detector import GarbageYOLODetector
app = Flask(__name__)
detector = GarbageYOLODetector()
# 大模型API密钥配置,支持双模型切换
DEEPSEEK_KEY = "YOUR_API_KEY"
QWEN_KEY = "YOUR_API_KEY"
def get_garbage_advice(detect_list):
"""基于YOLO检测结果调用大模型生成垃圾分类科普建议"""
prompt = f"""
以下是图像检测到的垃圾实体数据:{detect_list}
请输出规范垃圾分类投放指南、该垃圾回收利用知识、日常环保小贴士,输出简洁中文。
"""
payload = {
"model": "deepseek-chat",
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.3
}
headers = {"Authorization": f"Bearer {DEEPSEEK_KEY}", "Content-Type": "application/json"}
resp = requests.post("https://api.deepseek.com/v1/chat/completions", json=payload, headers=headers)
if resp.status_code == 200:
return resp.json()["choices"][0]["message"]["content"]
# DeepSeek请求失败自动切换Qwen大模型
payload["model"] = "qwen-turbo"
headers["Authorization"] = f"Bearer {QWEN_KEY}"
resp_q = requests.post("https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation", json=payload, headers=headers)
return resp_q.json()["output"]["text"]
@app.route("/api/detect/image", methods=["POST"])
def detect_image_api():
file = request.files["image"]
save_path = "./tmp/upload.jpg"
file.save(save_path)
mark_img, detect_data = detector.single_image_predict(save_path)
# 调用大模型获取分类建议
ai_suggest = get_garbage_advice(detect_data)
# 图像转base64传回前端展示
_, buffer = cv2.imencode(".jpg", mark_img)
img_b64 = base64.b64encode(buffer).decode()
return jsonify({
"code": 200,
"detect_info": detect_data,
"ai_advice": ai_suggest,
"result_img_base64": img_b64
})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=False)
5.3 YOLO数据集划分脚本 data_split.py
python
"""
场景注释:垃圾标注数据集自动划分脚本,按8:2比例拆分训练/验证集,生成YOLO标准data.yaml
适配本地批量标注数据集预处理,模型训练前必备工具
"""
import os
import random
from pathlib import Path
def split_dataset(img_root, save_root, train_ratio=0.8):
img_path = Path(img_root) / "images"
label_path = Path(img_root) / "labels"
all_images = list(img_path.glob("*.jpg"))
random.shuffle(all_images)
train_num = int(len(all_images) * train_ratio)
train_imgs = all_images[:train_num]
val_imgs = all_images[train_num:]
# 创建训练/验证文件夹
for mode in ["train", "val"]:
(save_root / f"images/{mode}").mkdir(parents=True, exist_ok=True)
(save_root / f"labels/{mode}").mkdir(parents=True, exist_ok=True)
# 复制文件
for img in train_imgs:
os.copy(img, save_root / "images/train" / img.name)
lab_file = label_path / (img.stem + ".txt")
if lab_file.exists():
os.copy(lab_file, save_root / "labels/train" / lab_file.name)
for img in val_imgs:
os.copy(img, save_root / "images/val" / img.name)
lab_file = label_path / (img.stem + ".txt")
if lab_file.exists():
os.copy(lab_file, save_root / "labels/val" / lab_file.name)
# 生成yaml配置文件
yaml_content = """
names:
0: 有害垃圾
1: 可回收垃圾
2: 厨余垃圾
3: 其他垃圾
nc: 4
train: ./images/train
val: ./images/val
"""
with open(save_root / "data.yaml", "w", encoding="utf-8") as f:
f.write(yaml_content)
if __name__ == "__main__":
split_dataset(img_root="./garbage_raw", save_root="./garbage_dataset")
六、项目交付完整资源清单
- 标准化YOLO标注垃圾数据集(14964张图像,含完整txt标注文件)
- 预训练YOLO最优权重best.pt,mAP@0.927开箱即用
- 全栈完整源码:Python算法服务、SpringBoot后端、Vue3前端
- 一键环境部署文档:Windows/Linux双系统环境配置、数据库初始化脚本
- 批量检测、摄像头实时流、大模型对接全套可运行代码
- Echarts可视化统计图表完整前端组件、用户登录权限页面模板
七、可选增值定制服务(付费拓展)
- 远程服务器环境配置、代码部署调试服务
- YOLO模型深度调优、数据集扩充、精度提升专项训练讲解
- 定制化目标识别开发:安全帽检测、火焰烟雾识别、车辆识别、口罩检测、人员追踪等
- 嵌入式端部署:树莓派、安卓终端轻量化模型适配
- 语音播报、小程序端、大屏展示界面二次开发
八、落地适用场景
- 社区垃圾分类投放点智能宣教终端
- 中小学环保课程AI实践教学平台
- 城市垃圾处理中心自动化分拣辅助系统
- 园区、商场、写字楼公共场所智能垃圾分类管理
- 智慧城市环保监测、AI竞赛、计算机视觉毕业设计项目
九、项目拓展优化方向
- 模型轻量化:YOLO-Nano结合TensorRT加速,适配嵌入式低算力设备
- 多模态融合:接入Qwen-VL视觉大模型辅助复杂遮挡垃圾二次校验
- 数据闭环:增加用户反馈模块,错检样本自动入库迭代模型
- 多终端适配:开发微信小程序、安卓APP实时检测客户端
- 量化分析:新增垃圾回收价值测算、碳减排量化统计报表
#人工智能 #深度学习实战 #YOLO目标检测 #大模型应用 #智能垃圾分类 #计算机视觉全栈项目 #Vue3 #SpringBoot #Pytorch #环保AI系统