File size: 6,674 Bytes
e454685
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import streamlit as st
import matplotlib.pyplot as plt
import tensorflow as tf 
from tensorflow.keras.models import load_model

# Load the saved model from Google Drive
@st.cache_resource
def loadu():
    reso = load_model("model.h5")
    return reso
loaded_model = loadu()
class_names = ['Apple___Apple_scab', 'Apple___Black_rot', 'Apple___Cedar_apple_rust', 'Apple___healthy',
               'Blueberry___healthy', 'Cherry_(including_sour)___Powdery_mildew',
               'Cherry_(including_sour)___healthy', 'Corn_(maize)___Cercospora_leaf_spot Gray_leaf_spot',
               'Corn_(maize)___Common_rust_', 'Corn_(maize)___Northern_Leaf_Blight', 'Corn_(maize)___healthy',
               'Grape___Black_rot', 'Grape___Esca_(Black_Measles)', 'Grape___Leaf_blight_(Isariopsis_Leaf_Spot)',
               'Grape___healthy', 'Orange___Haunglongbing_(Citrus_greening)', 'Peach___Bacterial_spot',
               'Peach___healthy', 'Pepper,_bell___Bacterial_spot', 'Pepper,_bell___healthy', 'Potato___Early_blight',
               'Potato___Late_blight', 'Potato___healthy', 'Raspberry___healthy', 'Soybean___healthy',
               'Squash___Powdery_mildew', 'Strawberry___Leaf_scorch', 'Strawberry___healthy',
               'Tomato___Bacterial_spot', 'Tomato___Early_blight', 'Tomato___Late_blight', 'Tomato___Leaf_Mold',
               'Tomato___Septoria_leaf_spot', 'Tomato___Spider_mites Two-spotted_spider_mite', 'Tomato___Target_Spot',
               'Tomato___Tomato_Yellow_Leaf_Curl_Virus', 'Tomato___Tomato_mosaic_virus', 'Tomato___healthy']

crop_medicines = {
    'Apple___Apple_scab': ['Fungicides (e.g., sulfur or copper-based products)', 'Sanitation practices'],
    'Apple___Black_rot': ['Fungicides', 'Proper sanitation practices'],
    'Apple___Cedar_apple_rust': ['Fungicides', 'Removal of infected juniper plants'],
    'Apple___healthy': ['No specific treatment'],

    'Blueberry___healthy': ['Well-drained soil', 'Proper irrigation'],

    'Cherry_(including_sour)___Powdery_mildew': ['Fungicides', 'Pruning for air circulation', 'Proper sanitation'],
    'Cherry_(including_sour)___healthy': ['No specific treatment'],

    'Corn_(maize)___Cercospora_leaf_spot Gray_leaf_spot': ['Fungicides', 'Crop rotation'],
    'Corn_(maize)___Common_rust_': ['Fungicides', 'Resistant varieties'],
    'Corn_(maize)___Northern_Leaf_Blight': ['Fungicides', 'Crop rotation'],
    'Corn_(maize)___healthy': ['No specific treatment'],

    'Grape___Black_rot': ['Fungicides', 'Proper pruning'],
    'Grape___Esca_(Black_Measles)': ['Pruning', 'Cultural practices'],
    'Grape___Leaf_blight_(Isariopsis_Leaf_Spot)': ['Fungicides', 'Proper canopy management'],
    'Grape___healthy': ['No specific treatment'],

    'Orange___Haunglongbing_(Citrus_greening)': ['Vector control', 'Removing infected trees'],

    'Peach___Bacterial_spot': ['Copper-based fungicides', 'Proper sanitation'],
    'Peach___healthy': ['No specific treatment'],

    'Pepper,_bell___Bacterial_spot': ['Copper-based fungicides', 'Resistant varieties'],
    'Pepper,_bell___healthy': ['No specific treatment'],

    'Potato___Early_blight': ['Fungicides', 'Crop rotation', 'Proper field hygiene'],
    'Potato___Late_blight': ['Fungicides', 'Resistant varieties', 'Proper plant spacing'],
    'Potato___healthy': ['No specific treatment'],

    'Raspberry___healthy': ['Well-drained soil', 'Proper pruning'],

    'Soybean___healthy': ['Proper crop rotation'],

    'Squash___Powdery_mildew': ['Fungicides', 'Proper spacing for air circulation'],

    'Strawberry___Leaf_scorch': ['Fungicides', 'Proper irrigation'],
    'Strawberry___healthy': ['No specific treatment'],

    'Tomato___Bacterial_spot': ['Copper-based fungicides', 'Resistant varieties'],
    'Tomato___Early_blight': ['Fungicides', 'Resistant varieties', 'Proper plant spacing'],
    'Tomato___Late_blight': ['Fungicides', 'Resistant varieties', 'Proper plant spacing'],
    'Tomato___Leaf_Mold': ['Fungicides', 'Proper ventilation'],
    'Tomato___Septoria_leaf_spot': ['Fungicides', 'Proper plant spacing'],
    'Tomato___Spider_mites Two-spotted_spider_mite': ['Miticides', 'Biological control'],
    'Tomato___Target_Spot': ['Fungicides', 'Proper plant hygiene'],
    'Tomato___Tomato_Yellow_Leaf_Curl_Virus': ['Vector control', 'Resistant varieties'],
    'Tomato___Tomato_mosaic_virus': ['Resistant varieties', 'Vector control'],
    'Tomato___healthy': ['No specific treatment']
}


IMAGE_SIZE = (224, 224)

def load_and_preprocess_image(image_path):
    try:
        img = tf.io.read_file(image_path)
        img = tf.image.decode_image(img)
        img = tf.image.resize(img, size=IMAGE_SIZE)
        return img
    except Exception as e:
        st.error(f"Error loading or preprocessing image: {e}")
        return None

# def disease_predict(image_path):
#     image = load_and_preprocess_image(image_path)

#     if image is not None:
#         try:
#             pred = loaded_model.predict(tf.expand_dims(image, axis=0))
#             predicted_value = class_names[pred.argmax()]
#             display_prediction(predicted_value, image)
#         except Exception as e:
#             st.error(f"Error predicting disease: {e}")

def disease_predict(image_path):
    image = load_and_preprocess_image(image_path)

    if image is not None:
        try:
            pred = loaded_model.predict(tf.expand_dims(image, axis=0))
            if max(pred[0]) >= 0.90:
               predicted_value = class_names[pred.argmax()]
               display_prediction(predicted_value, image)
            else:
                st.error("Invalid Image")
        except Exception as e:
            st.error(f"Error predicting disease: {e}")

def display_prediction(predicted_value, image):
    st.image(image.numpy() / 255., caption=f"Predicted Disease: {predicted_value}", use_column_width=True)
    st.success(f"Disease: **{predicted_value }**")
    treatment(predicted_value)
    # st.write(f"Image Shape: {image.shape}")

def treatment(predicted_value): 
    medicines = crop_medicines.get(predicted_value, [])
    st.subheader("Solution for this Disease:")
    st.write("Medicines:")
    for medicine in medicines:
        st.write(f"- {medicine}")

def disease_app():
    st.title('Agricultural Disease Detector 🦠')
    uploaded_file = st.file_uploader("Upload an Image for Disease Analysis", type="jpg")
    if uploaded_file is None:
        uploaded_file =  st.camera_input("Capture a photo")
    if uploaded_file is not None:
        img_path = f"uploaded_image.jpg"
        with open(img_path, "wb") as f:
            f.write(uploaded_file.read())
        disease_predict(img_path)

# if __name__ == "__main__":