AgriBotApp / app.py
tayy786's picture
Create app.py
1bbaf9b verified
import gradio as gr
from ultralytics import YOLO
import PIL.Image
from groq import Groq
import os
# 1. Initialize YOLO and Groq
# Make sure "best.pt" is uploaded to your Hugging Face Space
model = YOLO("best.pt")
client = Groq(api_key=os.environ.get("Bot"))
def get_urdu_advice(disease_name):
"""Fetches cure and advice in Urdu from Groq LLM"""
prompt = f"The plant has been diagnosed with {disease_name}. Please provide a brief description of this disease and its cure in Urdu language for a farmer."
completion = client.chat.completions.create(
model="llama-3.1-8b-instant",
messages=[{"role": "user", "content": prompt}],
)
return completion.choices[0].message.content
def predict_and_advise(input_img):
# Detection
results = model.predict(source=input_img, conf=0.25)
res_plotted = results[0].plot()
# Get the name of the top detected disease
if len(results[0].boxes) > 0:
# Extract class name of the first detection
class_id = int(results[0].boxes.cls[0])
disease_name = results[0].names[class_id]
urdu_advice = get_urdu_advice(disease_name)
else:
disease_name = "No disease detected"
urdu_advice = "پودا صحت مند لگ رہا ہے یا کوئی بیماری نہیں ملی۔"
# Convert BGR to RGB for output
output_img = PIL.Image.fromarray(res_plotted[:, :, ::-1])
return output_img, urdu_advice
# 3. Gradio Blocks UI
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# 🌾 AgriBot PK: Rice Disease Detector")
gr.Markdown("پودے کی تصویر اپ لوڈ کریں تاکہ بیماری کی شناخت ہو سکے اور علاج معلوم کیا جا سکے۔")
with gr.Row():
input_file = gr.Image(type="pil", label="Upload Leaf Image")
output_image = gr.Image(type="pil", label="Detected Disease")
urdu_text = gr.Textbox(label="Disease Info & Cure (Urdu)", lines=10)
submit_btn = gr.Button("Detect & Get Advice")
submit_btn.click(fn=predict_and_advise, inputs=input_file, outputs=[output_image, urdu_text])
demo.launch()