crop / README.md
vivek12coder's picture
Fix YAML metadata: shorten description to meet 60-char limit
12fef5c
metadata
title: Crop Disease Detection API
emoji: ๐ŸŒฑ
colorFrom: green
colorTo: blue
sdk: docker
app_port: 7860
pinned: false
license: mit
tags:
  - computer-vision
  - agriculture
  - disease-detection
  - fastapi
  - pytorch
  - resnet50
  - grad-cam
  - crop-monitoring
short_description: AI-powered crop disease detection for plants

๐ŸŒฑ Crop Disease Detection API

Python PyTorch FastAPI Hugging Face Spaces License

A RESTful API for AI-powered crop disease detection using deep learning to identify diseases in pepper, potato, and tomato crops from leaf images. The API provides accurate disease classification, risk assessment, Grad-CAM visualizations, and treatment recommendations.

๐Ÿš€ Production Ready: FastAPI-based REST API optimized for Hugging Face Spaces deployment with Docker. All features preserved from the original Streamlit implementation.

๐ŸŽฏ API Overview

This FastAPI service provides a comprehensive crop disease detection pipeline that:

  • Detects 15 different diseases across pepper, potato, and tomato crops
  • Provides visual explanations using Grad-CAM heatmaps
  • Offers treatment recommendations from an integrated knowledge base
  • Calculates risk levels based on confidence and environmental factors
  • RESTful endpoints for health checks, predictions, visualizations, and status tracking
  • ๐Ÿš€ Deployment Ready: Optimized for Hugging Face Spaces with Docker support

๐Ÿ† Key Features

  • ๐Ÿค– AI Model: ResNet50-based transfer learning with 26.1M parameters (V3)
  • ๐Ÿ“Š Disease Classes: 15 classes including healthy variants for each crop
  • ๐ŸŽจ Visual Explanations: Grad-CAM heatmaps highlighting infected regions
  • ๐Ÿ“š Knowledge Base: Comprehensive disease information with symptoms and treatments
  • โšก Real-time Processing: Fast inference with GPU/CPU support and progress tracking
  • ๐ŸŒ REST API: FastAPI with automatic OpenAPI documentation
  • ๐Ÿ–ฅ๏ธ CLI Tool: Command-line interface for batch processing (preserved)
  • ๐Ÿ““ Training Pipeline: Complete model training and evaluation system (preserved)

๐Ÿ“ Project Structure

diseases_aicrop/
โ”œโ”€โ”€ ๏ฟฝ app.py                   # FastAPI application (main API server)
โ”œโ”€โ”€ ๐Ÿ“„ requirements.txt         # Python dependencies (FastAPI + ML)
โ”œโ”€โ”€ ๐Ÿ“„ Dockerfile               # Docker container configuration
โ”œโ”€โ”€ ๐Ÿ“„ DEPLOYMENT_GUIDE.md      # Detailed deployment instructions
โ”œโ”€โ”€ ๐Ÿ“„ README.md                # This file
โ”œโ”€โ”€ ๐Ÿ“‚ src/                     # Core modules
โ”‚   โ”œโ”€โ”€ model.py               # ResNet50 model definition
โ”‚   โ”œโ”€โ”€ explain.py             # Grad-CAM explainer
โ”‚   โ”œโ”€โ”€ risk_level.py          # Risk assessment calculator
โ”‚   โ”œโ”€โ”€ predict_cli.py         # CLI tool (preserved)
โ”‚   โ”œโ”€โ”€ train.py               # Model training (preserved)
โ”‚   โ””โ”€โ”€ evaluate.py            # Model evaluation (preserved)
โ”œโ”€โ”€ ๐Ÿ“‚ models/                  # Trained model weights
โ”‚   โ”œโ”€โ”€ crop_disease_v3_model.pth      # Latest V3 model (preferred)
โ”‚   โ””โ”€โ”€ crop_disease_v2_model.pth      # V2 model (fallback)
โ”œโ”€โ”€ ๐Ÿ“‚ knowledge_base/          # Disease information database
โ”‚   โ””โ”€โ”€ disease_info.json      # Symptoms, treatments, prevention
โ”œโ”€โ”€ ๐Ÿ“‚ notebooks/               # Training and analysis (preserved)
โ”‚   โ””โ”€โ”€ train_resnet50.ipynb   # Model training notebook
โ”œโ”€โ”€ ๐Ÿ“‚ data/                    # Dataset (preserved for retraining)
โ”‚   โ””โ”€โ”€ raw/                   # Original dataset
โ””โ”€โ”€ ๐Ÿ“‚ outputs/                 # Evaluation results (preserved)
โ”œโ”€โ”€ ๐Ÿ“‚ notebooks/               # Jupyter notebooks
โ”‚   โ””โ”€โ”€ train_resnet50.ipynb   # Training notebook
โ”œโ”€โ”€ ๐Ÿ“‚ outputs/                 # Results and visualizations
โ”‚   โ”œโ”€โ”€ heatmaps/              # Grad-CAM visualizations
โ”‚   โ””โ”€โ”€ *.json                 # Evaluation results
โ”œโ”€โ”€ ๐Ÿ“‚ src/                     # Core source code
โ”‚   โ”œโ”€โ”€ dataset.py             # Data loading and preprocessing
โ”‚   โ”œโ”€โ”€ model.py               # ResNet50 architecture
โ”‚   โ”œโ”€โ”€ train.py               # Training pipeline
โ”‚   โ”œโ”€โ”€ evaluate.py            # Model evaluation
โ”‚   โ”œโ”€โ”€ explain.py             # Grad-CAM explanations
โ”‚   โ”œโ”€โ”€ risk_level.py          # Risk assessment logic
โ”‚   โ””โ”€โ”€ predict_cli.py         # CLI predictor
โ”œโ”€โ”€ ๐Ÿ“‚ tests/                   # Unit tests
โ”œโ”€โ”€ crop_disease_gui.py         # Tkinter GUI application
โ”œโ”€โ”€ requirements.txt            # Main dependencies
โ””โ”€โ”€ TRAINING_REPORT.md          # Performance analysis

