shaheer-data's picture
Update app.py
2b40245 verified
raw
history blame
2.42 kB
import streamlit as st
import tensorflow as tf
from PIL import Image
import os
from huggingface_hub import hf_hub_url, HfApi # Import Hugging Face utilities
# Title of the Streamlit app
st.title("Yellow Rust Severity Prediction")
# Function to get Hugging Face API token securely
def get_huggingface_api_token():
if "HUGGINGFACE_API_TOKEN" not in st.session_state:
st.session_state.HUGGINGFACE_API_TOKEN = st.text_input(
"Enter your Hugging Face API Token",
type="password",
label_visibility="collapsed"
)
return st.session_state.HUGGINGFACE_API_TOKEN
# Set Hugging Face token for authentication
huggingface_api_token = get_huggingface_api_token()
if not huggingface_api_token:
st.warning("Please enter your Hugging Face API Token.")
st.stop()
HfApi().set_access_token(huggingface_api_token)
# Model repository details
model_repo_id = "shaheer-data/Yellow-Rust-Prediction"
model_file_path = "final_meta_model.keras"
# Construct the model URL
st.write("Loading model from Hugging Face repo:", model_repo_id)
model_url = hf_hub_url(model_repo_id, model_file_path)
loaded_model = tf.keras.models.load_model(model_url) # Load model using tf.keras directly
# Function to make predictions
def predict_image(image):
image = image.resize((224, 224)) # Resize to match model input dimensions
image_array = tf.keras.preprocessing.image.img_to_array(image)
image_array = tf.expand_dims(image_array, axis=0) # Expand dimensions for batch prediction
predictions = loaded_model.predict(image_array)
return predictions
# Class labels for Yellow Rust severity levels
CLASS_LABELS = [
"Healthy",
"Mild Severity",
"Moderate Severity",
"Severe Severity",
"Very Severe",
"Extreme Severity"
]
# Image upload widget
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])
if uploaded_file is not None:
image = Image.open(uploaded_file)
st.image(image, caption="Uploaded Image", use_column_width=True)
# Display progress bar
with st.spinner("Making predictions..."):
predictions = predict_image(image)
predicted_class = predictions.argmax(axis=-1)
st.write(f"Predicted Severity Level: {CLASS_LABELS[predicted_class[0]]} with confidence {predictions[0][predicted_class[0]]:.2f}")
else:
st.write("Please upload an image file to make predictions.")