import time import gradio as gr import cv2 as cv from ultralytics import YOLO def load_yolo_model(): return YOLO() def process_video(model, cap): while cap.isOpened(): ret, image = cap.read() if not ret: break start = time.perf_counter() results = model(image) end = time.perf_counter() segments = results[0].plot() cv.putText(segments, f'FPS: {int(1 // (end - start))}', (10, 30), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) cv.imshow('Image Segmentation', segments) key = cv.waitKey(1) if key & 0xFF == ord('q'): break cap.release() cv.destroyAllWindows() def segment_video(uploaded_video): model = load_yolo_model() cap = cv.VideoCapture(uploaded_video.name) process_video(model, cap) def segment_webcam(): model = load_yolo_model() cap = cv.VideoCapture(0) process_video(model, cap) def wrapper_for_segment_video(uploaded_video): segment_video(uploaded_video) iface = gr.Interface( fn=None, inputs=[gr.inputs.Checkbox(label="Segment Video"), gr.inputs.Checkbox(label="Segment Webcam"), gr.inputs.File(label="Upload Video")], outputs=None, live=True ) def update_fn(segment_video_checkbox, segment_webcam_checkbox, uploaded_video): if segment_video_checkbox and uploaded_video: iface.fn = wrapper_for_segment_video iface.args = [uploaded_video] elif segment_webcam_checkbox: iface.fn = segment_webcam iface.args = [] else: iface.fn = None iface.update(update_fn) iface.launch()