bizzyumK/crop-disease-detection
GitHub: bizzyumK/crop-disease-detection
基于CNN深度学习的作物病害图像检测系统,支持14种作物45类病害识别并提供双语治疗建议,帮助农民及早发现并防治作物病害。
Stars: 0 | Forks: 0
# 🌾 农业作物病害检测与咨询系统
一个综合性的基于网络的解决方案,帮助农民从叶片图像中识别作物病害,并提供可行的治疗建议。该系统将深度学习模型(准确率96.18%)与双语咨询系统相结合,使农业专业知识能够被农民所使用。
**🔗 实时演示**: [https://greenbidu.vercel.app/](https://greenbidu.vercel.app/)
## 📋 目录
- [项目概述](#-project-overview)
- [主要功能](#-key-features)
- [支持的作物与病害](#-supported-crops--diseases)
- [技术栈](#-technology-stack)
- [模型性能](#-model-performance)
- [系统架构](#-system-architecture)
- [安装与设置](#-installation--setup)
- [API文档](#-api-documentation)
- [使用指南](#-usage-guide)
- [咨询系统](#-advisory-system)
- [模型开发过程](#-model-development-process)
- [项目结构](#-project-structure)
- [贡献者](#-contributors)
- [未来路线图](#-future-roadmap)
- [许可证](#-license)
- [致谢](#-acknowledgments)
## 🎯 项目概述
作物病害在全球范围内造成严重的产量损失——这通常是因为农民无法及早识别病害或缺乏专家建议。该系统通过以下方式解决这两个问题:
✅ **从叶片图像检测病害** - 使用训练好的深度学习模型
✅ **提供详细建议** - 包括症状、原因、治疗步骤和预防措施
✅ **支持多种语言**(英语和尼泊尔语),以惠及更多农民
✅ **存储用户上传** - 用于个人历史记录
✅ **提供置信度分数** - 帮助用户了解预测的可靠性
该系统目前支持**14种不同作物**的**45个病害类别**,验证准确率为**96.18%**。
## ✨ 主要功能
### 面向农民和用户
| 功能 | 描述 |
|---------|-------------|
| 📸 **图像上传** | 通过网页界面直接上传叶片图像 |
| 🤖 **即时检测** | 在2-3秒内获得病害识别和置信度分数 |
| 💊 **治疗建议** | 详细的病害管理分步程序 |
| 🌐 **语言切换** | 在英语和尼泊尔语之间无缝切换 |
| 📊 **个人仪表板** | 查看所有上传的图像和之前的检测结果 |
| 🗑️ **图像管理** | 从个人历史记录中删除图像 |
| 📈 **置信度可视化** | 查看具有置信度百分比的前置预测 |
| 📥 **报告下载** | 下载详细的分析报告 |
### 面向系统管理员
| 功能 | 描述 |
|---------|-------------|
| 🔐 **用户认证** | 使用JWT进行安全的注册和登录 |
| 🗄️ **图像存储** | 基于MongoDB的图像元数据管理 |
| 📚 **咨询管理** | 易于扩展的病害咨询数据库 |
| ⚙️ **模型推理** | 用于病害预测的API端点 |
## 🌱 支持的作物与病害
该模型可以检测以下**14种作物**的**45个不同类别**的病害:
### 🍎 苹果(4个类别)
- 苹果黑星病
- 黑腐病
- 雪松苹果锈病
- 健康
### 🍌 香蕉(3个类别)
- 健康叶片
- 巴拿马病
- 叶斑病
### 🍒 樱桃(2个类别)
- 白粉病
- 健康
### ☕ 咖啡(2个类别)
- 无锈病(健康)
- 锈病
### 🌽 玉米/谷物(4个类别)
- 尾孢菌叶斑病(灰叶斑病)
- 普通锈病
- 北方叶枯病
- 健康
### 🍇 葡萄(4个类别)
- 黑腐病
- 埃斯卡病(黑麻疹)
- 叶枯病(叶斑病)
- 健康
### 🥭 芒果(3个类别)
- 炭疽病
- 健康
- 白粉病
### 🍊 橙子(1个类别)
- 黄龙病(柑橘黄化病)
### 🍑 桃子(2个类别)
- 细菌性斑点病
- 健康
### 🥔 马铃薯(3个类别)
- 早疫病
- 晚疫病
- 健康
### 🍓 草莓(2个类别)
- 叶灼病
- 健康
### 🎋 甘蔗(5个类别)
- 花叶病
- 红腐病
- 红锈病
- 黄锈病
- 健康
### 🍅 番茄(10个类别)
- 细菌性斑点病
- 早疫病
- 晚疫病
- 叶霉病
- 斑枯病
- 蜘蛛螨(二斑叶螨)
- 靶斑病
- 番茄黄化曲叶病毒
- 番茄花叶病毒
- 健康
**总计**:14种作物,45个病害/健康类别
## 🛠️ 技术栈
### 前端
| 技术 | 用途 |
|------------|---------|
| ⚛️ **React 19** | 使用现代Hooks的UI库 |
| ⚡ **Vite** | 快速构建工具和开发服务器 |
| 🎨 **TailwindCSS** | 实用优先的样式设计 |
| 🧭 **React Router v7** | 导航和路由 |
| 📡 **Axios** | 带拦截器的HTTP客户端 |
| 🚀 **Vercel** | 前端部署平台 |
### 后端
| 技术 | 用途 |
|------------|---------|
| 🟢 **Node.js** | JavaScript运行时 |
| 🚂 **Express** | Web框架 |
| 🍃 **MongoDB** | NoSQL数据库 |
| 📦 **Mongoose** | MongoDB的ODM |
| 🔑 **JWT** | 认证令牌 |
| 📁 **Multer** | 文件上传处理 |
| 🔐 **bcryptjs** | 密码哈希 |
### 机器学习
| 技术 | 用途 |
|------------|---------|
| 🧠 **TensorFlow/Keras** | 深度学习框架 |
| 📱 **MobileNetV2** | 基础模型架构 |
| 🖼️ **PIL/Pillow** | 图像预处理 |
| 🔢 **NumPy** | 数值计算 |
| 📊 **scikit-learn** | 评估指标 |
| 🚀 **FastAPI** | 模型服务(可选) |
## 📊 模型性能
### 总体指标
| 指标 | 值 |
|--------|-------|
| ✅ **验证准确率** | **96.18%** |
| 📈 **加权F1分数** | 0.9607 |
| 📊 **宏平均F1分数** | 0.9516 |
| 🎯 **ROC AUC(微观)** | 0.9993 |
| 📉 **错误率** | 3.82% |
| 🖼️ **验证图像总数** | 19,776 |
| ✔️ **正确预测数** | 19,021 |
### 表现最佳的类别(100%准确率)
- 甘蔗__红锈病
- 橙子__黄龙病(柑橘黄化病)
- 葡萄__叶枯病(叶斑病)
- 葡萄__健康
- 草莓__健康
### 需要改进的类别
| 类别 | 当前准确率 |
|-------|------------------|
| 咖啡__无锈病 | 45.81% |
| 甘蔗__花叶病 | 80.30% |
| 甘蔗__健康 | 85.11% |
| 甘蔗__黄锈病 | 85.27% |
| 番茄__蜘蛛螨 | 86.90% |
## 🏗️ 系统架构
```
┌─────────────────────────────────────────────────────────────────┐
│ User Browser │
│ (React Frontend - Vercel) │
└─────────────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ API Gateway (Backend) │
│ Node.js/Express - Port 5000 │
├─────────────────────────────────────────────────────────────────┤
│ • Authentication (JWT) • Image Upload (Multer) │
│ • User Management • Advisory Retrieval │
│ • Image Metadata Storage • MongoDB Connection │
└─────────────────────────────┬───────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ MongoDB │ │ File System │ │ FastAPI/ML │
│ Database │ │ (Uploads) │ │ Service │
│ • Users │ │ • User Images │ │ • Model Loading│
│ • Images Meta │ │ • Predictions │ │ • Inference │
│ • Advisory │ │ │ │ • Advisory │
└─────────────────┘ └─────────────────┘ └─────────────────┘
```
## 💻 安装与设置
### 前置条件
- Node.js(v18或更高版本)
- MongoDB(本地实例或MongoDB Atlas)
- Python 3.8+(可选,用于模型推理)
- Git
### 步骤1:克隆仓库
```
git clone https://github.com/sabin74/Agriculture-Crop-Disease-Detection-Advisory-System.git
cd Agriculture-Crop-Disease-Detection-Advisory-System
```
### 步骤2:后端设置
```
cd backend
npm install
```
创建`.env`文件:
```
MONGO_URI=mongodb://localhost:27017/crop_disease
JWT_SECRET=your_super_secret_jwt_key_change_this
PORT=5000
```
启动后端服务器:
```
npm run dev
```
服务器将在`http://localhost:5000`运行
### 步骤3:前端设置
```
cd ../frontend
npm install
```
创建`.env`文件:
```
VITE_SERVER_URL=http://localhost:5000
VITE_FASTAPI_URL=http://localhost:8000
```
启动开发服务器:
```
npm run dev
```
应用程序将在`http://localhost:5173`运行
### 步骤4:模型服务(可选)
```
cd ../Modeling
pip install -r requirements.txt
streamlit run app.py
```
演示将在`http://localhost8501`运行
## 📡 API文档
### 认证端点
#### POST `/api/auth/注册`
创建新用户账户。
**请求体:**
```
{
"username": "farmer_john",
"email": "john@example.com",
"password": "SecurePass123!"
}
```
**响应:**
```
{
"_id": "user_id",
"username": "farmer_john",
"email": "john@example.com",
"token": "jwt_token_here"
}
```
#### POST `/api/auth/登录`
登录并接收JWT令牌。
**请求体:**
```
{
"email": "john@example.com",
"password": "SecurePass123!"
}
```
**响应:**
```
{
"_id": "user_id",
"name": "farmer_john",
"email": "john@example.com",
"token": "jwt_token_here"
}
```
### 图像端点
#### POST `/api/images/上传`
上传叶片图像进行分析。(需要认证)
**请求头:**
- `Authorization: Bearer `
**表单数据:**
- `image`:图像文件(JPEG、PNG、JPG)
**响应:**
```
{
"message": "Image uploaded successfully!",
"image": {
"_id": "image_id",
"farmer": "user_id",
"imageUrl": "/uploads/filename.jpg",
"diseaseDetected": "pending"
}
}
```
#### GET `/api/图片`
获取认证用户的所有图像。
**请求头:**
- `Authorization: Bearer `
**响应:** 图像对象数组
#### DELETE `/api/图片/:id`
删除特定图像。(需要认证)
**请求头:**
- `Authorization: Bearer `
### 咨询端点
#### GET `/api/咨询/:disease`
获取检测到的病害的咨询信息。
**请求头:**
- `Authorization: Bearer `
**响应:**
```
{
"disease": "Tomato__Late_blight",
"advice": "Remove infected leaves immediately. Apply copper-based fungicide..."
}
```
## 📖 使用指南
### 面向新用户
1. **访问应用程序**
- 访问[https://greenbidu.vercel.app/](https://greenbidu.vercel.app/)
2. **创建账户**
- 点击"注册"
- 输入您的姓名、邮箱和密码
- 密码必须8个字符以上,包含大写字母、小写字母、数字和特殊字符
3. **登录**
- 输入您的邮箱和密码
- 您将被重定向到您的仪表板
### 检测病害
1. **上传图像**
- 点击仪表板上的"上传图像"按钮
- 选择一张清晰的叶片图像(JPG、JPEG或PNG)
- 确保叶片光线充足且居中
2. **等待分析**
- 处理需要2-3秒
- 系统使用训练好的模型分析图像
3. **查看结果**
- 仪表板上显示检测到的病害名称
- 置信度分数显示模型的确定程度
- 点击"查看建议"获取详细的治疗信息
4. **浏览咨询**
- 在英语和尼泊尔语之间切换
- 查看症状、原因和预防措施
- 按照分步治疗程序操作
- 查看预估的产量影响
### 管理您的历史记录
- 所有上传的图像都显示在仪表板的网格中
- 每张卡片显示图像缩略图、病害状态和置信度
- 使用"删除"按钮移除不需要的图像
- 再次点击"查看建议"可以重新查看治疗信息
## 💡 咨询系统
每次病害检测都会返回全面的农业指导:
### 提供的信息
| 部分 | 详情 |
|---------|---------|
| 🔴 **严重程度** | 严重/高/中/低,带颜色编码 |
| 🧬 **症状** | 病害的视觉指标 |
| 🦠 **原因** | 病原体和环境因素 |
| 🛡️ **预防** | 避免未来爆发的措施 |
| 💊 **治疗** | 分步管理程序 |
| ⚠️ **立即行动** | 严重情况的紧急步骤 |
| 📉 **产量影响** | 预估的作物损失百分比 |
| ⏰ **下次检查** | 推荐的随访时间表 |
### 语言支持
- **英语** 🇬🇧 - 完整的技术和通用术语
- **尼泊尔语** 🇳🇵 - 本地化的农业术语
## 🧠 模型开发过程
### 阶段1:数据探索
- 分析了74,880张训练图像,涵盖45个类别
- 识别了类别不平衡(最小和最大类别之间相差43.9倍)
- 验证了图像尺寸、格式和质量
- 生成了分布可视化
### 阶段2:预处理
- 将所有图像调整为224×224像素(MobileNetV2标准)
- 应用数据增强:
- 旋转(±20°,强增强:±40°)
- 宽度/高度偏移(±10%,强增强:±20%)
- 缩放(±10%,强增强:±20%)
- 水平翻转(始终)
- 亮度调整(0.9-1.1,强增强:0.8-1.2)
- 剪切(强增强:±20%)
- 计算类别权重以处理不平衡
### 阶段3:模型架构
- **基础模型**:MobileNetV2(在ImageNet上预训练)
- **自定义分类头**:
- 全局平均池化
- Dense(512) + ReLU激活
- Dropout(0.5)
- Dense(256) + ReLU激活
- Dropout(0.5)
- Dense(45) + Softmax激活
- **优化器**:Adam(初始学习率:1e-4)
### 阶段4:训练策略
**阶段1(20个epoch):**
- 冻结基础模型权重
- 仅训练分类头
- 学习率:1e-4
**阶段2(20个epoch):**
- 解冻基础模型进行微调
- 较低学习率:5e-6
- 早停和reduce-on-plateau回调
### 阶段5:评估
- 验证准确率:96.18%
- 混淆矩阵分析
- 每类精确率、召回率和F1分数
- ROC-AUC曲线(微观和宏平均)
- 误分类模式分析
## 📁 项目结构
```
Agriculture-Crop-Disease-Detection-Advisory-System/
│
├── backend/ # Node.js backend server
│ ├── config/
│ │ └── db.js # MongoDB connection
│ ├── controllers/
│ │ ├── advisoryController.js # Advisory endpoint logic
│ │ ├── authController.js # Authentication handlers
│ │ └── imageController.js # Image CRUD operations
│ ├── middleware/
│ │ ├── authMiddleware.js # JWT verification
│ │ └── upload.js # Multer configuration
│ ├── models/
│ │ ├── Advisory.js # Disease advice schema
│ │ ├── Images.js # Image metadata schema
│ │ └── User.js # User schema with bcrypt
│ ├── routes/
│ │ ├── advisory.js # /api/advisory routes
│ │ ├── auth.js # /api/auth routes
│ │ └── images.js # /api/images routes
│ ├── uploads/ # Stored user images
│ ├── package.json
│ └── server.js # Application entry point
│
├── frontend/ # React frontend application
│ ├── public/
│ │ └── vite.svg
│ ├── src/
│ │ ├── api/
│ │ │ ├── advisory.api.js # Advisory API calls
│ │ │ ├── auth.api.js # Authentication API
│ │ │ ├── axios.js # Axios instance with interceptors
│ │ │ └── image.api.js # Image upload API
│ │ ├── assets/
│ │ │ ├── error.gif # 404 animation
│ │ │ ├── leaf.svg # Icon assets
│ │ │ ├── login.webp # Login page illustration
│ │ │ └── react.svg
│ │ ├── components/
│ │ │ ├── AdvisoryModal.jsx # Bilingual advisory modal
│ │ │ ├── ImageCard.jsx # Image display component
│ │ │ ├── Navbar.jsx # Navigation bar
│ │ │ ├── PrivateRoute.jsx # Auth protection
│ │ │ ├── ProtectedRoute.jsx # Outlet-based protection
│ │ │ └── PublicRoute.jsx # Public access redirect
│ │ ├── context/
│ │ │ └── AuthContext.jsx # Auth state management
│ │ ├── hooks/
│ │ │ └── useAuth.js # Auth hook wrapper
│ │ ├── pages/
│ │ │ ├── Dashboard.jsx # User image dashboard
│ │ │ ├── Error.jsx # 404 error page
│ │ │ ├── Login.jsx # Login form
│ │ │ ├── Register.jsx # Registration with confirm
│ │ │ ├── Signup.jsx # Alternative signup
│ │ │ └── Upload.jsx # Image upload form
│ │ ├── App.jsx # Routing configuration
│ │ ├── index.css # Tailwind imports
│ │ └── main.jsx # Application entry
│ ├── index.html
│ ├── package.json
│ ├── vercel.json # SPA routing config
│ └── vite.config.js # Vite configuration
│
└── Modeling/ # Machine learning components
├── configs/
│ ├── advisory_system.json # Bilingual disease data (168KB)
│ ├── class_indices.json # Class name to index mapping
│ ├── class_indices_final.json
│ ├── class_names.json
│ ├── class_weights.json # Imbalance correction weights
│ ├── preprocessing_config.json
│ └── preprocessing_config.yaml
│
├── Crop Disease Dataset/
│ ├── train/ # 45 folders, 74,880 images
│ ├── valid/ # 45 folders, 19,804 images
│ └── test/ # 45 folders
│
├── models/
│ ├── best_model.keras # Best performing model (34MB)
│ ├── final_model.keras # Final trained model (34MB)
│ ├── final_model.h5 # H5 format model
│ ├── training_history.json # Training metrics
│ └── evaluation_results.json
│
├── notebooks/
│ ├── 01_data_exploration.ipynb
│ ├── 02_data_preprocessing.ipynb
│ ├── 03_model_training.ipynb
│ ├── 04_model_evaluation.ipynb
│ └── 05_inference_demo.ipynb
│
├── reports/
│ ├── analysis_results/
│ │ ├── dataset_summary.json
│ │ ├── class_list.json
│ │ ├── train_class_distribution.csv
│ │ └── val_class_distribution.csv
│ ├── evaluation_results/
│ │ ├── classification_report.csv
│ │ ├── evaluation_report.txt
│ │ ├── evaluation_summary.json
│ │ ├── misclassified_images.png
│ │ ├── per_class_metrics_distribution.png
│ │ └── roc_curves.png
│ ├── training_figures/
│ │ └── training_results.png
│ └── visualizations/
│ ├── class_distribution_all.png
│ ├── class_distribution_extremes.png
│ ├── image_count_distribution.png
│ ├── image_dimensions.png
│ ├── sample_images_train.png
│ └── sample_images_valid.png
│
├── app.py # Streamlit demo application
├── README.md # Modeling documentation
└── requirements.txt # Python dependencies
```
## 👥 贡献者
### Sabin Lamsal - 机器学习模型开发
- 数据集预处理和增强策略
- MobileNetV2架构设计和训练
- 性能评估和优化
- 咨询系统数据结构和内容
- 模型导出和推理流程
### Subodh Dhamala - 前端开发
- React应用架构和状态管理
- 使用TailwindCSS实现UI/UX
- 认证流程和上下文管理
- API集成和错误处理
- 响应式设计和移动端优化
### Bigyam Karmacharya - 后端开发
- Node.js/Express服务器架构
- MongoDB数据库模式设计
- JWT认证实现
- RESTful API端点开发
- 使用Multer处理文件上传
### Pujan Lakhe - 系统设计和测试
- 整体系统架构和集成
- 质量保证和测试
- 部署协调和优化
- 文档和用户指南
## 🗺️ 未来路线图
### 短期(3-6个月)
| 优先级 | 功能 | 状态 |
|----------|---------|--------|
| 🔴 高 | 提高咖啡__无锈病模型准确率 | 计划中 |
| 🔴 高 | 添加移动端响应式改进 | 进行中 |
| 🟡 中 | 实现图像压缩以加快上传速度 | 计划中 |
| 🟡 中 | 添加病害警报的邮件通知 | 计划中 |
### 中期(6-12个月)
| 优先级 | 功能 | 状态 |
|----------|---------|--------|
| 🔴 高 | 移动应用(React Native) | 计划中 |
| 🟡 中 | 带本地模型存储的离线模式 | 研究中 |
| 🟡 中 | 基于天气的病害风险预测 | 研究中 |
| 🟢 低 | 农民讨论社区论坛 | 计划中 |
### 长期(12个月以上)
| 功能 | 描述 |
|---------|-------------|
| 🌾 **扩展作物数据库** | 添加水稻、小麦、棉花等 |
| 🎙️ **语音咨询** | 本地语言的语音指导 |
| 📊 **产量预测** | 根据病害严重程度估算作物产量 |
| 🤝 **农民网络** | 将农民与农业专家联系起来 |
| 📸 **实时视频分析** | 实时摄像头画面病害检测 |
## 📝 许可证
本项目仅用于**教育和研究目的**。代码按原样提供,不提供任何保证。在用于学术工作时,请引用原始数据集来源。
## 🙏 致谢
- **PlantVillage数据集**贡献者提供了高质量的叶片病害图像
- **TensorFlow/Keras**团队提供了深度学习框架和预训练模型
- **MongoDB**提供了可扩展的数据库解决方案
- **Vercel**提供了前端托管和部署
- **农业研究机构**提供了领域专业知识
- **农民**在开发过程中提供了宝贵反馈
## 📞 支持与联系
如有问题、意见或贡献:
- **GitHub问题**:[提交问题](https://github.com/sabin74/Agriculture-Crop-Disease-Detection-Advisory-System/issues)
- **实时演示**:[https://greenbidu.vercel.app/](https://greenbidu.vercel.app/)
- **仓库**:[GitHub仓库](https://github.com/sabin74/Agriculture-Crop-Disease-Detection-Advisory-System)
用AI驱动的作物智能赋能农民* 🌾
标签:Apex, CNN, MITM代理, 人工智能, 作物病害检测, 农业, 农业咨询系统, 农业技术, 农业智能化, 农作物, 农作物保护, 叶片图像分析, 图像识别, 机器学习, 深度学习, 用户模式Hook绕过, 疾病诊断, 病虫害防治, 精准农业, 计算机视觉, 逆向工具, 预防策略