Spaces:
Running
on
A10G
Running
on
A10G
File size: 4,451 Bytes
db12400 b127fd6 5e44253 6770682 5e44253 bbf9a90 db12400 5e44253 b8efd0d c292509 6770682 7bb51ba c512cd9 b8efd0d 5e44253 0e2a0ec 5e44253 c512cd9 6770682 5e44253 6770682 5e44253 c512cd9 5e44253 54d06ee c512cd9 55c9cad 5e44253 3e4418e 6770682 936c431 0e2a0ec 936c431 6770682 5e44253 c8537f5 6770682 936c431 6a04784 5e44253 55c9cad 5e44253 c512cd9 6770682 db12400 b8efd0d 9e2421a b8efd0d 6a04784 e38439c 9e5183b d891024 54d06ee 4b109d4 0e2a0ec 7fa6f4c d891024 6a04784 6770682 b8efd0d 6770682 54d06ee 6770682 9e2421a f90f58c 6770682 db12400 9e2421a |
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 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
import gradio as gr
import os
import cv2
import numpy as np
from moviepy.editor import *
from share_btn import community_icon_html, loading_icon_html, share_js
token = os.environ.get('HF_TOKEN')
pix2pix = gr.Blocks.load(name="spaces/fffiloni/instruct-pix2pix-clone", api_key=token)
def get_frames(video_in):
frames = []
#resize the video
clip = VideoFileClip(video_in)
#check fps
if clip.fps > 30:
print("vide rate is over 30, resetting to 30")
clip_resized = clip.resize(height=512)
clip_resized.write_videofile("video_resized.mp4", fps=30)
else:
print("video rate is OK")
clip_resized = clip.resize(height=512)
clip_resized.write_videofile("video_resized.mp4", fps=clip.fps)
print("video resized to 512 height")
# Opens the Video file with CV2
cap= cv2.VideoCapture("video_resized.mp4")
fps = cap.get(cv2.CAP_PROP_FPS)
print("video fps: " + str(fps))
i=0
while(cap.isOpened()):
ret, frame = cap.read()
if ret == False:
break
cv2.imwrite('kang'+str(i)+'.jpg',frame)
frames.append('kang'+str(i)+'.jpg')
i+=1
cap.release()
cv2.destroyAllWindows()
print("broke the video into frames")
return frames, fps
def create_video(frames, fps):
print("building video result")
clip = ImageSequenceClip(frames, fps=fps)
clip.write_videofile("movie.mp4", fps=fps)
return 'movie.mp4'
def infer(prompt,video_in, seed_in, trim_value):
print(prompt)
break_vid = get_frames(video_in)
frames_list= break_vid[0]
fps = break_vid[1]
n_frame = int(trim_value*fps)
if n_frame >= len(frames_list):
print("video is shorter than the cut value")
n_frame = len(frames_list)
result_frames = []
print("set stop frames to: " + str(n_frame))
for i in frames_list[0:int(n_frame)]:
pix2pix_img = pix2pix(prompt,5.5,1.5,i,15,"",512,512,seed_in,fn_index=0)
images = [os.path.join(pix2pix_img[0], img) for img in os.listdir(pix2pix_img[0])]
result_frames.append(images[0])
print("frame " + i + ": done;")
final_vid = create_video(result_frames, fps)
print("finished !")
return final_vid, gr.Group.update(visible=True)
title = """
<div style="text-align: center; max-width: 700px; margin: 0 auto;">
<div
style="
display: inline-flex;
align-items: center;
gap: 0.8rem;
font-size: 1.75rem;
"
>
<h1 style="font-weight: 900; margin-bottom: 7px; margin-top: 5px;">
Pix2Pix Video
</h1>
</div>
<p style="margin-bottom: 10px; font-size: 94%">
Apply Instruct Pix2Pix Diffusion to a video
</p>
</div>
"""
article = """
<div class="footer">
<p>
Follow <a href="https://twitter.com/fffiloni" target="_blank">Sylvain Filoni</a> for future updates 🤗
</p>
</div>
"""
with gr.Blocks(css='style.css') as demo:
with gr.Column(elem_id="col-container"):
gr.HTML(title)
with gr.Row():
with gr.Column():
prompt = gr.Textbox(label="Prompt", placeholder="enter prompt", show_label=False, elem_id="prompt-in")
video_inp = gr.Video(label="Video source", source="upload", type="filepath", elem_id="input-vid")
with gr.Row():
seed_inp = gr.Slider(minimum=0, maximum=10000, step=1, value=123456)
trim_in = gr.Slider(label="Cut video at (s)", minimun=1, maximum=3, step=1, value=1)
with gr.Column():
video_out = gr.Video(label="Pix2pix video result", elem_id="video-output")
submit_btn = gr.Button("Generate Pix2Pix video")
with gr.Group(elem_id="share-btn-container", visible=False) as share_group:
community_icon = gr.HTML(community_icon_html)
loading_icon = gr.HTML(loading_icon_html)
share_button = gr.Button("Share to community", elem_id="share-btn")
gr.HTML(article)
inputs = [prompt,video_inp,seed_inp, trim_in]
outputs = [video_out, share_group]
submit_btn.click(infer, inputs, outputs)
share_button.click(None, [], [], _js=share_js)
demo.launch().queue(max_size=12)
|