import gradio as gr import time import cv2 # opencv2 package for python. import torch from pytube import YouTube from ultralyticsplus import YOLO, render_result model = YOLO('ultralyticsplus/yolov8s') device = 'cuda' if torch.cuda.is_available() else 'cpu' URL = "https://www.youtube.com/watch?v=dQw4w9WgXcQ" #URL to parse # set model parameters model.overrides['conf'] = 0.25 # NMS confidence threshold model.overrides['iou'] = 0.45 # NMS IoU threshold model.overrides['agnostic_nms'] = False # NMS class-agnostic model.overrides['max_det'] = 1000 # maximum number of detections per image model.to(device) def load(URL): yt = YouTube(URL) vid_cap = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().last().download(filename="tmp.mp4") global player player = cv2.VideoCapture(vid_cap) frame_num = int(player.get(cv2.CAP_PROP_POS_FRAMES)) frame_count = int(player.get(cv2.CAP_PROP_FRAME_COUNT)) frame_fps = (player.get(cv2.CAP_PROP_FPS)) #process.release() return vid_cap,frame_num,frame_count,frame_fps def vid_play(cap,frame_num): assert player.isOpened() # Make sure that their is a stream. player.set(cv2.CAP_PROP_POS_FRAMES, int(frame_num)) ret, frame_bgr = player.read(int(frame_num)) frame = cv2.cvtColor(frame_bgr, cv2.COLOR_BGR2RGB) results = model.predict(frame) render = render_result(model=model, image=frame, result=results[0]) return render def fw_fn(cur,last): next = cur+1 if next > last: next = last return next def bk_fn(cur): next = cur-1 if next < 0: next = 0 return next def tog_on(): return 1 def tog_off(): return 0 def pl_fn(cap,cur,last,fps,pl_tog): player.set(cv2.CAP_PROP_POS_FRAMES, cur) ret, frame_bgr = player.read(cur) frame = cv2.cvtColor(frame_bgr, cv2.COLOR_BGR2RGB) results = model.predict(frame) render = render_result(model=model, image=frame, result=results[0]) if pl_tog ==1: cur+=1 else: cur = cur return render,cur with gr.Blocks() as app: gr.Markdown("""