import gradio as gr import supervision as sv from ultralytics import YOLO import numpy as np import cv2 # for video to image conversion model = YOLO('yolov8s.pt') byte_tracker = sv.ByteTrack() annotator = sv.BoxAnnotator() def process_video(frame): results = model(frame)[0] detections = sv.Detections.from_ultralytics(results) detections = byte_tracker.update_with_detections(detections) labels = [ f"#{tracker_id} {model.model.names[class_id]} {confidence:0.2f}" for _, _, confidence, class_id, tracker_id in detections ] yield annotator.annotate(scene=frame.copy(), detections=detections, labels=labels) title = "Object Tracking (w/ YOLOv8)" with gr.Blocks() as io: gr.Markdown(f"

{title}

") with gr.Row(): with gr.Column(): input_image = gr.Image(source='webcam', streaming=True) input_button = gr.Button() with gr.Column(): output_image = gr.Image() input_image.change(process_video, inputs=[input_image], outputs=[output_image], show_progress=False) io.queue() io.launch()