|
|
import gradio as gr |
|
|
import pandas as pd |
|
|
import lightgbm as lgb |
|
|
from sklearn.model_selection import train_test_split |
|
|
from sklearn.preprocessing import LabelEncoder |
|
|
|
|
|
|
|
|
url = "https://raw.githubusercontent.com/Pushpinder-Singh06/CSV-Files/refs/heads/main/crop_cleaned%20data.csv " |
|
|
data = pd.read_csv(url) |
|
|
|
|
|
|
|
|
crops = [ |
|
|
'rice', |
|
|
'maize', |
|
|
'chickpea', |
|
|
'kidneybeans', |
|
|
'pigeonpeas', |
|
|
'mothbeans', |
|
|
'mungbean', |
|
|
'blackgram', |
|
|
'lentil', |
|
|
'pomegranate', |
|
|
'banana', |
|
|
'mango', |
|
|
'watermelon', |
|
|
'muskmelon', |
|
|
'orange', |
|
|
'papaya', |
|
|
'coconut', |
|
|
'cotton', |
|
|
'jute', |
|
|
'coffee' |
|
|
] |
|
|
|
|
|
|
|
|
le = LabelEncoder() |
|
|
le.fit(data['label']) |
|
|
data['crop_encoded'] = le.transform(data['label']) |
|
|
|
|
|
|
|
|
reverse_X = data[['crop_encoded']] |
|
|
y_cols = ['N', 'P', 'K', 'temperature', 'humidity', 'ph', 'rainfall'] |
|
|
|
|
|
|
|
|
|
|
|
reverse_models = {} |
|
|
for col in y_cols: |
|
|
y = data[col] |
|
|
X_train, X_test, y_train, y_test = train_test_split(reverse_X, y, test_size=0.2, random_state=42) |
|
|
model_r = lgb.LGBMRegressor() |
|
|
model_r.fit(X_train, y_train) |
|
|
reverse_models[col] = model_r |
|
|
|
|
|
|
|
|
label_to_encoded = {label: le.transform([label])[0] for label in le.classes_} |
|
|
|
|
|
|
|
|
def predict_crop_parameters(crop_name): |
|
|
crop_name = crop_name.strip() |
|
|
if crop_name not in label_to_encoded: |
|
|
return f"❌ No data found for '<b>{crop_name}</b>'." |
|
|
|
|
|
encoded_value = label_to_encoded[crop_name] |
|
|
input_data = [[encoded_value]] |
|
|
|
|
|
predictions = {} |
|
|
for param, model_r in reverse_models.items(): |
|
|
predicted_value = model_r.predict(input_data)[0] |
|
|
predictions[param] = round(predicted_value, 2) |
|
|
|
|
|
formatted_output = "" |
|
|
for k, v in predictions.items(): |
|
|
formatted_output += f"<b>{k}</b>: {v}<br>" |
|
|
|
|
|
return formatted_output |
|
|
|
|
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
|
gr.Markdown("# 🌾 **AgroVision: Crop-Based Parameters**") |
|
|
crop_input = gr.Dropdown(choices=crops, label="🌿 Select Crop Name") |
|
|
result_output = gr.Markdown(label="🧪 Recommended Parameters") |
|
|
run_btn = gr.Button("➡️ Predict Parameters") |
|
|
run_btn.click(fn=predict_crop_parameters, inputs=[crop_input], outputs=[result_output]) |
|
|
|
|
|
|
|
|
demo.launch() |