import gradio as gr import pickle import numpy as np import pandas as pd import os # Load Model model_path = "crop_yield_model.pkl" if not os.path.exists(model_path): raise FileNotFoundError(f"Model file not found at {model_path}") with open(model_path, "rb") as file: model = pickle.load(file) # Example mapping for categorical variables (if encoded during training) season_mapping = {"Kharif": 0, "Rabi": 1, "Zaid": 2} district_mapping = {"District A": 0, "District B": 1, "District C": 2} crop_mapping = {"Wheat": 0, "Rice": 1, "Maize": 2, "Sugarcane": 3} # Prediction Function def predict_yield(area, season, district, crop): try: # Convert categorical inputs to numerical if necessary season_encoded = season_mapping.get(season, -1) district_encoded = district_mapping.get(district, -1) crop_encoded = crop_mapping.get(crop, -1) if -1 in [season_encoded, district_encoded, crop_encoded]: return "Error: Invalid categorical input value." # Prepare input features = np.array([[area, season_encoded, district_encoded, crop_encoded]]) prediction = model.predict(features) return f"Predicted Crop Yield: {float(prediction[0]):.2f}" except Exception as e: return f"Error in prediction: {str(e)}" # Gradio Interface demo = gr.Interface( fn=predict_yield, inputs=[ gr.Number(label="Area (in acres)"), gr.Dropdown(["Kharif", "Rabi", "Zaid"], label="Season"), gr.Dropdown(["District A", "District B", "District C"], label="District"), gr.Dropdown(["Wheat", "Rice", "Maize", "Sugarcane"], label="Crop"), ], outputs=gr.Textbox(label="Prediction Result"), title="Crop Yield Prediction", description="Enter the details to predict crop yield.", ) if __name__ == "__main__": demo.launch()