sankalp2606's picture
Create app.py
366ea57 verified
import gradio as gr
import pickle
import numpy as np
# Load the trained model
with open('fertilizer.pkl', 'rb') as f:
model = pickle.load(f)
# Dummy encoders (customize these based on your model preprocessing)
soil_dict = {'Loamy': 0, 'Sandy': 1, 'Clayey': 2, 'Black': 3, 'Red': 4}
crop_dict = {'Rice': 0, 'Wheat': 1, 'Maize': 2, 'Sugarcane': 3, 'Cotton': 4}
class FertilizerPredictor:
def __init__(self, model):
self.model = model
def preprocess_input(self, N, P, K, temperature, humidity, moisture, soil_type, crop_type):
try:
# Encode categorical data
soil_encoded = soil_dict.get(soil_type, -1)
crop_encoded = crop_dict.get(crop_type, -1)
if soil_encoded == -1 or crop_encoded == -1:
raise ValueError("Invalid soil_type or crop_type")
features = np.array([[N, P, K, temperature, humidity, moisture, soil_encoded, crop_encoded]])
return features
except KeyError as e:
raise ValueError(f"Missing field: {e}")
def predict(self, N, P, K, temperature, humidity, moisture, soil_type, crop_type):
features = self.preprocess_input(N, P, K, temperature, humidity, moisture, soil_type, crop_type)
prediction = self.model.predict(features)
return f"Recommended Fertilizer: {prediction[0]}"
# Create an instance
predictor = FertilizerPredictor(model)
# Define Gradio interface
demo = gr.Interface(
fn=predictor.predict,
inputs=[
gr.Number(label="Nitrogen (N)"),
gr.Number(label="Phosphorus (P)"),
gr.Number(label="Potassium (K)"),
gr.Number(label="Temperature (°C)"),
gr.Number(label="Humidity (%)"),
gr.Number(label="Moisture (%)"),
gr.Dropdown(list(soil_dict.keys()), label="Soil Type"),
gr.Dropdown(list(crop_dict.keys()), label="Crop Type")
],
outputs=gr.Textbox(label="Fertilizer Prediction"),
title="Fertilizer Recommendation System",
description="Enter soil and environmental parameters to get the recommended fertilizer."
)
if __name__ == "__main__":
demo.launch()