# Usage Guide - Plant Disease Detection UI This guide explains how to use the Plant Disease Detection application. ## For Developers ### Running Locally **Quick Start:** ```bash ./quickstart.sh ``` **Manual Start:** ```bash # Activate virtual environment source venv/bin/activate # On Windows: venv\Scripts\activate # Run the app cd ui python app.py ``` The app will be available at `http://localhost:7860` ### Development with Mock Model During development, the app uses a mock model by default. This allows you to: - Test the UI without waiting for model training - Develop features in parallel with the ML team - Verify the interface works correctly To use the mock model: ```python # In ui/app.py demo = create_interface(use_mock=True) # Default ``` ### Switching to Real Model Once your team has trained a model: 1. **Save your model:** ```python # In your training script torch.save(model.state_dict(), 'best_model.pth') ``` 2. **Copy to models directory:** ```bash cp path/to/best_model.pth models/ ``` 3. **Update model_loader.py with your architecture:** ```python # Replace MockPlantDiseaseModel with your actual model from your_training_code import YourCNNModel def _load_real_model(self, model_name, model_path=None): model = YourCNNModel(num_classes=39) # ... rest of the code ``` 4. **Change app.py to use real model:** ```python demo = create_interface(use_mock=False) ``` ### Testing **Test individual components:** ```bash # Test mock model python models/mock_model.py # Test model loader python ui/model_loader.py # Test utilities python ui/utils.py ``` **Test with different images:** 1. Download example images: ```bash python download_examples.py --num 20 ``` 2. Run the app and test each feature: - Single image prediction - Batch processing - Model switching - Confidence threshold - Flagging predictions ## For End Users ### Single Image Classification 1. Open the app in your browser 2. Go to the **"Single Image"** tab 3. Upload an image: - Click the image upload area - Select a plant leaf photo from your computer - Supported formats: JPG, PNG 4. (Optional) Select a different model from the dropdown 5. (Optional) Adjust the confidence threshold 6. Click **"Predict Disease"** 7. View the results: - Top predictions shown as a chart - Detailed information about the top prediction - Raw JSON data available in the accordion ### Using Example Images 1. Go to the **"Example Images"** tab 2. Click on any example image 3. The image will be loaded into the predictor 4. Go back to the "Single Image" tab 5. Click "Predict Disease" ### Batch Processing To classify multiple images at once: 1. Go to the **"Batch Processing"** tab 2. Click "Upload Multiple Images" 3. Select multiple image files (use Ctrl/Cmd + Click) 4. Click "Predict All" 5. View results for all images ### Flagging Incorrect Predictions If you notice a wrong prediction: 1. After getting a prediction, expand **"Flag Incorrect Prediction"** 2. Enter feedback (e.g., "This is actually Apple Scab, not Black Rot") 3. Click **"Submit Flag"** 4. Your feedback is recorded for the developers ### Adjusting Confidence Threshold The confidence threshold filters out low-confidence predictions: 1. Use the slider at the top: **"Confidence Threshold (%)"** 2. Move it right to see only high-confidence predictions 3. Move it left to see more predictions (including uncertain ones) **Example:** - Set to 50%: Only shows predictions the model is at least 50% confident about - Set to 1%: Shows almost all predictions ### Understanding Results **Prediction Display:** ``` Tomato - Late blight: 85.2% Tomato - Early blight: 8.3% Tomato - Leaf Mold: 3.1% ... ``` **Detailed Info:** - **Top Prediction:** The most likely disease - **Confidence:** How certain the model is (0-100%) - **Plant:** The type of plant detected - **Status:** Whether the plant is healthy or diseased ### Tips for Best Results 1. **Image Quality:** - Use clear, well-lit photos - Focus on the leaf - Avoid blurry images 2. **Image Content:** - Show the diseased area clearly - Include the whole leaf if possible - One leaf per image works best 3. **File Size:** - The app automatically resizes images - But uploading smaller images (<5MB) is faster 4. **Interpreting Confidence:** - >80%: High confidence - likely correct - 50-80%: Moderate confidence - possible - <50%: Low confidence - uncertain ## Advanced Features ### Switching Between Models If your team trained multiple models: 1. Use the **"Select Model"** dropdown at the top 2. Options might include: - CNN from Scratch - Transfer Learning (ResNet18) 3. Each model may perform differently 4. Try both and compare results ### Viewing Raw Predictions For technical analysis: 1. After prediction, expand **"Advanced: View Raw Predictions"** 2. See the raw probability scores in JSON format 3. Useful for debugging or detailed analysis ### Batch Results Analysis When processing multiple images: 1. Results show the top prediction for each image 2. Format: `Image 1: Disease Name (confidence%)` 3. Scroll through all results 4. Use this for analyzing a collection of plants ## Integration with Training Pipeline ### For ML Team Members **Updating the Model:** After training a new model: ```python # Option 1: Upload to ClearML (recommended) from clearml import Task task = Task.current_task() # Model is automatically uploaded # Then in UI: loader.load_from_clearml(task_id="your_task_id") ``` ```python # Option 2: Save locally torch.save(model.state_dict(), 'models/best_model.pth') # Then in UI: loader.load_model(model_path='models/best_model.pth') ``` ```python # Option 3: Upload to HuggingFace Hub from huggingface_hub import HfApi api = HfApi() api.upload_file( path_or_fileobj="best_model.pth", path_in_repo="model.pth", repo_id="username/model-name" ) # Then in UI: loader.load_from_huggingface("username/model-name") ``` ### Experiment Tracking The UI can load any model from your ClearML experiments: ```python # Get task ID from ClearML dashboard # Then update model_loader.py or pass as parameter ``` ## Troubleshooting ### Common Issues **"Please upload an image"** - Solution: Make sure you've selected an image before clicking Predict **"No predictions above confidence threshold"** - Solution: Lower the confidence threshold slider - Or the image might not be a plant leaf **"Error during prediction"** - Check the error message in the output - Verify the image is valid (not corrupted) - Try a different image **Slow predictions** - First prediction may be slow (model loading) - Subsequent predictions should be faster - Batch processing might take longer for many images **Example gallery is empty** - Run `python download_examples.py` to download examples - Or manually add images to `ui/examples/` ### Getting Help 1. Check the error message displayed in the UI 2. Look at the terminal/console for detailed errors 3. Refer to README.md for setup issues 4. Check docs/deployment_guide.md for deployment issues 5. Contact your team members or course TAs ## Recording a Demo Video For your project submission: ### What to Include 1. **Introduction** (10 sec) - "This is our Plant Disease Detection system..." 2. **Single Image Demo** (30-60 sec) - Upload an image - Show prediction results - Explain the output 3. **Advanced Features** (30-60 sec) - Show model selection - Demonstrate batch processing - Show flagging feature 4. **Example Gallery** (15-30 sec) - Browse example images - Select and predict 5. **Conclusion** (10-15 sec) - Summarize capabilities - Mention accuracy/performance ### Recording Tips - Use screen recording software (QuickTime, OBS, etc.) - Enable audio narration - Show your face (optional but personal) - Keep it concise (2-3 minutes for basic, 5-6 for feature-rich) - Test audio quality before final recording - Practice once before recording ### Video Quality - Resolution: At least 1080p - Format: MP4 (most compatible) - Audio: Clear voice, no background noise - Editing: Simple cuts are fine, no need for fancy effects ## API Documentation For programmatic use (advanced): ```python from model_loader import get_model from utils import preprocess_image, postprocess_predictions # Load model model, loader = get_model(use_mock=False) # Prepare image from PIL import Image image = Image.open("path/to/leaf.jpg") tensor = preprocess_image(image) # Predict import torch with torch.no_grad(): logits = model(tensor.to(loader.device)) # Get results top_preds, all_preds = postprocess_predictions(logits) print(top_preds) ``` ## FAQ **Q: Can I use this with my own plant images?** A: Yes! Upload any plant leaf image. Works best with the plants/diseases in the training set. **Q: How accurate is the model?** A: Check the README or About tab for test accuracy. Typically 85-95% on validation set. **Q: Can I add more disease categories?** A: You'd need to retrain the model with additional data for new categories. **Q: Is my data saved?** A: Images uploaded during use are not saved unless you flag a prediction. Flagged data stays in memory only. **Q: Can I run this offline?** A: Yes, once installed, the app runs locally and doesn't need internet (except for downloading model from HF/ClearML). **Q: How do I cite this in a report?** A: Reference your team's GitHub repo and the deployed app URL. ## Next Steps - **Test thoroughly:** Try various images, edge cases - **Integrate real model:** Replace mock model with trained model - **Deploy:** Follow deployment guide to put on HF Spaces - **Record demo:** Create your submission video - **Write report:** Document the UI features in your report --- **Happy classifying! 🌱**