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, 农作物推荐, 后端开发, 图像疾病检测, 数据可视化, 智慧农业, 机器学习