tamil038/Smart-Crop-Fertilizer-and-Plant-Disease-Prediction-System

GitHub: tamil038/Smart-Crop-Fertilizer-and-Plant-Disease-Prediction-System

一款基于Java Spring Boot和机器学习的智慧农业全栈Web应用,提供农作物推荐、肥料指导与叶片病害检测三大功能。

Stars: 0 | Forks: 0

# 🌾 智能农作物、肥料与病害预测系统 一款基于 AI 的全栈农业智能 Web 应用,采用 **Java Spring Boot** 后端和现代的**单页 HTML/CSS/JS** 前端构建。 ## 🖥️ 在线预览 ## 📌 功能 | 模块 | 描述 | |--------|-------------| | 🌾 **农作物推荐** | 输入土壤 N-P-K、pH 值、降雨量和地区 → 使用 k-NN 机器学习算法获取最佳种植作物 | | 🧪 **肥料指导** | 输入当前 N-P-K 和农作物 → 获取精准的增减肥料建议 | | 🔬 **病害检测** | 上传叶片照片 → 获取病害名称、描述及分步治疗方案 | ## 🗂️ 项目结构 ``` Smart Crop, Fertizer and Disease Prediction System/ └── agri-tools/ ├── frontend/ │ └── index.html ← Single-page app (open in browser) ├── backend/ │ ├── pom.xml ← Maven dependencies │ └── src/main/ │ ├── java/com/agritools/ │ │ ├── AgriToolsApplication.java ← Spring Boot entry point │ │ ├── config/ │ │ │ └── CorsConfig.java ← CORS for frontend-backend connection │ │ ├── controller/ │ │ │ ├── CropController.java │ │ │ ├── FertilizerController.java │ │ │ ├── DiseaseController.java │ │ │ └── GlobalExceptionHandler.java │ │ ├── model/ │ │ │ ├── CropRequest.java / CropResponse.java │ │ │ ├── FertilizerRequest.java / FertilizerResponse.java │ │ │ └── DiseaseResponse.java │ │ └── service/ │ │ ├── CropPredictionService.java ← k-NN classifier (pure Java) │ │ ├── FertilizerRecommendationService.java │ │ └── DiseaseDetectionService.java │ └── resources/ │ ├── application.properties ← Server config (port 9090) │ └── recommended_crops_dataset.csv ← 100-record training dataset └── README.md ``` ## ⚙️ 技术栈 | 层级 | 技术 | |-------|-----------| | Frontend | HTML5, CSS3, Vanilla JavaScript | | Backend | Java 17, Spring Boot 3.3.5 | | ML (农作物) | k-Nearest Neighbours (k=5) — 纯 Java 实现 | | ML (肥料) | 基于 NPK 差值对比的规则匹配 | | ML (病害) | Stub 分类器(已准备好集成 CNN) | | 数据集 | CSV — 100 条记录,5 个农作物类别 | | 构建工具 | Maven 3.8+ | | 服务器 | Apache Tomcat(内嵌,端口 9090) | ## 🚀 快速开始 ### 前置条件 | 工具 | 版本 | |------|---------| | Java | 17 或 21 | | Maven | 3.8+ | | 浏览器 | Chrome / Edge / Firefox | ### 第 1 步 — 启动 Backend ``` cd "Smart Crop, Fertizer and Disease Prediction System/agri-tools/backend" mvn spring-boot:run ``` ✅ 你将会看到: ``` Crop dataset loaded: 100 records Tomcat started on port 9090 Started AgriToolsApplication in ~3 seconds ``` ### 第 2 步 — 打开 Frontend 在文件资源管理器中双击 `agri-tools/frontend/index.html`。 ### 第 3 步 — 验证 Backend 在浏览器中访问以下地址以确认 API 是否已启动: ``` http://localhost:9090/api/fertilizer/crops ``` 预期结果: ``` {"crops":["rice","wheat","maize","cotton","mango","banana","sugarcane"]} ``` ## 🌐 API 参考 ### 🌾 农作物预测 ``` POST http://localhost:9090/api/crop/predict Content-Type: application/json ``` **请求:** ``` { "nitrogen": 83, "phosphorus": 33, "potassium": 36, "ph": 6.21, "rainfall": 68.7, "region": "North" } ``` **响应:** ``` { "recommendedCrop": "cotton", "region": "North", "message": "Prediction based on k-NN (k=5) over 100 records." } ``` ### 🧪 肥料推荐 ``` POST http://localhost:9090/api/fertilizer/recommend Content-Type: application/json ``` **请求:** ``` { "nitrogen": 60, "phosphorus": 50, "potassium": 30, "crop": "rice" } ``` **响应:** ``` { "crop": "Rice", "optimalNpk": { "N": 90, "P": 40, "K": 40 }, "currentNpk": { "N": 60.0, "P": 50.0, "K": 30.0 }, "adjustments": [ "Increase Nitrogen by 30 units (current: 60, target: 90).", "Reduce Phosphorus by 10 units..." ], "status": "needs_adjustment" } ``` ### 🔬 病害检测 ``` POST http://localhost:9090/api/disease/detect Content-Type: multipart/form-data image: (JPG / PNG / WEBP — max 10 MB) ``` **响应:** ``` { "disease": "Bacterial Spot", "description": "A common disease caused by Xanthomonas bacteria...", "treatmentSteps": [ "Use certified pathogen-free seed and disease-free transplants.", "Rotate crops to break the bacterial cycle.", "Apply copper-containing bactericides regularly." ], "severity": "moderate" } ``` ## 🧪 示例测试数据 ### 🌾 农作物推荐 — 10 个示例 | # | 氮 | 磷 | 钾 | pH 值 | 降雨量 | 地区 | 预期农作物 | |---|----------|------------|-----------|----|----------|--------|---------------| | 1 | 83 | 33 | 36 | 6.21 | 68.7 | 北部 | 棉花 | | 2 | 71 | 40 | 36 | 6.81 | 67.5 | 西部 | 棉花 | | 3 | 68 | 31 | 45 | 6.71 | 72.2 | 东部 | 小麦 | | 4 | 92 | 38 | 30 | 6.35 | 180.5 | 东部 | 水稻 | | 5 | 87 | 49 | 43 | 6.19 | 179.1 | 南部 | 水稻 | | 6 | 104 | 81 | 73 | 6.86 | 236.0 | 南部 | 甘蔗 | | 7 | 144 | 70 | 64 | 6.52 | 173.7 | 中部 | 甘蔗 | | 8 | 120 | 52 | 34 | 6.63 | 60.8 | 北部 | 玉米 | | 9 | 86 | 50 | 31 | 6.98 | 75.8 | 南部 | 小麦 | | 10 | 93 | 44 | 33 | 5.91 | 119.0 | 南部 | 水稻 | ### 🧪 肥料指导 — 10 个示例 | # | 氮 | 磷 | 钾 | 农作物 | 预期结果 | |---|----------|------------|-----------|------|-----------------| | 1 | 60 | 50 | 30 | rice | N↑30, P↓10, K↑10 | | 2 | 90 | 40 | 40 | rice | ✅ 最佳 | | 3 | 50 | 20 | 50 | wheat | N↑30, P↑15, K↓10 | | 4 | 80 | 35 | 40 | wheat | ✅ 最佳 | | 5 | 130 | 70 | 35 | maize | N↑10, K↑5 | | 6 | 120 | 60 | 40 | maize | ✅ 最佳 | | 7 | 70 | 60 | 60 | cotton | N↑30, P↑10, K↑10 | | 8 | 100 | 50 | 50 | cotton | ✅ 最佳 | | 9 | 60 | 25 | 100 | mango | N↑15, P↑5, K↑10 | | 10 | 180 | 90 | 180 | banana | N↑20, P↑10, K↑20 | ### 🔬 病害检测 — 10 个示例 在上传前,请将任意叶片图片重命名并包含以下关键词: | # | 使用的文件名 | 检测到的病害 | 严重程度 | |---|----------------|-----------------|----------| | 1 | `healthy_leaf.jpg` | 未检测到病害 | 低 | | 2 | `blight_sample.jpg` | 叶枯病 | 高 | | 3 | `powdery_mildew.png` | 白粉病 | 低 | | 4 | `bacterial_spot.jpg` | 细菌性斑点病 | 中等 | | 5 | `spot_check.jpg` | 细菌性斑点病 | 中等 | | 6 | `mildew_leaf.jpg` | 白粉病 | 低 | | 7 | `blight_early.jpg` | 叶枯病 | 高 | | 8 | `healthy_plant.png` | 未检测到病害 | 低 | | 9 | `bacterial_infection.jpg` | 细菌性斑点病 | 中等 | | 10 | `leaf_blight_stage2.jpg` | 叶枯病 | 高 | ## 🧠 ML 架构 ### 农作物预测 — k-NN (k=5) - 启动时加载 `recommended_crops_dataset.csv`(100 条记录) - 特征:氮、磷、钾、pH 值、降雨量、地区(编码为 0–4) - 在计算欧几里得距离之前,对每个特征应用 min-max 归一化 - 返回距离最近的 5 个邻居中的多数投票标签 ### 肥料推荐 — 基于规则 - 将用户输入的 N-P-K 与每种农作物的硬编码最佳值进行比较 - 输出精确的增减调整建议(增加/减少 X 个单位) - 支持的农作物:rice, wheat, maize, cotton, mango, banana, sugarcane ### 病害检测 — Stub + 知识库 - 知识库中包含 4 种病害:细菌性斑点病、叶枯病、白粉病、健康 - 每种病害均包含描述、严重程度和分步治疗方案 - 当前分类器:基于关键词的 Stub(在生产环境中可替换为 CNN) ## 🔄 相比原 Python 项目的改进 | 原版 | 本版本 | |----------|-------------| | 7 个互不相连的 HTML 页面 | 单一响应式 SPA | | 硬编码的 `file:///D:/...` 路径 | 可在任何机器上运行 | | Python Flask 后端 | Java Spring Boot 3.3.5 | | 通过 `.pkl` 文件实现的 RandomForest | 纯 Java 实现的 k-NN(无需 pickle) | | 静态硬编码的结果页面 | 动态 JSON 驱动的结果 | | 无验证或错误处理 | 完整的验证 + 友好的错误消息 | | 未配置 CORS | 已为所有源配置 CorsFilter | | 每个页面单独的 CSS 文件 | 统一的设计系统 | ## 📄 许可证 MIT License — 免费使用、修改和分发。 ## 👤 作者 **Tamilarasan Palanisamy** 全栈开发工程师 — Java Spring Boot + HTML/CSS/JS
标签:Apex, JS文件枚举, Spring Boot, 农作物推荐, 后端开发, 图像疾病检测, 数据可视化, 智慧农业, 机器学习