Spaces:
Sleeping
Sleeping
File size: 3,664 Bytes
074d43b ca3acbe 074d43b 633b96b 074d43b 633b96b 074d43b 633b96b 074d43b 633b96b ca3acbe 633b96b 074d43b 633b96b e0cc1fd 633b96b ca3acbe e0cc1fd ca3acbe 633b96b ca3acbe 633b96b ca3acbe 074d43b 633b96b aaed971 633b96b 074d43b 633b96b 074d43b 633b96b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
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("""<center><h7>Status: Playing 😁</h7></center>""")
def tog_off():
return 0,gr.Markdown.update("""<center><h7>Status: Stopped 💀</h7></center>""")
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("""<center><h1>Testing</h1><h4>stuff</h4></center>""")
play_state = gr.Markdown("""<right><h7></h7></right>""")
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() |