Akash-AIML/Agriculture-AI
GitHub: Akash-AIML/Agriculture-AI
一套整合多机器学习模型与 LLM 建议的端到端智慧农业平台,帮助农户实现植物病害检测、土壤分类与作物推荐的数据驱动决策。
Stars: 0 | Forks: 0
# Agriculture-AI
多模型农业 AI:疾病检测、土壤分析、作物推荐以及基于 LLM 的建议 —— 全面支持多种语言(英语、泰米尔语、印地语、泰卢固语)。
## 项目结构
```
agri-ai/
├── backend/
│ ├── main.py # FastAPI app (all routes)
│ ├── requirements.txt
│ ├── .env.example # Copy to .env and configure
│ ├── models/
│ │ ├── disease_model.py # Disease CNN wrapper
│ │ ├── soil_model.py # Soil CNN wrapper
│ │ └── crop_model.py # CatBoost crop wrapper
│ ├── services/
│ │ ├── orchestrator.py # Merges model outputs + confidence thresholds
│ │ ├── rag_service.py # FAISS RAG over your .txt knowledge base
│ │ └── llm_service.py # Anthropic Claude streaming advice
│ ├── middleware/
│ │ └── auth.py # JWT auth (disable by leaving JWT_SECRET_KEY empty)
│ ├── utils/
│ │ ├── preprocessing.py # Image validation + transforms
│ │ └── cache.py # Redis cache with in-memory fallback
│ └── rag_docs/ # Drop .txt files here for RAG knowledge base
└── frontend/
├── index.html
├── vite.config.js
├── package.json
└── src/
├── App.jsx # Root: header, tabs, language state
├── index.css # Full dark-earthy theme
├── i18n/
│ └── translations.js # EN / Tamil / Hindi / Telugu strings
└── components/
├── DiseaseTab.jsx
├── SoilTab.jsx
├── CropTab.jsx
├── AdviceTab.jsx # Streaming LLM response
├── ImageUpload.jsx
└── ConfidenceBar.jsx
```
## 设置
### 1. 复制你的训练模型
```
# 路径在 backend/.env 中配置
# 默认期望您的模型相对于 backend/ 目录
ls ../dataset/agri_ai_dataset/models/
# crop_model.pkl disease_model_fp16.pth label_enoder_crop.pkl soil_model.pth
```
### 2. 后端
```
cd backend
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 安装依赖
pip install -r requirements.txt
# 配置环境
cp .env.example .env
# 编辑 .env:
# - 设置模型路径(已与您现有的路径匹配)
# - 添加您的 ANTHROPIC_API_KEY
# - 可选设置 REDIS_URL, JWT_SECRET_KEY
# 启动服务器
uvicorn main:app --reload --host 0.0.0.0 --port 8000
# API 文档位于:
# http://localhost:8000/docs
```
### 3. 添加 RAG 知识(可选但推荐)
```
mkdir -p backend/rag_docs
# 添加任何包含农业知识的 .txt 文件:
# - 作物疾病治疗指南
# - 土壤管理实践
# - 区域作物日历
# RAG 服务会在首次查询时自动对它们进行索引。
# 示例:
echo "Late blight in tomatoes is caused by Phytophthora infestans.
Apply metalaxyl + mancozeb fungicide at first sign of infection.
Destroy infected plant material immediately." > backend/rag_docs/tomato_diseases.txt
```
### 4. 前端
```
cd frontend
npm install
npm run dev
# 在 http://localhost:5173 打开
# API 调用通过 vite.config.js 代理到 http://localhost:8000
```
## 模型配置
编辑 `backend/.env` 以匹配你的具体配置:
| 变量 | 默认值 | 描述 |
|----------------------|---------------------------------------------------|------------------------------------|
| `DISEASE_MODEL_PATH` | `../dataset/agri_ai_dataset/models/disease_model_fp16.pth` | 你的疾病 CNN |
| `SOIL_MODEL_PATH` | `../dataset/agri_ai_dataset/models/soil_model.pth` | 你的土壤 CNN |
| `CROP_MODEL_PATH` | `../dataset/agri_ai_dataset/models/crop_model.pkl` | 你的 CatBoost |
| `LABEL_ENCODER_PATH` | `../dataset/agri_ai_dataset/models/label_enoder_crop.pkl` | Label encoder |
| `DISEASE_NUM_CLASSES`| `38` | CNN 输出类别 |
| `SOIL_NUM_CLASSES` | `4` | CNN 输出类别 |
**如果你的模型架构与 ResNet-50 (疾病) / ResNet-18 (土壤) 不同**,请编辑相应模型文件中的 `_build_resnet50` / `_build_resnet18` 函数,使其与你的架构完全匹配。
## API 端点
| 方法 | 端点 | 描述 |
|--------|---------------------------|-------------------------------------------|
| GET | `/api/v1/health` | 检查所有模型及服务状态 |
| POST | `/api/v1/analyze/disease` | 上传植物叶片图像 → 疾病结果 |
| POST | `/api/v1/analyze/soil` | 上传土壤图像 → 土壤分类 |
| POST | `/api/v1/analyze/full` | 同时上传两张图像 |
| POST | `/api/v1/recommend/crop` | 发送 N/P/K + 气候 → 作物推荐|
| POST | `/api/v1/advice` | 从所有结果中获取流式 LLM 建议 |
| POST | `/api/v1/auth/token` | 获取 JWT token (用户名/密码) |
## 自定义
### 添加作物疾病标签
编辑 `backend/models/disease_model.py` 中的 `DISEASE_CLASSES` 列表和 `TREATMENTS` 字典。
### 添加土壤类型
编辑 `backend/models/soil_model.py` 中的 `SOIL_CLASSES` 和 `SOIL_PROPERTIES`。
### 添加语言
1. 在 `frontend/src/i18n/translations.js` 的 `LANGUAGES` 数组中添加条目
2. 在你新增的语言代码下添加完整的翻译对象
3. 在 `backend/main.py` 的 `lang` 校验正则表达式中添加该语言 (`pattern="^(en|ta|hi|te|xx)$"`)
### 更改 LLM 行为
编辑 `backend/services/llm_service.py` 中的 `SYSTEM_PROMPT`。
### 调整置信度阈值
编辑 `backend/services/orchestrator.py` 中的 `DISEASE_THRESHOLD`、`SOIL_THRESHOLD` 和 `CROP_MIN_PROB`。
## 生产环境部署
```
# 后端 — 使用 gunicorn + uvicorn workers
pip install gunicorn
gunicorn main:app -w 2 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000
# 前端 — 构建静态文件
cd frontend && npm run build
# 使用 nginx 或任何静态主机服务 dist/
# Redis — 在生产环境中强烈推荐
docker run -d -p 6379:6379 redis:alpine
# 在 .env 中设置 REDIS_URL=redis://localhost:6379
# 设置真实的 JWT_SECRET_KEY
export JWT_SECRET_KEY=$(openssl rand -hex 32)
```
标签:Apex, AV绕过, DLL 劫持, FastAPI, RAG, 作物推荐, 凭据扫描, 土壤分析, 大语言模型, 搜索引擎查询, 智慧农业, 机器学习, 疾病检测, 自定义脚本, 逆向工具