| import gradio as gr |
| import pickle |
| import numpy as np |
|
|
| |
| with open('fertilizer.pkl', 'rb') as f: |
| model = pickle.load(f) |
|
|
| |
| 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: |
| |
| 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]}" |
|
|
| |
| predictor = FertilizerPredictor(model) |
|
|
| |
| 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() |
|
|