wildanzm commited on
Commit
0283747
Β·
verified Β·
1 Parent(s): 2064b05

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -95
app.py CHANGED
@@ -1,104 +1,56 @@
1
- import gradio as gr
2
- from ultralytics import YOLO
3
- import google.generativeai as genai
 
4
  import os
5
- from PIL import Image
6
- import warnings
7
-
8
- # Abaikan peringatan yang tidak relevan dari library
9
- warnings.filterwarnings("ignore")
10
-
11
- # --- 1. KONFIGURASI DAN PEMUATAN MODEL ---
12
-
13
- # Muat Model YOLOv8 dari folder 'weights'
14
- try:
15
- yolo_model = YOLO('./weights/best.pt')
16
- except Exception:
17
- yolo_model = None
18
-
19
- # Muat API Key Gemini dari Hugging Face Secrets
20
- # Pengguna harus mengatur secret ini di pengaturan Space mereka
21
- GEMINI_API_KEY = os.environ.get('GEMINI_API_KEY')
22
- gemini_model = None
23
- if GEMINI_API_KEY:
24
- try:
25
- genai.configure(api_key=GEMINI_API_KEY)
26
- gemini_model = genai.GenerativeModel('gemini-1.5-pro-latest')
27
- except Exception as e:
28
- print(f"Error konfigurasi Gemini: {e}")
29
- else:
30
- print("Peringatan: Secret 'GEMINI_API_KEY' tidak ditemukan.")
31
-
32
- # Kamus terjemahan hama
33
- kamus_hama = {
34
- 'aphids': 'Kutu Daun', 'armyworm': 'Ulat Grayak', 'beetle': 'Kumbang',
35
- 'bollworm': 'Ulat Penggerek Buah', 'grasshopper': 'Belalang', 'mites': 'Tungau',
36
- 'mosquito': 'Nyamuk', 'sawfly': 'Lalat Gergaji', 'stem_borer': 'Penggerek Batang',
37
- 'ants': 'Semut', 'bees': 'Lebah', 'catterpillar': 'Ulat Bulu', 'caterpillar': 'Ulat Bulu',
38
- 'earthworms': 'Cacing Tanah', 'earwig': 'Gegat', 'moth': 'Ngengat',
39
- 'slug': 'Siput Telanjang', 'snail': 'Siput', 'wasp': 'Tawon', 'weevil': 'Kumbang Bubuk'
40
- }
41
-
42
- # --- 2. FUNGSI LOGIKA UTAMA ---
43
 
44
- def dapatkan_panduan_hama(nama_hama_indonesia):
45
- """Fungsi untuk mendapatkan panduan dari Gemini."""
46
- if not gemini_model:
47
- return "⚠️ **Model Gemini tidak terkonfigurasi.**\nHarap atur secret `GEMINI_API_KEY` di pengaturan Hugging Face Space untuk mendapatkan panduan penanganan."
 
 
 
 
 
 
 
 
48
 
49
- prompt = f"""Sebagai ahli pertanian di Indonesia, berikan panduan penanganan praktis untuk hama '{nama_hama_indonesia}' dengan format Markdown yang rapi. Gunakan poin dan sub-poin. Jawaban harus mencakup: Deskripsi, Gejala Serangan, Pencegahan, Penanganan Non-Kimiawi, dan Penanganan Kimiawi."""
50
- try:
51
- response = gemini_model.generate_content(prompt)
52
- return response.text
53
- except Exception as e:
54
- return f"❌ Gagal mendapatkan panduan dari Gemini. Error: {e}"
55
-
56
- def identifikasi_hama_dan_panduan(gambar_input):
57
- """Fungsi utama yang akan dijalankan oleh Gradio."""
58
- if not yolo_model:
59
- return "Model YOLO tidak berhasil dimuat.", "Silakan periksa apakah file `weights/best.pt` sudah benar.", None
60
 
61
- # Lakukan prediksi dengan model YOLOv8
62
- results = yolo_model.predict(gambar_input, verbose=False)
63
- result = results[0]
64
- probabilities = result.probs
65
- nama_inggris = yolo_model.names[probabilities.top1]
66
- keyakinan = probabilities.top1conf
67
- nama_indonesia = kamus_hama.get(nama_inggris, nama_inggris)
68
-
69
- # Format hasil prediksi
70
- hasil_prediksi = f"### 🎯 Hasil Identifikasi\n- **Prediksi Hama:** {nama_indonesia} (*{nama_inggris}*)\n- **Tingkat Keyakinan:** {keyakinan.item():.2%}"
71
-
72
- # Dapatkan panduan dari Gemini
73
- panduan_penanganan = dapatkan_panduan_hama(nama_indonesia)
74
 
