# vegetable **Repository Path**: cadcamzy/vegetable ## Basic Information - **Project Name**: vegetable - **Description**: vegetable - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-13 - **Last Updated**: 2026-05-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 蔬菜识别系统 v4 基于 **MobileNetV2 迁移学习** 的蔬菜图像识别系统,提供统一的 Web 界面完成识别与模型训练。 ## 功能特性 - **蔬菜识别**:上传图片,自动识别蔬菜品种,返回 Top-K 结果及置信度 - **在线训练**:通过 Web 界面上传训练数据、配置参数、实时监控训练进度 - **统一界面**:识别与训练在同一 Web 页面中通过 Tab 切换使用 - **迁移学习**:基于 ImageNet 预训练的 MobileNetV2,轻量高效,CPU 即可运行 - **零样本推理**:无训练数据时,预训练模型可直接进行蔬菜类别推理 ## 支持的蔬菜类别(24种) | 分类 | 蔬菜 | |------|------| | 绿叶类 | 白菜、菠菜、生菜、卷心菜、芹菜 | | 茄果类 | 西红柿、茄子、辣椒、青椒 | | 根茎类 | 胡萝卜、土豆、红薯、萝卜、生姜、莲藕 | | 瓜类 | 黄瓜、南瓜、苦瓜 | | 菌类 | 蘑菇 | | 其他 | 西兰花、大蒜、洋葱、豆角、玉米 | ## 技术架构 ``` 输入图片 ↓ ┌─────────────────────────┐ │ MobileNetV2 迁移学习 │ │ (ImageNet预训练权重) │ └─────────────────────────┘ ↓ ┌─────────────────────────┐ │ Softmax 分类 │ │ → Top-K 结果输出 │ └─────────────────────────┘ ``` ## 安装依赖 ```bash pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu pip install fastapi uvicorn python-multipart pillow ``` ## 启动服务 ```bash python src/server.py ``` 启动后访问:http://localhost:8080 ## 使用流程 ### 识别蔬菜 1. 打开页面,切换到「蔬菜识别」Tab 2. 点击或拖拽上传蔬菜图片 3. 点击「开始识别」查看结果 ### 训练模型 1. 切换到「模型训练」Tab 2. 输入类别名称(如 `tomato`),选择图片上传 3. 重复步骤 2 添加更多类别的数据 4. 配置训练参数(轮数、批大小、学习率) 5. 点击「开始训练」,实时查看进度 6. 训练完成后点击「重载模型」生效 ## 数据集结构 ``` dataset/ ├── tomato/ │ ├── img001.jpg │ └── img002.jpg ├── cucumber/ │ └── img001.jpg └── ... ``` 每个类别一个文件夹,放入对应蔬菜图片。建议每个类别至少 50-100 张。 ## API 接口 ### 识别 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/classify` | 上传图片进行识别 | | GET | `/api/health` | 健康检查 | | GET | `/api/classes` | 获取支持的蔬菜类别 | | GET | `/api/model-info` | 获取模型信息 | ### 训练 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/train/upload` | 按类别上传训练图片 | | POST | `/api/train/start` | 启动训练任务 | | GET | `/api/train/status` | 查询训练进度 | | POST | `/api/train/cancel` | 取消训练任务 | | GET | `/api/train/dataset` | 获取数据集信息 | | POST | `/api/train/reload-model` | 重载训练好的模型 | | DELETE | `/api/train/dataset/{category}` | 删除某个类别 | ### 识别接口示例 ```bash curl -X POST -F "file=@vegetable.jpg" http://localhost:8080/api/classify ``` 响应: ```json { "success": true, "results": [ { "name": "西红柿", "confidence": 0.95, "category": "茄果类" }, { "name": "辣椒", "confidence": 0.03, "category": "茄果类" } ] } ``` ### 训练接口示例 ```bash # 上传图片 curl -X POST -F "category=tomato" -F "files=@img1.jpg" -F "files=@img2.jpg" http://localhost:8080/api/train/upload # 启动训练 curl -X POST -F "epochs=20" -F "batch_size=32" -F "learning_rate=0.001" http://localhost:8080/api/train/start # 查询进度 curl http://localhost:8080/api/train/status ``` ## 训练参数 | 参数 | 默认值 | 说明 | |------|--------|------| | epochs | 20 | 训练轮数,推荐 20-50 | | batch_size | 32 | 批大小,推荐 16-64 | | learning_rate | 0.001 | 学习率 | ## 项目结构 ``` ├── assets/ │ └── index.html # 统一 Web 界面(识别 + 训练) ├── src/ │ ├── server.py # FastAPI 服务器 │ ├── tools/ │ │ ├── vegetable_classifier.py # MobileNetV2 分类器 │ │ └── training_manager.py # 后台训练管理器 │ └── ... ├── dataset/ # 训练数据集目录 ├── trained_models/ # 训练产出的模型文件 └── pyproject.toml ``` ## 性能指标 - 模型大小:约 14MB (MobileNetV2) - 推理速度:约 100ms/张 (CPU) - 训练后准确率:依赖数据质量,通常 85%-95%+