Spaces:
Runtime error
Runtime error
| import torch | |
| from ultralytics import YOLO | |
| import gradio as gr | |
| from PIL import Image | |
| import numpy as np | |
| class ObjectDetectorV8: | |
| def __init__(self): | |
| # Load YOLOv8 model | |
| self.model = YOLO('yolov8n.pt') | |
| def count_objects(self, image): | |
| """ | |
| Detect and count objects in the input image. | |
| """ | |
| # Pastikan gambar tidak None | |
| if image is None: | |
| return None, {} | |
| # Convert PIL Image to numpy array jika perlu | |
| image_np = np.array(image) | |
| # Perform object detection | |
| results = self.model(image_np) | |
| # Extract results | |
| detections = results[0].boxes.data.cpu().numpy() | |
| labels = detections[:, 5].astype(int) | |
| # Convert labels to human-readable names dan count occurrences | |
| label_names = [self.model.names[label] for label in labels] | |
| count_dict = {label: label_names.count(label) for label in set(label_names)} | |
| # Annotate image with bounding boxes | |
| annotated_image = results[0].plot() | |
| return Image.fromarray(annotated_image), count_dict | |
| def live_object_detection(self, video): | |
| """ | |
| Perform live object detection on video stream | |
| """ | |
| # Pastikan video tidak None | |
| if video is None: | |
| return None, {} | |
| # Perform object detection | |
| results = self.model(video) | |
| # Extract results | |
| detections = results[0].boxes.data.cpu().numpy() | |
| labels = detections[:, 5].astype(int) | |
| # Convert labels to human-readable names dan count occurrences | |
| label_names = [self.model.names[label] for label in labels] | |
| count_dict = {label: label_names.count(label) for label in set(label_names)} | |
| # Annotate image with bounding boxes | |
| annotated_image = results[0].plot() | |
| return annotated_image, count_dict | |
| # Inisialisasi detector sekali | |
| detector = ObjectDetectorV8() | |
| # Buat antarmuka Gradio | |
| def create_interface(): | |
| image_interface = gr.Interface( | |
| fn=detector.count_objects, | |
| inputs=gr.Image(type="pil", label="Upload Gambar"), | |
| outputs=[ | |
| gr.Image(label="Objek Terdeteksi"), | |
| gr.JSON(label="Jumlah Objek") | |
| ], | |
| title="Pendeteksi Objek dengan YOLOv8", | |
| description="Unggah gambar untuk mendeteksi dan menghitung objek" | |
| ) | |
| video_interface = gr.Interface( | |
| fn=detector.live_object_detection, | |
| inputs=gr.Image(sources=["webcam"], type="numpy", label="Input Webcam"), | |
| outputs=[ | |
| gr.Image(label="Deteksi Langsung"), | |
| gr.JSON(label="Jumlah Objek") | |
| ], | |
| title="Deteksi Objek Langsung", | |
| description="Gunakan webcam untuk deteksi objek real-time" | |
| ) | |
| demo = gr.TabbedInterface( | |
| [image_interface, video_interface], | |
| ["Deteksi Gambar", "Deteksi Langsung"] | |
| ) | |
| return demo | |
| # Buat dan luncurkan interface | |
| iface = create_interface() | |
| if __name__ == "__main__": | |
| iface.launch() |