融合多模态大模型与YOLO深度学习的智能垃圾分类视觉检测系统|计算机视觉Web全栈实战项目

融合多模态大模型与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数据看板、完整标注数据集、预训练权重、一键部署脚本。

核心量化指标(多维度数字支撑)

  1. 数据集规模:14964张标注YOLO格式垃圾图像,训练集11971张、验证集2993张,覆盖127种细分垃圾实体
  2. 模型精度:验证集mAP@0.927,单张图片GPU推理耗时≤0.27s,CPU推理≤1.1s
  3. 并发能力:Flask算法服务单实例支持32路摄像头实时流并行检测
  4. 批量处理效率:单次支持上传500张图片自动化批量识别,自动生成统计报表
  5. 大模型响应速度:单条垃圾检测结果调用Qwen/DeepSeek生成环保建议平均耗时0.6s
  6. 业务承载:支持1000+普通用户、50+管理员账户分级权限管控,日志永久存储180天

检测覆盖四大生活垃圾大类

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

三、技术架构分层拆解

3.1 深度学习算法层(PyTorch)

  • 检测主干:YOLOv8/v12轻量化模型,支持n/s/m/l多尺度权重切换
  • 训练优化策略:Mosaic、MixUp双数据增强,AdamW优化器,300轮完整训练,早停防过拟合
  • 推理模块:OpenCV视频流解析、NMS非极大值抑制、置信度动态阈值自适应
  • 大模型对接:HTTP API封装DeepSeek、Qwen双模型兼容接口,失败自动降级切换

3.2 后端双服务架构

  1. Python算法服务(Flask):图像推理、视频流处理、批量检测、大模型调用
  2. Java业务后端(SpringBoot+MyBatis-Plus):用户登录鉴权、角色权限、检测记录存储、数据统计、日志管理
  • 数据库:MySQL8.0,分表存储用户信息、检测记录、垃圾分类统计数据

3.3 前端可视化层

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

四、核心功能模块详解

4.1 多模式视觉检测模块

  1. 单张图片上传检测:上传本地图片,返回标注框、类别、置信度、AI分类建议
  2. 文件夹批量自动化检测:批量导入本地图片文件夹,批量输出检测结果CSV报表
  3. 本地视频文件解析检测:逐帧识别视频内所有垃圾,汇总视频内各类垃圾总量
  4. 摄像头实时流媒体检测:本地/USB摄像头实时画面推送,30帧/秒实时标注识别

4.2 大模型智能辅助分析模块

YOLO完成目标定位后,将垃圾类别、置信度、物品特征结构化传入大模型,Prompt标准化输出三类内容:

  1. 标准垃圾分类投放规范指引
  2. 该类垃圾资源化回收价值与处理工艺
  3. 日常环保减废实操建议

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")

六、项目交付完整资源清单

  1. 标准化YOLO标注垃圾数据集(14964张图像,含完整txt标注文件)
  2. 预训练YOLO最优权重best.pt,mAP@0.927开箱即用
  3. 全栈完整源码:Python算法服务、SpringBoot后端、Vue3前端
  4. 一键环境部署文档:Windows/Linux双系统环境配置、数据库初始化脚本
  5. 批量检测、摄像头实时流、大模型对接全套可运行代码
  6. Echarts可视化统计图表完整前端组件、用户登录权限页面模板

七、可选增值定制服务(付费拓展)

  1. 远程服务器环境配置、代码部署调试服务
  2. YOLO模型深度调优、数据集扩充、精度提升专项训练讲解
  3. 定制化目标识别开发:安全帽检测、火焰烟雾识别、车辆识别、口罩检测、人员追踪等
  4. 嵌入式端部署:树莓派、安卓终端轻量化模型适配
  5. 语音播报、小程序端、大屏展示界面二次开发

八、落地适用场景

  1. 社区垃圾分类投放点智能宣教终端
  2. 中小学环保课程AI实践教学平台
  3. 城市垃圾处理中心自动化分拣辅助系统
  4. 园区、商场、写字楼公共场所智能垃圾分类管理
  5. 智慧城市环保监测、AI竞赛、计算机视觉毕业设计项目

九、项目拓展优化方向

  1. 模型轻量化:YOLO-Nano结合TensorRT加速,适配嵌入式低算力设备
  2. 多模态融合:接入Qwen-VL视觉大模型辅助复杂遮挡垃圾二次校验
  3. 数据闭环:增加用户反馈模块,错检样本自动入库迭代模型
  4. 多终端适配:开发微信小程序、安卓APP实时检测客户端
  5. 量化分析:新增垃圾回收价值测算、碳减排量化统计报表

#人工智能 #深度学习实战 #YOLO目标检测 #大模型应用 #智能垃圾分类 #计算机视觉全栈项目 #Vue3 #SpringBoot #Pytorch #环保AI系统