Spaces:
Build error
Build error
import gradio as gr | |
from roboflow import Roboflow | |
import tempfile | |
import os | |
import cv2 | |
import supervision as sv | |
import numpy as np | |
# Inisialisasi Roboflow | |
rf = Roboflow(api_key="Otg64Ra6wNOgDyjuhMYU") | |
project = rf.workspace("alat-pelindung-diri").project("nescafe-4base") | |
model = project.version(16).model | |
# Fungsi untuk deteksi objek dengan supervision InferenceSlicer | |
def detect_objects(image): | |
# Simpan gambar sementara | |
with tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") as temp_file: | |
image.save(temp_file, format="JPEG") | |
temp_file_path = temp_file.name | |
# Membaca gambar dengan OpenCV | |
img = cv2.imread(temp_file_path) | |
# Callback function untuk model prediksi | |
def callback(image_slice: np.ndarray) -> sv.Detections: | |
# Lakukan inferensi pada setiap potongan gambar | |
predictions = model.predict(image_slice, confidence=50, overlap=30).json() | |
return sv.Detections.from_inference(predictions) | |
# Menggunakan InferenceSlicer | |
slicer = sv.InferenceSlicer(callback=callback) | |
# Proses gambar dengan slicer | |
detections = slicer(img) | |
# Filter deteksi yang tumpang tindih (gunakan NMM atau tanpa filter) | |
filtered_detections = detections.filter(strategy=sv.OverlapFilter.NON_MAX_MERGE, iou_threshold=0.5) | |
# Annotasi gambar dengan deteksi | |
annotated_image = sv.BoxAnnotator().annotate(scene=img.copy(), detections=filtered_detections) | |
# Simpan gambar dengan prediksi | |
output_path = "/tmp/prediction.jpg" | |
cv2.imwrite(output_path, annotated_image) | |
# Hapus file sementara | |
os.remove(temp_file_path) | |
# Menghitung jumlah objek per kelas | |
class_count = {} | |
for detection in filtered_detections: | |
class_name = detection.class_name | |
if class_name in class_count: | |
class_count[class_name] += 1 | |
else: | |
class_count[class_name] = 1 | |
# Hasil perhitungan objek | |
result_text = "Jumlah objek per kelas:\n" | |
for class_name, count in class_count.items(): | |
result_text += f"{class_name}: {count} objek\n" | |
return output_path, 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() | |