|
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(): |
|
|
|
|
|
with gr.Column(): |
|
|
|
with gr.Row(): |
|
|
|
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")) |
|
|
|
|
|
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") |
|
|
|
|
|
|
|
with gr.Column(): |
|
output_interpolation = gr.Video(label="Generated Video") |
|
|
|
|
|
button_gen_video.click(fn=generate_interpolation, inputs=input_arr, outputs=output_interpolation) |
|
|
|
demo.launch(debug=True, enable_queue=True) |
|
|