๐Ÿ› ๏ธ Technology Stack

Core Technologies

  • Deep Learning: PyTorch 2.1.0, torchvision 0.16.0
  • Model Architecture: ResNet50 with transfer learning
  • Web Framework: Streamlit 1.28.0+
  • Computer Vision: OpenCV, PIL/Pillow
  • Visualization: Grad-CAM, matplotlib

Dependencies

  • Core ML: PyTorch, torchvision, numpy
  • Image Processing: OpenCV-Python, Pillow
  • Web Interface: Streamlit
  • Visualization: matplotlib, grad-cam
  • Utilities: requests, tqdm, pydantic

Development Tools

  • Environment: Python 3.9+ (Docker: python:3.9-slim)
  • Notebooks: Jupyter/Google Colab support
  • Deployment: Docker + Hugging Face Spaces
  • Version Control: Git
  • Local Development: Optimized for Windows PowerShell

๐Ÿš€ Installation & Setup

Prerequisites

  • Python 3.8 or higher
  • pip package manager
  • (Optional) CUDA-compatible GPU for faster training

1. Clone Repository

git clone https://github.com/vivek12coder/AiCropDiseasesDetection.git
cd AiCropDiseasesDetection

2. Create Virtual Environment

# Windows PowerShell (recommended)
python -m venv .venv
.\.venv\Scripts\Activate.ps1

# Alternative for Command Prompt
python -m venv .venv
.venv\Scripts\activate.bat

# macOS/Linux
python -m venv .venv
source .venv/bin/activate

3. Install Dependencies

# Install main dependencies
pip install -r requirements.txt

# For API development (optional)
pip install -r api/requirements.txt

4. Pre-trained Model

The repository includes the latest pre-trained model:

  • models/crop_disease_v3_model.pth - Latest V3 model (recommended)

Note: Older model versions have been removed to keep the project clean. Only the latest, best-performing model is included.

5. Verify Installation

python -c "import torch; print(f'PyTorch: {torch.__version__}')"
python -c "import torchvision; print(f'TorchVision: {torchvision.__version__}')"

๐Ÿ“– API Usage Guide

๐Ÿš€ Quick Start

Start the FastAPI server locally:

# Run the FastAPI application
python app.py

The API will be available at:

๐ŸŒ API Endpoints

1. Health Check

Check API and model status:

curl -X GET "http://localhost:7860/health"

Response:

{
  "status": "healthy",
  "model_loaded": true,
  "model_version": "crop_disease_v3_model.pth",
  "available_endpoints": ["/health", "/predict", "/gradcam/{task_id}", "/status/{task_id}"],
  "timestamp": "2024-01-01T12:00:00",
  "device": "cuda:0"
}

2. Disease Prediction

Upload an image for disease detection:

curl -X POST "http://localhost:7860/predict" \
  -H "Content-Type: multipart/form-data" \
  -F "file=@test_leaf_sample.jpg" \
  -F "include_gradcam=true"

