File size: 2,724 Bytes
ac831c4
 
2dc359d
 
 
ac831c4
31d24e2
 
2dc359d
 
019eaa3
 
 
 
 
2dc359d
019eaa3
 
 
ac831c4
 
 
019eaa3
ac831c4
 
 
 
 
94f96f8
ac831c4
 
 
998a552
 
ac831c4
 
 
 
 
 
998a552
ac831c4
 
2dc359d
ac831c4
998a552
 
2dc359d
ac831c4
 
94f96f8
ac831c4
 
 
 
 
 
2dc359d
ac831c4
5f0c190
 
 
 
 
 
 
 
 
 
ac831c4
 
 
2dc359d
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
63
64
65
66
67
68
69
70
71
72
73
74
import gradio as gr
import os
import tempfile
from roboflow import Roboflow
from dotenv import load_dotenv

# Muat variabel lingkungan dari file .env
load_dotenv()

# Ambil nilai dari environment variables
api_key = os.getenv("ROBOFLOW_API_KEY")
workspace = os.getenv("ROBOFLOW_WORKSPACE")
project_name = os.getenv("ROBOFLOW_PROJECT")
model_version = int(os.getenv("ROBOFLOW_MODEL_VERSION"))

# Inisialisasi Roboflow menggunakan data yang diambil dari .env
rf = Roboflow(api_key=api_key)
project = rf.workspace(workspace).project(project_name)
model = project.version(model_version).model

# Fungsi untuk menangani input dan output gambar
def detect_objects(image):
    # Simpan gambar yang diupload sebagai file sementara
    with tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") as temp_file:
        image.save(temp_file, format="JPEG")
        temp_file_path = temp_file.name

    # Lakukan prediksi pada gambar
    predictions = model.predict(temp_file_path, confidence=60, overlap=80).json()
    
    # Menghitung jumlah objek per kelas
    class_count = {}
    total_count = 0  # Menyimpan total jumlah objek

    for prediction in predictions['predictions']:
        class_name = prediction['class']
        if class_name in class_count:
            class_count[class_name] += 1
        else:
            class_count[class_name] = 1
        total_count += 1  # Tambah jumlah objek untuk setiap prediksi

    # Menyusun output berupa string hasil perhitungan
    result_text = "Product Nestle\n\n"  # Tambahkan baris kosong setelah judul
    for class_name, count in class_count.items():
        result_text += f"{class_name}: {count} \n"
    
    result_text += f"\nTotal Product Nestle: {total_count}"  # Tambahkan baris kosong antara kategori dan total
    
    # Menyimpan gambar dengan prediksi
    output_image = model.predict(temp_file_path, confidence=60, overlap=80).save("/tmp/prediction.jpg")
    
    # Hapus file sementara setelah prediksi
    os.remove(temp_file_path)
    
    return "/tmp/prediction.jpg", result_text

# Membuat antarmuka Gradio dengan label yang telah diganti
iface = gr.Interface(
    fn=detect_objects,                         # Fungsi yang dipanggil saat gambar diupload
    inputs=gr.Image(type="pil", label="Input Image"),  # Ganti label input
    outputs=[gr.Image(label="Detect Object"), gr.Textbox(label="Counting Object")],  # Ganti label output
    live=True                                 # Menampilkan hasil secara langsung
)

# Membungkus input dan output dalam gr.Row() untuk layout berdampingan
iface.layout = gr.Row(
    iface.inputs,  # Input image component
    iface.outputs  # Output components (image and text)
)

# Menjalankan antarmuka
iface.launch()