import gradio as gr import time import cv2 # opencv2 package for python. import torch from pytube import YouTube from PIL import Image import numpy as np from transformers import pipeline segmentor = pipeline("image-segmentation", model="facebook/detr-resnet-50-panoptic") device = 'cuda' if torch.cuda.is_available() else 'cpu' URL = "https://www.youtube.com/watch?v=6NBwbKMyzEE" #URL to parse 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)) tog = 0 return vid_cap,frame_num,frame_count,frame_fps,tog 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,gr.Markdown.update("""
Status: Playing 😁
""") def tog_off(): return 0,gr.Markdown.update("""
Status: Stopped 💀
""") 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) frame = Image.fromarray(frame) output = segmentor(frame) for i in range(len(output)): mask = np.array(output[i]['mask'])/255 img = np.array(frame) img2 = np.zeros_like(img) img2[:,:,0] = mask img2[:,:,1] = mask img2[:,:,2] = mask seg_mix=img/img2 #seg_out=img2.astype(np.unit8) results=seg_mix.astype(np.uint8) if pl_tog ==1: cur+=1 else: cur = cur return results,cur with gr.Blocks() as app: gr.Markdown("""

Testing

stuff

""") play_state = gr.Markdown("""""") with gr.Row(): with gr.Column(): youtube_url = gr.Textbox(label="YouTube URL",value=f"{URL}") load_button = gr.Button("Load Video") output_win = gr.Video() with gr.Column(): with gr.Row(): cur_frame = gr.Number(label="Current Frame") fps_frames = gr.Number(label="Video FPS",interactive=False) total_frames = gr.Number(label="Total Frames",interactive=False) #run_button = gr.Button() with gr.Row(): bk = gr.Button("<") pl = gr.Button("Play") st = gr.Button("Stop") fw = gr.Button(">") det_win = gr.Image(source="webcam", streaming=True) with gr.Row(): pl_tog=gr.Number(visible=False) ins_cnt=gr.Number(visible=False) pl.click(tog_on,None,[pl_tog,play_state],show_progress=False) st.click(tog_off,None,[pl_tog,play_state],show_progress=False) pl_tog.change(pl_fn,[output_win,cur_frame,total_frames,fps_frames,pl_tog],[det_win,cur_frame],show_progress=False) cur_frame.change(pl_fn,[output_win,cur_frame,total_frames,fps_frames,pl_tog],[det_win,cur_frame],show_progress=False) bk.click(bk_fn,[cur_frame],cur_frame,show_progress=False) fw.click(fw_fn,[cur_frame,total_frames],cur_frame,show_progress=False) load_button.click(load,youtube_url,[output_win,cur_frame,total_frames,fps_frames,pl_tog]) #run_button.click(vid_play, [output_win,cur_frame], det_win) app.queue(concurrency_count=10).launch()