treamyracle commited on
Commit
26f2e90
·
verified ·
1 Parent(s): a01b93b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -29
app.py CHANGED
@@ -1,56 +1,52 @@
1
  import gradio as gr
2
  import cv2
 
3
  from ultralytics import YOLO
4
 
5
- # --- CONFIGURATION ---
6
- # Pastikan file 'best.pt' sudah ada di tab 'Files' di Hugging Face Space Anda
7
  MODEL_PATH = "best.pt"
8
-
9
- print("🔄 Sedang memuat model...")
10
  try:
11
  model = YOLO(MODEL_PATH)
12
  print("✅ Model berhasil dimuat!")
13
  except Exception as e:
14
- print(f"❌ Gagal memuat model: {e}")
15
  model = None
 
16
 
17
- def detect_objects(frame):
18
  """
19
- Fungsi sederhana: Terima gambar -> Deteksi -> Kembalikan gambar hasil deteksi
20
  """
21
- if frame is None:
22
  return None
23
 
24
  if model is None:
25
- return frame # Kembalikan frame asli jika model gagal load
26
 
27
- # Gradio memberikan gambar dalam format RGB, OpenCV/YOLO butuh BGR (kadang otomatis, tapi aman dikonversi)
28
- # Namun ultralytics .plot() mengembalikan BGR numpy array, jadi kita perlu bolak-balik warnanya agar pas di web.
29
-
30
- # 1. Lakukan Prediksi
31
- results = model.predict(frame, conf=0.4) # Conf 0.4 agar tidak terlalu sensitif
32
 
33
- # 2. Gambar Kotak (Bounding Boxes)
34
- # plot() mengembalikan array BGR
35
- annotated_frame = results[0].plot()
36
-
37
- # 3. Konversi BGR ke RGB agar warnanya benar di Browser
38
- output_frame = cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB)
39
 
40
- return output_frame
41
 
42
- # --- GRADIO INTERFACE ---
43
  with gr.Blocks() as demo:
44
- gr.Markdown("# 🛠️ Test Mode: YOLO Best.pt Only")
45
- gr.Markdown("Kode ini hanya menguji apakah model custom `best.pt` berjalan.")
46
 
47
  with gr.Row():
48
- input_cam = gr.Image(sources=["webcam"], streaming=True, label="Kamera Anda")
49
- output_cam = gr.Image(label="Hasil Deteksi")
 
 
 
50
 
51
- # Jalankan fungsi setiap kali ada frame baru dari kamera
52
- input_cam.change(fn=detect_objects, inputs=input_cam, outputs=output_cam)
53
 
54
- # Matikan SSR agar webcam lebih lancar
55
  if __name__ == "__main__":
56
  demo.launch(ssr_mode=False)
 
1
  import gradio as gr
2
  import cv2
3
+ import numpy as np
4
  from ultralytics import YOLO
5
 
6
+ # --- LOAD MODEL ---
7
+ # Pastikan file 'best.pt' ada di Files Hugging Face
8
  MODEL_PATH = "best.pt"
 
 
9
  try:
10
  model = YOLO(MODEL_PATH)
11
  print("✅ Model berhasil dimuat!")
12
  except Exception as e:
 
13
  model = None
14
+ print(f"❌ Error Load Model: {e}")
15
 
16
+ def detect_manual(image):
17
  """
18
+ Fungsi ini hanya berjalan saat tombol ditekan.
19
  """
20
+ if image is None:
21
  return None
22
 
23
  if model is None:
24
+ return image # Kembalikan gambar asli jika model rusak
25
 
26
+ # 1. Deteksi
27
+ results = model.predict(image, conf=0.4)
 
 
 
28
 
29
+ # 2. Ambil Plot (Gambar hasil)
30
+ # Ultralytics mengembalikan BGR, kita perlu convert ke RGB
31
+ res_plotted = results[0].plot()
32
+ output_image = cv2.cvtColor(res_plotted, cv2.COLOR_BGR2RGB)
 
 
33
 
34
+ return output_image
35
 
36
+ # --- TAMPILAN WEB ---
37
  with gr.Blocks() as demo:
38
+ gr.Markdown("# 📸 Test Mode: Foto & Deteksi")
39
+ gr.Markdown("Cara pakai: Klik ikon kamera untuk ambil foto, lalu tekan tombol 'Mulai Deteksi'.")
40
 
41
  with gr.Row():
42
+ # streaming=False artinya mode ambil foto biasa
43
+ inp = gr.Image(sources=["webcam"], label="Ambil Foto Di Sini", streaming=False)
44
+ out = gr.Image(label="Hasil AI")
45
+
46
+ btn = gr.Button("🔍 Mulai Deteksi", variant="primary")
47
 
48
+ # AI hanya jalan saat tombol ditekan
49
+ btn.click(fn=detect_manual, inputs=inp, outputs=out)
50
 
 
51
  if __name__ == "__main__":
52
  demo.launch(ssr_mode=False)