import gradio as gr import numpy as np from PIL import Image, ImageDraw from ultralytics import YOLO # Muat model YOLO model = YOLO('best.pt') # Pastikan path ini benar # Fungsi untuk melakukan deteksi jerawat def detect_acne(image): # Mengonversi gambar PIL ke format numpy img_np = np.array(image) # Deteksi jerawat results = model.predict(source=img_np, imgsz=640) # Menggambar kotak deteksi pada gambar draw = ImageDraw.Draw(image) for result in results: boxes = result.boxes if boxes is not None and len(boxes.xyxy) > 0: for i, box in enumerate(boxes.xyxy): x1, y1, x2, y2 = box[:4] conf = boxes.conf[i] if boxes.conf is not None and len(boxes.conf) > i else None # Menggambar kotak dan confidence score draw.rectangle([x1, y1, x2, y2], outline="red", width=2) if conf is not None: draw.text((x1, y1 - 10), f'{conf:.2f}', fill="red") return image # Membuat interface Gradio interface = gr.Interface(fn=detect_acne, inputs=gr.Image(type="pil"), outputs="image", title="Deteksi Jerawat dengan YOLOv8") # Meluncurkan aplikasi dengan URL publik dan port yang tersedia if __name__ == "__main__": try: # Coba meluncurkan aplikasi pada port 7861 interface.launch(server_port=7861, share=True) # Mengaktifkan URL publik untuk dibagikan except OSError: # Jika port 7861 tidak tersedia, jalankan pada port acak yang tersedia interface.launch(server_name="0.0.0.0", share=True) # Mengaktifkan URL publik dengan port acak