Spaces:
Build error
Build error
| import gradio as gr | |
| from roboflow import Roboflow | |
| import tempfile | |
| import os | |
| from sahi.slicing import slice_image | |
| from sahi.postprocess import postprocess_predictions | |
| # Inisialisasi Roboflow (for model path) | |
| rf = Roboflow(api_key="Otg64Ra6wNOgDyjuhMYU") | |
| project = rf.workspace("alat-pelindung-diri").project("nescafe-4base") | |
| model = project.version(16).model | |
| # Fungsi untuk deteksi objek menggunakan SAHI dan Roboflow Model | |
| def detect_objects(image): | |
| # Menyimpan gambar sementara | |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") as temp_file: | |
| image.save(temp_file, format="JPEG") | |
| temp_file_path = temp_file.name | |
| # Slice gambar menjadi potongan-potongan kecil | |
| slice_image_result = slice_image( | |
| image=temp_file_path, | |
| output_file_name="sliced_image", | |
| output_dir="/tmp/sliced/", | |
| slice_height=256, | |
| slice_width=256, | |
| overlap_height_ratio=0.1, | |
| overlap_width_ratio=0.1 | |
| ) | |
| # Mendapatkan path-potongan gambar | |
| sliced_image_paths = slice_image_result['sliced_image_paths'] | |
| # Menyimpan semua prediksi untuk setiap potongan gambar | |
| all_predictions = [] | |
| # Prediksi pada setiap potongan gambar | |
| for sliced_image_path in sliced_image_paths: | |
| predictions = model.predict(image_path=sliced_image_path).json() | |
| all_predictions.extend(predictions['predictions']) | |
| # Postprocess dan gabungkan hasil prediksi | |
| postprocessed_predictions = postprocess_predictions( | |
| predictions=all_predictions, | |
| postprocess_type='NMS', | |
| iou_threshold=0.5 | |
| ) | |
| # Annotate gambar dengan hasil prediksi | |
| annotated_image = model.annotate_image_with_predictions(temp_file_path, postprocessed_predictions) | |
| # Simpan gambar hasil annotasi | |
| output_image_path = "/tmp/prediction.jpg" | |
| annotated_image.save(output_image_path) | |
| # Menghitung jumlah objek per kelas | |
| class_count = {} | |
| for detection in postprocessed_predictions: | |
| class_name = detection['class'] | |
| 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" | |
| # Hapus file sementara | |
| os.remove(temp_file_path) | |
| return output_image_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() | |