Spaces:
Build error
Build error
import gradio as gr | |
from transformers import pipeline | |
import io, base64 | |
from PIL import Image | |
import numpy as np | |
import tensorflow as tf | |
import mediapy | |
import os | |
import sys | |
from huggingface_hub import snapshot_download | |
from image_tools.sizes import resize_and_crop | |
os.system("git clone https://github.com/google-research/frame-interpolation") | |
sys.path.append("frame-interpolation") | |
from eval import interpolator, util | |
ffmpeg_path = util.get_ffmpeg_path() | |
mediapy.set_ffmpeg(ffmpeg_path) | |
model = snapshot_download(repo_id="akhaliq/frame-interpolation-film-style") | |
interpolator = interpolator.Interpolator(model, None) | |
def resize(width, img): | |
basewidth = width | |
img = Image.open(img) | |
wpercent = (basewidth / float(img.size[0])) | |
hsize = int((float(img.size[1]) * float(wpercent))) | |
img = img.resize((basewidth, hsize), Image.ANTIALIAS) | |
return img | |
def resize_img(img1, img2, output_name): | |
img_target_size = Image.open(img1) | |
img_to_resize = resize_and_crop( | |
img2, | |
(img_target_size.size[0], img_target_size.size[1]), | |
crop_origin="middle" | |
) | |
img_to_resize.save(output_name) | |
def generate_interpolation(frame1, frame2, frame3, frame4, frame5, frame6, times_to_interpolate, fps): | |
frame1 = resize(256, frame1) | |
frame2 = resize(256, frame2) | |
frame3 = resize(256, frame3) | |
frame4 = resize(256, frame4) | |
frame5 = resize(256, frame5) | |
frame6 = resize(256, frame6) | |
frame1.save("test1.png") | |
frame2.save("test2.png") | |
frame3.save("test3.png") | |
frame4.save("test4.png") | |
frame5.save("test5.png") | |
frame6.save("test6.png") | |
resize_img("test1.png", "test2.png", "resized_img2.png") | |
resize_img("test1.png", "test3.png", "resized_img3.png") | |
resize_img("test1.png", "test4.png", "resized_img4.png") | |
resize_img("test1.png", "test5.png", "resized_img5.png") | |
resize_img("test1.png", "test6.png", "resized_img6.png") | |
input_frames = ["test1.png", "resized_img2.png", "resized_img3.png", "resized_img4.png", "resized_img5.png", "resized_img6.png"] | |
frames = list(util.interpolate_recursively_from_files(input_frames, times_to_interpolate, interpolator)) | |
mediapy.write_video("out.mp4", frames, fps=fps) | |
return "out.mp4" | |
demo = gr.Blocks() | |
with demo: | |
with gr.Row(): | |
# Left column (inputs) | |
with gr.Column(): | |
with gr.Row(): | |
# upload images and get image strings | |
input_arr = [ | |
gr.inputs.Image(type='filepath', label="Frame 1"), | |
gr.inputs.Image(type='filepath', label="Frame 2"), | |
gr.inputs.Image(type='filepath', label="Frame 3"), | |
gr.inputs.Image(type='filepath', label="Frame 4"), | |
gr.inputs.Image(type='filepath', label="Frame 5"), | |
gr.inputs.Image(type='filepath', label="Frame 6"), | |
] | |
with gr.Row(): | |
input_arr.append(gr.inputs.Slider(minimum=2, maximum=10, step=1, label="Times to Interpolate")) | |
input_arr.append(gr.inputs.Slider(minimum=15, maximum=60, step=1, label="fps")) | |
# Rows of instructions & buttons | |
with gr.Row(): | |
gr.Markdown("After uploading some images, hit the 'Generate Video' button to create a short video!") | |
button_gen_video = gr.Button("Generate Video") | |
# Right column (outputs) | |
with gr.Column(): | |
output_interpolation = gr.Video(label="Generated Video") | |
# Bind functions to buttons | |
button_gen_video.click(fn=generate_interpolation, inputs=input_arr, outputs=output_interpolation) | |
demo.launch(debug=True, enable_queue=True) | |