File size: 2,333 Bytes
ac831c4
2dc359d
b34cc48
 
 
ac831c4
7e0a954
31d24e2
019eaa3
 
 
 
 
7e0a954
019eaa3
 
 
ac831c4
7e0a954
ac831c4
7e0a954
ac831c4
 
 
 
7e0a954
94f96f8
ac831c4
7e0a954
ac831c4
7e0a954
998a552
ac831c4
 
92a3dd5
 
 
 
7e0a954
ac831c4
7e0a954
b34cc48
92a3dd5
ac831c4
92a3dd5
 
 
ac831c4
7e0a954
92a3dd5
ac831c4
7e0a954
ac831c4
 
92a3dd5
5f0c190
92a3dd5
 
 
 
 
 
 
ac831c4
7e0a954
92a3dd5
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
import gradio as gr
from dotenv import load_dotenv
from roboflow import Roboflow
import tempfile
import os

# Muat variabel lingkungan dari file .env
load_dotenv()
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 secrets
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"
    
    for class_name, count in class_count.items():
        result_text += f"{class_name}: {count} \n"
    
    result_text += f"\nTotal Product Nestle: {total_count}" 
    
    # 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
iface = gr.Interface(
    fn=detect_objects,                         # Fungsi yang dipanggil saat gambar diupload
    inputs=gr.Image(type="pil"),               # Input berupa gambar
    outputs=[gr.Image(), gr.Textbox()],        # Output gambar dan teks
    live=True                                    # Menampilkan hasil secara langsung
)

# Menjalankan antarmuka
iface.launch()