File size: 4,498 Bytes
2c5cec5
749cc5e
986b2d7
0b86400
 
 
 
dfbae18
986b2d7
 
dfbae18
0b86400
 
19d3a8a
2b40245
e997fea
a820da6
dfbae18
0b86400
 
02acf5d
730cb6b
 
986b2d7
730cb6b
 
 
 
 
986b2d7
 
 
 
 
 
 
 
 
 
 
dfbae18
986b2d7
dfbae18
 
986b2d7
02acf5d
730cb6b
 
02acf5d
986b2d7
730cb6b
 
 
986b2d7
c0beb83
ac847e4
986b2d7
 
 
0b86400
986b2d7
ac847e4
0b86400
986b2d7
 
0b86400
986b2d7
 
0b86400
c0beb83
986b2d7
0b86400
986b2d7
 
0b86400
986b2d7
 
 
0b86400
986b2d7
0b86400
 
986b2d7
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
import streamlit as st
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing.image import img_to_array
from PIL import Image
import numpy as np
import os
from huggingface_hub import hf_hub_download, login

# Set page configuration
st.set_page_config(page_title="Yellow Rust Severity Prediction", layout="wide", initial_sidebar_state="expanded")

# Authentication using Hugging Face token
authkey = os.getenv('YellowRust')
login(token=authkey)

# Download the model file from Hugging Face
model_path = hf_hub_download(repo_id="shaheer-data/Yellow-Rust-Prediction", filename="final_meta_model.keras")

# Load the pre-trained model
loaded_model = load_model(model_path)

# Function to preprocess the uploaded image
def preprocess_image(image):
    image = image.resize((224, 224))  # Resize to match model input size
    image = img_to_array(image)       # Convert image to numpy array
    image = image / 255.0            # Normalize pixel values to [0, 1]
    image = np.expand_dims(image, axis=0)  # Add batch dimension
    return image

# Sidebar layout with a colorful menu
st.sidebar.markdown('<p style="font-size: 24px; color: #2F4F4F; font-weight: bold;">Yellow Rust Prediction</p>', unsafe_allow_html=True)
st.sidebar.markdown('<p style="color: #555;">Upload an image of the wheat leaf to predict the severity of yellow rust.</p>', unsafe_allow_html=True)

# Sidebar elements
uploaded_file = st.sidebar.file_uploader("Upload Wheat Leaf Image", type=["jpg", "jpeg", "png"])
st.sidebar.markdown("---")

# Main content
st.title("Yellow Rust Severity Prediction")
st.markdown('<p style="text-align: center; color: #2F4F4F; font-size: 30px; font-weight: bold;">Yellow Rust Severity Prediction Dashboard</p>', unsafe_allow_html=True)

# Display the uploaded image
if uploaded_file is not None:
    image = Image.open(uploaded_file)
    st.image(image, caption="Uploaded Wheat Leaf", use_column_width=True)

    # Preprocess the image
    processed_image = preprocess_image(image)

    # Predict severity with a spinner
    with st.spinner("Predicting..."):
        prediction = loaded_model.predict(processed_image)
        predicted_class = np.argmax(prediction, axis=1)[0]  # Get the class index
        
        class_labels = ['Healthy', 'Mild Rust (MR)', 'Moderate Rust (MRMS)', 'Severe Rust (MS)', 'Very Severe Rust (R)', 'Extremely Severe Rust (S)']
        
        st.header("Predicted Severity Class")

        # Conditional statements for displaying the prediction with styled headers and colors
        if predicted_class == 0:
            st.markdown('<p style="color: green; font-size: 22px; font-weight: bold;">Healthy</p>', unsafe_allow_html=True)
            st.write("The leaf appears healthy. There is no immediate action required. Continue monitoring as needed.")
        elif predicted_class == 1:
            st.markdown('<p style="color: orange; font-size: 22px; font-weight: bold;">Mild Rust (MR)</p>', unsafe_allow_html=True)
            st.write("Mild rust detected. Applying fungicides will help control further spread.")
        elif predicted_class == 2:
            st.markdown('<p style="color: #FFA500; font-size: 22px; font-weight: bold;">Moderate Rust (MRMS)</p>', unsafe_allow_html=True)
            st.write("Moderate rust detected. Monitor regularly and treat with fungicides.")
        elif predicted_class == 3:
            st.markdown('<p style="color: #FF4500; font-size: 22px; font-weight: bold;">Severe Rust (MS)</p>', unsafe_allow_html=True)
            st.write("Severe rust detected. Prompt fungicide application and continued monitoring are recommended.")
        elif predicted_class == 4:
            st.markdown('<p style="color: red; font-size: 22px; font-weight: bold;">Very Severe Rust (R)</p>', unsafe_allow_html=True)
            st.write("Very severe rust detected. Intensive control measures and frequent monitoring are required.")
        elif predicted_class == 5:
            st.markdown('<p style="color: darkred; font-size: 22px; font-weight: bold;">Extremely Severe Rust (S)</p>', unsafe_allow_html=True)
            st.write("Extremely severe rust detected. Apply aggressive control strategies and seek expert advice.")
        
        confidence = np.max(prediction) * 100
        st.markdown(f'<p style="color: #17a2b8; font-size: 18px; font-weight: bold;">Confidence Level: {confidence:.2f}%</p>', unsafe_allow_html=True)

# Footer
st.info("MPHIL Final Year Project By Mr. Asim Khattak", icon="πŸ“š")