anindya-hf-2002's picture
Update app.py
8e6a432 verified
raw
history blame
No virus
3.36 kB
import gradio as gr
import pickle
import numpy as np
# Load the trained models
with open('rf_crop.pkl', 'rb') as file:
crop_model = pickle.load(file)
with open('knn_fertilizer.pkl', 'rb') as file:
fertilizer_model = pickle.load(file)
with open('Scaler_fertilizer.pkl', 'rb') as file: # Assuming you saved the scaler during model training
scaler = pickle.load(file)
# Label Encoders for the models
crop_label_encoder = {
0: "Sugarcane", 1: "Wheat", 2: "Cotton", 3: "Jowar", 4: "Rice",
5: "Maize", 6: "Groundnut", 7: "Grapes", 8: "Tur", 9: "Ginger",
10: "Turmeric", 11: "Urad", 12: "Gram", 13: "Moong", 14: "Soybean", 15: "Masoor"
}
fertilizer_label_encoder = {
0: "Urea", 1: "DAP", 2: "MOP", 3: "SSP", 4: "19:19:19 NPK",
5: "Chilated Micronutrient", 6: "50:26:26 NPK", 7: "Magnesium Sulphate",
8: "10:26:26 NPK", 9: "Ferrous Sulphate", 10: "13:32:26 NPK",
11: "10:10:10 NPK", 12: "Ammonium Sulphate", 13: "12:32:16 NPK",
14: "White Potash", 15: "Hydrated Lime", 16: "20:20:20 NPK",
17: "18:46:00 NPK", 18: "Sulphur"
}
# Prediction functions
def predict_crop(Nitrogen, Phosphorus, Potassium, pH, Rainfall, Temperature):
# Prepare the input data and scale it
crop_input = np.array([[Nitrogen, Phosphorus, Potassium, pH, Rainfall, Temperature]])
crop_input_scaled = scaler.transform(crop_input)
# Predict the crop
crop_prediction = crop_model.predict(crop_input_scaled)
return crop_prediction[0]
def predict_fertilizer(Nitrogen, Phosphorus, Potassium, pH, Rainfall, Temperature, Crop):
# Prepare the input data and scale it
crop_index = list(crop_label_encoder.keys())[list(crop_label_encoder.values()).index(Crop)]
fertilizer_input = np.array([[Nitrogen, Phosphorus, Potassium, pH, Rainfall, Temperature, crop_index]])
fertilizer_input_scaled = scaler.transform(fertilizer_input[:, :-1])
# Add crop index back to the scaled input
fertilizer_input_scaled = np.hstack([fertilizer_input_scaled, [[crop_index]]])
# Predict the fertilizer
fertilizer_prediction = fertilizer_model.predict(fertilizer_input_scaled)
return fertilizer_label_encoder[int(fertilizer_prediction[0])]
# Gradio Interface for Crop Prediction
crop_interface = gr.Interface(
fn=predict_crop,
inputs=[
gr.Number(label="Nitrogen"),
gr.Number(label="Phosphorus"),
gr.Number(label="Potassium"),
gr.Number(label="pH"),
gr.Number(label="Rainfall"),
gr.Number(label="Temperature")
],
outputs=gr.Label(num_top_classes=1),
title="Crop Prediction",
allow_flagging='never'
)
# Gradio Interface for Fertilizer Prediction
fertilizer_interface = gr.Interface(
fn=predict_fertilizer,
inputs=[
gr.Number(label="Nitrogen"),
gr.Number(label="Phosphorus"),
gr.Number(label="Potassium"),
gr.Number(label="pH"),
gr.Number(label="Rainfall"),
gr.Number(label="Temperature"),
gr.Dropdown(label="Crop", choices=list(crop_label_encoder.values()))
],
outputs=gr.Label(num_top_classes=1),
title="Fertilizer Prediction",
allow_flagging='never'
)
# Create a Tabbed Interface in Gradio
app = gr.TabbedInterface([crop_interface, fertilizer_interface], ["Crop Prediction", "Fertilizer Prediction"])
# Launch the app
app.launch()