sankalp2606 commited on
Commit
19b6b82
·
verified ·
1 Parent(s): 4c81ef7

Upload 3 files

Browse files
Files changed (3) hide show
  1. app.py +74 -0
  2. crop_disease_model.pth +3 -0
  3. requirements.txt +4 -0
app.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import cv2
3
+ from ultralytics import YOLO
4
+ from flask import Flask, request, jsonify
5
+ from flask_cors import CORS # CORS for frontend access
6
+ from PIL import Image
7
+ import io
8
+
9
+ # Initialize Flask App
10
+ app = Flask("Plant Disease Detection")
11
+ CORS(app) # Allow frontend requests from any origin
12
+
13
+ # Load YOLO Model
14
+ model = YOLO('crop_disease_model.pt')
15
+
16
+ # Disease Remedies Dictionary
17
+ disease_remedies = {
18
+ "bacterial spot": "Remove infected plant debris, use copper-based fungicides.",
19
+ "early blight": "Apply fungicides, practice crop rotation.",
20
+ "healthy": "No action needed.",
21
+ "late blight": "Remove infected plants, use fungicides.",
22
+ "leaf miner": "Use insecticidal sprays, remove affected leaves.",
23
+ "leaf mold": "Improve air circulation, use fungicides.",
24
+ "mosaic virus": "Remove infected plants, control aphids.",
25
+ "septoria": "Remove infected leaves, use fungicides.",
26
+ "spider mites": "Use miticides, introduce beneficial insects.",
27
+ "yellow leaf curl virus": "Remove infected plants, control whiteflies."
28
+ }
29
+
30
+ # Function to process image
31
+ def process_image(image):
32
+ img = cv2.resize(image, (512, 512)) # Resize to match model input
33
+ return img
34
+
35
+ # Function for disease detection
36
+ def plant_disease_detect(img):
37
+ detect_result = model(img)
38
+ detect_img = detect_result[0].plot()
39
+ detections = detect_result[0].boxes.data.tolist()
40
+ classes = [model.names[int(detection[5])] for detection in detections]
41
+ return detect_img, classes
42
+
43
+ # Flask API Endpoint
44
+ @app.route("/predict", methods=["GET", "POST"])
45
+ def predict():
46
+ if request.method == "GET":
47
+ return jsonify({"message": "Use POST request to send an image for prediction."}), 400
48
+
49
+ if "file" not in request.files:
50
+ return jsonify({"error": "No file uploaded"}), 400
51
+
52
+ file = request.files["file"]
53
+ image = Image.open(io.BytesIO(file.read())).convert("RGB")
54
+ image = np.array(image)
55
+ original_size = (image.shape[1], image.shape[0])
56
+
57
+ # Process image & detect disease
58
+ processed_img = process_image(image)
59
+ detect_img, classes = plant_disease_detect(processed_img)
60
+
61
+ # Get unique classes with remedies
62
+ unique_classes = list(set(classes))
63
+ class_table = [{"disease": cls, "remedy": disease_remedies.get(cls.lower(), "No remedy available")} for cls in unique_classes]
64
+
65
+ return jsonify({"detections": class_table})
66
+
67
+ # Home Route
68
+ @app.route("/", methods=["GET"])
69
+ def home():
70
+ return jsonify({"message": "Welcome to the Plant Disease Detection API!"})
71
+
72
+ # Run Flask App
73
+ if __name__ == "__main__":
74
+ app.run(host="0.0.0.0", port=5000, debug=True)
crop_disease_model.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f91ab640f21b218dd2da3c0d39145ad658718c67a912b3e4da46e1b3ade53d63
3
+ size 93867804
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ torch
2
+ ultralytics
3
+ gradio
4
+ opencv-python