| import os |
| os.environ["YOLO_CONFIG_DIR"] = "/tmp" |
|
|
| import torch |
| import gradio as gr |
| import cv2 |
| import numpy as np |
| from ultralytics import YOLO |
| from ultralytics.nn.tasks import DetectionModel |
|
|
| |
| torch.serialization.add_safe_globals([DetectionModel]) |
|
|
| |
| model = YOLO("yolov8n.pt") |
|
|
| def process_frame(frame): |
| img = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) |
| results = model(img)[0] |
|
|
| for box in results.boxes: |
| x1, y1, x2, y2 = map(int, box.xyxy[0]) |
| conf = float(box.conf) |
| cls = int(box.cls) |
| label = model.names[cls] |
| cv2.rectangle(img, (x1, y1), (x2, y2), (0,255,0), 2) |
| cv2.putText(img, f"{label} {conf:.2f}", (x1, y1 - 10), |
| cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0,255,0), 2) |
|
|
| return cv2.cvtColor(img, cv2.COLOR_BGR2RGB) |
|
|
| with gr.Blocks() as demo: |
| gr.Markdown("## ๐ Real-time Object Detection with YOLOv8n") |
| webcam = gr.Image(source="webcam", streaming=True) |
| output = gr.Image() |
| webcam.change(fn=process_frame, inputs=webcam, outputs=output) |
|
|
| demo.launch() |
|
|