--- title: AI 垃圾分类助手 emoji: ♻️ colorFrom: green colorTo: green sdk: gradio sdk_version: 5.0.0 app_file: app.py pinned: false --- # ♻️ AI 垃圾分类助手 基于深度学习的垃圾分类识别系统,支持 6 类垃圾(塑料、纸板、纸张、玻璃、金属、其他垃圾)的图像识别,并提供投放指南、环保积分和排行榜功能。 **[GitHub 仓库](https://github.com/hutiger9/garbage-classification)** ## 技术栈 | 模块 | 技术 | |------|------| | 深度学习框架 | PyTorch + torchvision | | 模型架构 | MobileNetV3-Small(迁移学习,ImageNet 预训练) | | 硬件加速 | Apple Silicon MPS / NVIDIA CUDA / CPU 自动切换 | | Web 界面 | Gradio | | REST API | FastAPI + uvicorn | | 数据库 | SQLite(用户积分、分类记录) | | 包管理 | uv / pip | | 数据可视化 | Matplotlib(训练曲线) | | 推理优化 | Top-K 置信度输出、混淆矩阵分析 | ## 项目结构 ``` Garbage_classification/ ├── main.py # CLI 入口(训练/预测/webui/api) ├── train.py # 模型训练 + 评估报告 ├── predict.py # 推理预测 ├── webui.py # Gradio 网页界面 ├── app/ │ └── api.py # FastAPI REST 接口 ├── config.py # 全局配置 ├── database.py # SQLite 数据库 ├── knowledge.py # 垃圾分类知识库 ├── split_dataset.py # 数据集划分工具 ├── download_trashnet.py # 数据集下载 ├── models/ # 模型保存目录 ├── dataset/ # 数据集目录 ├── pyproject.toml # 项目配置 └── requirements.txt # 依赖列表 ``` ## 快速开始 ### 1. 解压项目 ```bash unzip Garbage_classification.zip cd Garbage_classification ``` ### 2. 安装 Python 环境 **方式一:uv(推荐)** ```bash # 安装 uv(如未安装) curl -LsSf https://astral.sh/uv/install.sh | sh # 创建虚拟环境并安装依赖 uv venv uv sync ``` **方式二:pip** ```bash python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -r requirements.txt ``` ### 3. 准备数据集 ```bash # 自动下载 TrashNet 数据集并划分训练集/验证集/测试集 python download_trashnet.py ``` 或手动下载后将图片放入 `dataset/` 目录,运行: ```bash python split_dataset.py ``` ### 4. 训练模型 ```bash # 使用 uv uv run python main.py train # 或使用 pip 虚拟环境 python main.py train ``` 训练完成后会在 `models/` 目录生成: - `garbage_model.pth` — 最佳模型权重 - `training_curves.png` — 训练 Loss/Accuracy 曲线图 - `evaluation_report.txt` — 详细评估报告(各类别准确率 + 混淆矩阵) ### 5. 启动 Web 界面 ```bash uv run python main.py webui ``` 打开浏览器访问 `http://localhost:7860` ### 6. 启动 API 服务(可选,供小程序调用) ```bash uv run python main.py api ``` API 文档访问 `http://localhost:8000/docs` ## 支持的垃圾类别 | 类别 | 英文 | 举例 | |------|------|------| | 🥤 塑料 | plastic | 饮料瓶、塑料袋、塑料容器 | | 📦 纸板 | cardboard | 快递纸箱、包装盒 | | 📄 纸张 | paper | 办公用纸、报纸、杂志 | | 🍾 玻璃 | glass | 玻璃瓶、玻璃制品 | | 🥫 金属 | metal | 易拉罐、金属罐、铁盒 | | 🍂 其他垃圾 | trash | 杂物、不可回收物 | ## 模型性能 在 TrashNet 测试集上(基于 MobileNetV3-Small): | 类别 | 准确率 | |------|--------| | 纸板 | 96.77% | | 纸张 | 96.67% | | 金属 | 93.65% | | 塑料 | 91.67% | | 玻璃 | 90.79% | | 其他垃圾 | 77.27% | | **总体** | **92.99%** | ## CLI 命令 ```bash # 训练模型 python main.py train # 预测单张图片 python main.py predict <图片路径> # 查询垃圾分类知识 python main.py query <垃圾名称> # 查看用户环保记录 python main.py record <用户名> # 查看用户统计 python main.py stats <用户名> # 查看排行榜 python main.py leaderboard # 启动 Web 界面 python main.py webui # 启动 API 服务 python main.py api ```