AgroVision / app.py
pushpinder06's picture
Update app.py
54598fd verified
raw
history blame
3.87 kB
import gradio as gr
import pandas as pd
import lightgbm as lgb
import numpy as np
import google.generativeai as genai
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
# ---------------------------
# HARDCODED GEMINI API KEY
# ---------------------------
GOOGLE_API_KEY = "AIzaSyAju28ijKpMNxr1kh4Ml5GPNmI7reBN7FE" # Replace with your actual Gemini API key
genai.configure(api_key=GOOGLE_API_KEY)
# Load Gemini model
gemini_model = genai.GenerativeModel(model_name="models/gemini-pro")
# ---------------------------
# CROP RECOMMENDATION SETUP
# ---------------------------
url = "https://raw.githubusercontent.com/89911384/CSV-Files/refs/heads/main/crop_cleaned%20data.csv"
data = pd.read_csv(url)
X = data.drop('label', axis=1)
y = data['label']
le = LabelEncoder()
y_encoded = le.fit_transform(y)
X_train, X_test, y_train, y_test = train_test_split(X, y_encoded, test_size=0.3, random_state=0)
model = lgb.LGBMClassifier()
model.fit(X_train, y_train)
def predict_crop(N, P, K, temperature, humidity, ph, rainfall):
input_data = np.array([[N, P, K, temperature, humidity, ph, rainfall]])
pred = model.predict(input_data)[0]
crop_name = le.inverse_transform([pred])[0]
return f"๐ŸŒพ Recommended Crop: *{crop_name}*"
# ---------------------------
# CHATBOT FUNCTION (GEMINI ONLY)
# ---------------------------
def chat_with_gemini(prompt):
try:
response = gemini_model.generate_content(prompt)
return response.text
except Exception as e:
return f"โŒ Error from Gemini: {str(e)}"
# ---------------------------
# GRADIO APP UI
# ---------------------------
with gr.Blocks() as demo:
gr.Markdown("# ๐ŸŒฑ **AgroVision: Smart Assistant for Farmers**")
with gr.Tabs():
# TAB 1: CROP RECOMMENDATION
with gr.TabItem("๐ŸŒพ Crop Recommendation"):
gr.Markdown("### Enter Soil & Climate Details to Predict Suitable Crop")
with gr.Row():
N = gr.Slider(minimum=0, maximum=300, step=1, label="Nitrogen (N) in kg/ha")
P = gr.Slider(minimum=0, maximum=200, step=1, label="Phosphorus (P) in kg/ha")
K = gr.Slider(minimum=0, maximum=200, step=1, label="Potassium (K) in kg/ha")
with gr.Row():
temperature = gr.Slider(minimum=-10, maximum=50, step=0.1, label="Temperature (ยฐC)")
humidity = gr.Slider(minimum=0, maximum=100, step=1, label="Humidity (%)")
with gr.Row():
ph = gr.Slider(minimum=0, maximum=14, step=0.1, label="Soil pH")
rainfall = gr.Slider(minimum=0, maximum=500, step=1, label="Rainfall (mm)")
predict_btn = gr.Button("Predict Crop")
output_crop = gr.Markdown()
predict_btn.click(
fn=predict_crop,
inputs=[N, P, K, temperature, humidity, ph, rainfall],
outputs=output_crop
)
# TAB 2: CROP DISEASE PREDICTION (Placeholder)
with gr.TabItem("๐ŸŒฟ Crop Disease Detection"):
gr.Markdown("### Upload an image of a crop leaf to detect disease (Coming Soon)")
gr.Image(label="Upload Crop Image", type="filepath")
gr.Button("Predict Disease (Coming Soon)")
gr.Textbox(label="Prediction Output", placeholder="Model response will appear here...")
# TAB 3: SMART CHATBOT (Gemini Only)
with gr.TabItem("๐Ÿ’ฌ Farmer's Chatbot"):
gr.Markdown("### Ask any question related to farming ๐Ÿ‘จโ€๐ŸŒพ")
user_input = gr.Textbox(label="Your Question")
chatbot_output = gr.Textbox(label="AgroVision Bot Response")
chatbot_btn = gr.Button("Ask Gemini")
chatbot_btn.click(fn=chat_with_gemini, inputs=user_input, outputs=chatbot_output)
# Run the app
demo.launch()