Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import joblib | |
| import pandas as pd | |
| import os | |
| from model_interface.hf_model_store import get_artifact_path | |
| # Set environment variable to avoid OpenMP issues | |
| os.environ['OMP_NUM_THREADS'] = '1' | |
| cat_col = ['Country_Name', 'Region_Name', 'State_Name', 'Crop_Name'] | |
| def stress_prediction(): | |
| # Load model and label encoders inside the function | |
| best_model = joblib.load(get_artifact_path("7_stress_prediction/pest_disease_model.joblib")) | |
| label_enc = joblib.load(get_artifact_path("7_stress_prediction/label_pest_disease.joblib")) | |
| # Prediction function | |
| def predict(data): | |
| input_data = pd.DataFrame([data]) | |
| # Encode categorical columns | |
| for col in cat_col: | |
| try: | |
| input_data[col] = label_enc[col].transform(input_data[col]) | |
| except ValueError as e: | |
| return f"[Encoding Error] Column '{col}': {e}" | |
| # Predict probabilities | |
| proba = best_model.predict_proba(input_data)[0] | |
| class_labels = label_enc["Pest_Disease"].inverse_transform(range(len(proba))) | |
| label_percentage_list = [ | |
| (str(label), float(round(prob * 100, 2))) | |
| for label, prob in zip(class_labels, proba) | |
| ] | |
| # Get Top 3 predictions | |
| top_3 = sorted(label_percentage_list, key=lambda x: x[1], reverse=True)[:3] | |
| return top_3 | |
| # ----------------------------- | |
| # Streamlit Interface | |
| # ----------------------------- | |
| st.title("🌱 Pest & Disease Prediction System") | |
| st.write("Provide environmental and crop details to predict possible pests/diseases.") | |
| # Sidebar Inputs | |
| st.sidebar.header("Input Features") | |
| country = st.sidebar.text_input("Country Name", "India") | |
| region = st.sidebar.text_input("Region Name", "Asia") | |
| state = st.sidebar.text_input("State Name", "Maharashtra") | |
| crop = st.sidebar.text_input("Crop Name", "Pomegranate") | |
| avg_temp = st.sidebar.number_input("Average Temperature (°C)", 0, 60, 26) | |
| avg_humidity = st.sidebar.number_input("Average Humidity (%)", 0, 100, 65) | |
| # Submit button | |
| if st.sidebar.button("Predict"): | |
| user_input = { | |
| "Country_Name": country, | |
| "Region_Name": region, | |
| "State_Name": state, | |
| "Crop_Name": crop, | |
| "avg_temp": avg_temp, | |
| "avg_humidity": avg_humidity | |
| } | |
| result = predict(user_input) | |
| st.subheader("🔍 Top 3 Predicted Pest/Diseases") | |
| if isinstance(result, str): | |
| st.error(result) | |
| else: | |
| for label, score in result: | |
| st.write(f"**{label}** — {score}%") | |
| st.success("Prediction completed successfully.") |