File size: 2,153 Bytes
1bbaf9b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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()