Acres-CR / app.py
JohanBeytell's picture
Update app.py
2d47d31 verified
import gradio as gr
import numpy as np
from sklearn.preprocessing import LabelEncoder
from xgboost import XGBClassifier
import pickle
# Load the trained model and label encoder
model = pickle.load(open('crop_recommendation_model.pkl', 'rb'))
le = pickle.load(open('label_encoder.pkl', 'rb'))
def recommend_crop(nitrogen, phosphorus, potassium, temperature, humidity, ph, rainfall):
# Prepare the input sample as a 2D array
X_sample = np.array([[nitrogen, phosphorus, potassium, temperature, humidity, ph, rainfall]])
# Predict crop recommendations
y_pred_sample = model.predict(X_sample)
# Decode the prediction back to crop name
crops_pred = le.inverse_transform(y_pred_sample)
return crops_pred[0] # Return the predicted crop name
# Example inputs for the Gradio app
examples = [
[90, 42, 43, 20, 82, 6.5, 202],
[80, 30, 40, 25, 60, 6.8, 150],
[95, 55, 50, 28, 70, 7.0, 120]
]
# Create the Gradio interface
interface = gr.Interface(
fn=recommend_crop,
inputs=[
gr.Number(label="Nitrogen - Ratio of Nitrogen in the soil"),
gr.Number(label="Phosphorus - Ratio of Phosphorus in the soil"),
gr.Number(label="Potassium - Ratio of Potassium in the soil"),
gr.Number(label="Temperature - In degrees Celsius"),
gr.Number(label="Humidity - Relative humidity in %"),
gr.Number(label="pH Value - pH value of the soil"),
gr.Number(label="Rainfall - Rainfall in mm")
],
outputs=gr.Textbox(label="Recommended Crop"),
examples=examples,
title="Acres - CR",
description="Acres Crop Recommendation recommends the best crop to plant based on soil and climate conditions."
)
# Launch the app
if __name__ == "__main__":
interface.launch()