75
- # Kembalikan semua output yang dibutuhkan oleh antarmuka
76
- return gambar_input, hasil_prediksi, panduan_penanganan
 
 
 
 
77
 
78
- # --- 3. BUAT ANTARMUKA GRADIO YANG EYE-CATCHING ---
79
 
80
- with gr.Blocks(theme=gr.themes.Soft(primary_hue="lime", secondary_hue="green")) as app:
81
- gr.Markdown("# 🌿 eleaf: Pest Identification 🌿")
82
- gr.Markdown("Unggah gambar hama pada tanaman Anda. AI akan mengidentifikasi jenisnya dan memberikan panduan penanganan lengkap.")
83
-
84
- with gr.Row():
85
- with gr.Column(scale=1):
86
- input_image = gr.Image(type="pil", label="Unggah Gambar di Sini")
87
-
88
- submit_button = gr.Button("πŸ” Identifikasi Hama", variant="primary")
89
-
90
- with gr.Column(scale=2):
91
- output_image = gr.Image(label="Gambar yang Dianalisis", interactive=False)
92
- output_prediksi = gr.Markdown(label="Hasil Prediksi")
93
- output_panduan = gr.Markdown(label="Panduan Penanganan dari AI")
94
 
95
- # Menghubungkan tombol ke fungsi logika
96
- submit_button.click(
97
- fn=identifikasi_hama_dan_panduan,
98
- inputs=input_image,
99
- outputs=[output_image, output_prediksi, output_panduan]
100
- )
101
 
102
- # --- 4. LUNCURKAN APLIKASI ---
103
- if __name__ == "__main__":
104
- app.launch()
 
1
+ # ===================================================================
2
+ # APP.PY VERSI DEBUGGING
3
+ # Tujuannya untuk melihat struktur file di server Hugging Face
4
+ # ===================================================================
5
  import os
6
+ import gradio as gr
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
+ # --- BAGIAN DEBUGGING ---
9
+ # Kode ini akan mencetak semua file yang ada di server ke dalam log
10
+ print("="*50)
11
+ print("πŸ•΅οΈ Memulai Debugging Lingkungan Hugging Face Spaces...")
12
+ print(f"Direktori saat ini (Current Working Directory): {os.getcwd()}")
13
+ print("\nStruktur File dan Folder yang Terdeteksi:")
14
+
15
+ # Membuat daftar pohon direktori yang mudah dibaca
16
+ for root, dirs, files in os.walk("."):
17
+ # Jangan masuk ke folder .git yang tersembunyi
18
+ if '.git' in dirs:
19
+ dirs.remove('.git')
20
 
21
+ path = root.split(os.sep)
22
+ # Abaikan root awal './'
23
+ if len(path) == 1:
24
+ level = 0
25
+ else:
26
+ level = len(path) - 1
 
 
 
 
 
27
 
28
+ indent = " " * 4 * level
29
+ print(f"{indent}πŸ“‚ {os.path.basename(root)}/")
 
 
 
 
 
 
 
 
 
 
 
30
 
31
+ sub_indent = " " * 4 * (level + 1)
32
+ for f in files:
33
+ print(f"{sub_indent}πŸ“„ {f}")
34
+
35
+ print("="*50)
36
+ # --------------------------
37
 
 
38
 
39
+ # Kita akan coba muat model, tapi dengan pesan error yang lebih jelas
40
+ try:
41
+ from ultralytics import YOLO
42
+ print("\nAttempting to load model from './weights/best.pt'...")
43
+ yolo_model = YOLO('./weights/best.pt')
44
+ print("βœ…βœ…βœ… SUKSES MEMUAT MODEL! Jika Anda melihat ini, berarti path sudah benar.")
45
+ except FileNotFoundError:
46
+ print("\n❌❌❌ GAGAL: FileNotFoundError. Path './weights/best.pt' tidak ditemukan.")
47
+ except Exception as e:
48
+ print(f"\n❌❌❌ GAGAL dengan error lain: {e}")
49
+
 
 
 
50
 
51
+ # Membuat antarmuka Gradio sederhana hanya untuk menjaga aplikasi tetap berjalan
52
+ with gr.Blocks() as app:
53
+ gr.Markdown("# Aplikasi Sedang dalam Mode Debugging")
54
+ gr.Markdown("Silakan periksa tab 'Logs' di Hugging Face Space Anda untuk melihat struktur file yang terdeteksi.")
 
 
55
 
56
+ app.launch()