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绕过, 疾病诊断, 病虫害防治, 精准农业, 计算机视觉, 逆向工具, 预防策略