Response:

{
  "success": true,
  "predicted_class": "Tomato_Late_blight",
  "crop": "Tomato",
  "disease": "Late_blight",
  "confidence": 0.95,
  "all_probabilities": {
    "Tomato_Late_blight": 0.95,
    "Tomato_Early_blight": 0.03,
    "Tomato_healthy": 0.02
  },
  "risk_level": "High",
  "processing_time": 2.3,
  "task_id": "550e8400-e29b-41d4-a716-446655440000"
}

3. Grad-CAM Visualization

Get the heatmap for a prediction:

curl -X GET "http://localhost:7860/gradcam/550e8400-e29b-41d4-a716-446655440000"

Response:

{
  "success": true,
  "heatmap_base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
  "explanation": "Grad-CAM heatmap showing areas the AI model focused on for prediction",
  "task_id": "550e8400-e29b-41d4-a716-446655440000",
  "processing_time": 1.2
}

4. Processing Status

Track processing progress:

curl -X GET "http://localhost:7860/status/550e8400-e29b-41d4-a716-446655440000"

Response:

{
  "task_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "completed",
  "progress": 100,
  "message": "Analysis completed successfully",
  "timestamp": "2024-01-01T12:00:30"
}

5. Disease Information

Get detailed disease information:

curl -X GET "http://localhost:7860/disease-info?crop=Tomato&disease=Late_blight"

๏ฟฝ Python Client Example

import requests
import json
from PIL import Image
import base64
import io

# API base URL
API_BASE = "http://localhost:7860"

# 1. Health check
response = requests.get(f"{API_BASE}/health")
print("Health Check:", response.json())

# 2. Predict disease
with open("test_leaf_sample.jpg", "rb") as f:
    files = {"file": f}
    data = {
        "weather_data": json.dumps({
            "humidity": 70.0,
            "temperature": 22.0,
            "rainfall": 5.0
        }),
        "include_gradcam": True
    }
    response = requests.post(f"{API_BASE}/predict", files=files, data=data)
    prediction = response.json()
    
print("Prediction:", prediction)
task_id = prediction["task_id"]

# 3. Get Grad-CAM visualization
import time
time.sleep(2)  # Wait for background processing
response = requests.get(f"{API_BASE}/gradcam/{task_id}")
if response.status_code == 200:
    gradcam = response.json()
    # Decode and display heatmap
    heatmap_data = base64.b64decode(gradcam["heatmap_base64"].split(",")[1])
    heatmap_image = Image.open(io.BytesIO(heatmap_data))
    heatmap_image.show()

# 4. Get disease information
crop = prediction["crop"]
disease = prediction["disease"]
response = requests.get(f"{API_BASE}/disease-info", params={"crop": crop, "disease": disease})
disease_info = response.json()
print("Disease Info:", disease_info)

๐Ÿ–ฅ๏ธ CLI Tool (Preserved)

For batch processing or scripting:

# Single image prediction
python -m src.predict_cli -i test_leaf_sample.jpg -m models\crop_disease_v3_model.pth

# With custom settings
python -m src.predict_cli -i your_image.jpg --output-dir results/

๐Ÿ“Š Model Training & Evaluation (Preserved)

Original training and evaluation capabilities remain intact:

# Evaluate existing model
python -m src.evaluate

# Train new model
python -m src.train

# Generate visual explanations
python -m src.explain

๏ฟฝ Jupyter Notebooks (Preserved)

Explore the training process interactively:

jupyter notebook notebooks/train_resnet50.ipynb
  1. View Results: See detailed analysis in results panel

๐ŸŽฏ Model Performance

Current Performance (V3 Model)

  • Model Architecture: ResNet50 with custom classifier layers
  • Parameters: 26.1M total parameters
  • Input Size: 224x224 RGB images
  • Classes: 15 disease classes across 3 crops
  • Inference Speed: ~0.1 seconds per image on CPU

Supported Disease Classes

Pepper Diseases:

  • Bell Pepper Bacterial Spot
  • Bell Pepper Healthy

Potato Diseases:

  • Early Blight
  • Late Blight
  • Healthy

Tomato Diseases:

  • Target Spot
  • Tomato Mosaic Virus
  • Tomato Yellow Leaf Curl Virus
  • Bacterial Spot
  • Early Blight
  • Late Blight
  • Leaf Mold
  • Septoria Leaf Spot
  • Spider Mites (Two-spotted)
  • Healthy

Note: The model has been trained on limited data. For production use, consider collecting more training samples per class.

