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()
|