File size: 2,257 Bytes
db12400
b127fd6
5e44253
 
 
 
bbf9a90
 
db12400
5e44253
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54d06ee
55c9cad
 
5e44253
 
 
55c9cad
5e44253
 
55c9cad
6a04784
5e44253
 
55c9cad
5e44253
 
 
 
db12400
9e2421a
 
 
6a04784
e38439c
4b109d4
dafd4d1
7a6bc70
 
54d06ee
4b109d4
55c9cad
dafd4d1
6a04784
db12400
54d06ee
5cd1978
9e2421a
f90f58c
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
import gradio as gr
import os
import cv2
import numpy as np
from moviepy.editor import *

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 = []
    # Opens the Video file
    cap= cv2.VideoCapture(video_in)
    fps = cap.get(cv2.CAP_PROP_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()

    return frames, fps

def create_video(frames, fps):
    
    clip = ImageSequenceClip(frames, fps=fps)
    clip.write_videofile("movie.mp4", fps=fps)
    
    return 'movie.mp4'


def infer(prompt,video_in, seed_in, trim_value):
    
    break_vid = get_frames(video_in)
    
    frames_list= break_vid[0]
    fps = break_vid[1]
    n_frame = trim_value*fps
    result_frames = []
    
    for i in frames_list[0: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)
    
    return final_vid


with gr.Blocks(css='style.css') as demo:
    with gr.Column(elem_id="col-container"):
        with gr.Row():
            with gr.Column():
                prompt = gr.Textbox(placeholder="enter prompt", show_label=False)
                video_inp = gr.Video(label="Video source", source="upload", type="filepath")
                
            with gr.Column():
                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=2, maximum=10, step=1, value=2)
                video_out = gr.Video(label="Pix2pix video result")
                submit_btn = gr.Button("Generate Pix2Pix video")

    inputs = [prompt,video_inp,seed_inp, trim_in]
    outputs = [video_out]
    
    submit_btn.click(infer, inputs, outputs)

demo.launch().queue(max_size=12)