๐Ÿ”ง Configuration

Environment Variables

# Optional: Set device preference
$env:TORCH_DEVICE="cuda"  # or 'cpu'

# Optional: Set model path
$env:MODEL_PATH="models/crop_disease_v3_model.pth"

API Configuration

Edit api/main.py for production settings:

  • CORS origins
  • Authentication
  • Rate limiting
  • Logging levels

๐Ÿš€ Deployment

๐Ÿค— Hugging Face Spaces (Recommended)

The project is ready for one-click deployment on Hugging Face Spaces:

  1. Fork/Clone this repository
  2. Create a new Space on Hugging Face Spaces
  3. Select "Docker" SDK when creating the Space
  4. Upload the project files or connect your Git repository
  5. Wait for build (5-10 minutes) and your app will be live!

๐Ÿ“– Detailed Instructions: See DEPLOY_INSTRUCTIONS.md

๐Ÿ–ฅ๏ธ Local Streamlit App

# Install dependencies
pip install -r requirements.txt

# Run Streamlit app
streamlit run app.py

# Open browser to: http://localhost:8501

๐Ÿณ Docker Deployment

# Build image
docker build -t crop-disease-ai .

# Run container
docker run -p 7860:7860 crop-disease-ai

# Open browser to: http://localhost:7860

Local Development

# GUI Application
python crop_disease_gui.py

# API Server
python -m api.main

# CLI Prediction
python -m src.predict_cli -i test_leaf_sample.jpg

Local (Non-Docker) Quick Start

Use these steps on Windows PowerShell to run locally without Docker:

python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
# Optional: API extras
pip install -r api/requirements.txt

# Evaluate model
python -m src.evaluate

# Run API
python -m api.main

# Single-image CLI prediction
python -m src.predict_cli -i test_leaf_sample.jpg -m models\crop_disease_v3_model.pth

Cloud Deployment

The API is ready for deployment on:

  • AWS: EC2, Lambda, ECS
  • Google Cloud: Cloud Run, Compute Engine
  • Azure: Container Instances, App Service
  • Heroku: Container deployment

๐Ÿค Contributing

Development Setup

  1. Fork the repository
  2. Create feature branch: git checkout -b feature/new-feature
  3. Make changes and test thoroughly
  4. Submit pull request with detailed description

Contribution Guidelines

  • Follow PEP 8 style guidelines
  • Add unit tests for new features
  • Update documentation for API changes
  • Ensure backward compatibility

Areas for Contribution

  • Data Collection: Expand disease image dataset
  • Model Improvements: Experiment with new architectures
  • Feature Enhancement: Add new crops/diseases
  • Performance Optimization: Speed and accuracy improvements
  • Documentation: Tutorials and examples

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ‘ฅ Authors & Acknowledgments

Project Team:

  • Lead Developer: [Your Name]
  • AI/ML Engineer: [Team Member]
  • Data Scientist: [Team Member]

Acknowledgments:

  • PlantVillage dataset for training data
  • PyTorch team for deep learning framework
  • FastAPI team for web framework
  • Open source community for various tools

๐Ÿ“ž Support & Contact

Getting Help

  • Documentation: Check this README and code comments
  • Issues: Create GitHub issue for bugs/feature requests
  • Discussions: Use GitHub discussions for questions

Contact Information

๐Ÿ”ฎ Future Roadmap

Phase 1: Data Enhancement (Weeks 1-2)

  • Collect 1000+ images per disease class
  • Implement advanced data augmentation
  • Create balanced train/val/test splits

Phase 2: Model Optimization (Weeks 3-4)

  • Experiment with EfficientNet, MobileNet
  • Implement ensemble methods
  • Add uncertainty estimation

Phase 3: Feature Expansion (Weeks 5-6)

  • Add more crop types (rice, wheat, etc.)
  • Implement real-time video processing
  • Mobile app development

Phase 4: Production Enhancement (Weeks 7-8)

  • Cloud deployment with auto-scaling
  • Monitoring and logging system
  • User analytics and feedback system

๐Ÿ“Š Quick Start Checklist

  • Install Python 3.8+
  • Clone repository
  • Install dependencies: pip install -r requirements.txt
  • Test GUI: python crop_disease_gui.py
  • Test API: python -m api.main
  • Test CLI: python -m src.predict_cli -i test_leaf_sample.jpg
  • Upload test image and verify results
  • Explore API documentation at http://127.0.0.1:8000/docs

๐ŸŽ‰ Ready to detect crop diseases with AI!