File size: 2,786 Bytes
eae42ce
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
57
58
59
60
61
62
import gradio as gr
from transformers import pipeline
import wikipedia

# Opsional: Mengatur pencarian Wikipedia ke bahasa Indonesia
wikipedia.set_lang("id")

# 1. LOAD MODEL KHUSUS TANAMAN
print("Sedang memuat model FloraSense...")
# Catatan: Jika model ini belum tersedia, Anda juga bisa memakai "google/vit-base-patch16-224"
classifier = pipeline("image-classification", model="Sisigoks/FloraSense")

def identify_plant(image):
    if image is None:
        return None, "⚠️ Silakan masukkan gambar terlebih dahulu."
    
    # Model melakukan prediksi
    predictions = classifier(image)
    
    # Format output untuk bar persentase (Progress Bar)
    confidences = {p["label"]: p["score"] for p in predictions}
    
    # Ambil label tanaman dengan probabilitas tertinggi untuk dicari di Wikipedia
    top_plant = predictions[0]["label"]
    
    # 2. PENCARIAN WIKIPEDIA
    try:
        # Mengambil 2 kalimat pertama dari Wikipedia
        wiki_summary = wikipedia.summary(top_plant, sentences=2)
        wiki_text = f"### πŸ“– Tahukah Anda?\n**{top_plant.title()}**: {wiki_summary}"
    except wikipedia.exceptions.DisambiguationError:
        wiki_text = f"### πŸ“– Info Wikipedia\nAda banyak arti untuk **{top_plant}**. Silakan cari secara spesifik."
    except wikipedia.exceptions.PageError:
        # Jika tidak ditemukan di Wikipedia Indonesia, beri pesan khusus
        wiki_text = f"### πŸ“– Info Wikipedia\nMaaf, informasi tentang **{top_plant}** belum tersedia di Wikipedia saat ini."
    except Exception:
        wiki_text = "### πŸ“– Info Wikipedia\nGagal terhubung ke server Wikipedia."

    return confidences, wiki_text

# 3. MEMBUAT ANTARMUKA GRADIO
with gr.Blocks(theme=gr.themes.Soft()) as demo:
    gr.Markdown("""

    <h1 style='text-align: center;'>🌿 Flora Lens: AI Plant Identifier</h1>

    <p style='text-align: center;'>Ambil foto tanaman dari kamera Anda, dan AI akan mendeteksi spesiesnya beserta info dari Wikipedia.</p>

    """)
    
    with gr.Row():
        with gr.Column():
            # PARAMETER BARU: sources=["webcam", "upload"] memunculkan icon kamera dan folder
            inp_img = gr.Image(type="pil", sources=["webcam", "upload"], label="πŸ“· Ambil Foto / πŸ“‚ Upload Gambar")
            btn = gr.Button("πŸ” Identifikasi & Cari Info", variant="primary")
            
        with gr.Column():
            out_label = gr.Label(num_top_classes=3, label="πŸ“Š Hasil Prediksi AI")
            out_wiki = gr.Markdown(label="Info Tambahan")
            
    # Menghubungkan tombol dengan fungsi (sekarang outputs ada dua: label dan teks wiki)
    btn.click(fn=identify_plant, inputs=inp_img, outputs=[out_label, out_wiki])

if __name__ == "__main__":
    demo.launch()