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()