| import os |
| import sys |
| import numpy as np |
| import tensorflow as tf |
| import mediapy |
| from PIL import Image |
| import gradio as gr |
| from huggingface_hub import snapshot_download |
|
|
| |
| os.system("git clone https://github.com/google-research/frame-interpolation") |
| sys.path.append("frame-interpolation") |
|
|
| |
| from eval import interpolator, util |
|
|
| def load_model(model_name): |
| model = interpolator.Interpolator(snapshot_download(repo_id=model_name), None) |
| return model |
|
|
| model_names = [ |
| "akhaliq/frame-interpolation-film-style", |
| "NimaBoscarino/frame-interpolation_film_l1", |
| "NimaBoscarino/frame_interpolation_film_vgg", |
| ] |
|
|
| models = {model_name: load_model(model_name) for model_name in model_names} |
|
|
| ffmpeg_path = util.get_ffmpeg_path() |
| mediapy.set_ffmpeg(ffmpeg_path) |
|
|
| def resize(width, img): |
| img = Image.fromarray(img) |
| wpercent = (width / float(img.size[0])) |
| hsize = int((float(img.size[1]) * float(wpercent))) |
| img = img.resize((width, hsize), Image.LANCZOS) |
| return img |
|
|
| def resize_and_crop(img_path, size, crop_origin="middle"): |
| img = Image.open(img_path) |
| img = img.resize(size, Image.LANCZOS) |
| return img |
|
|
| def resize_img(img1, img2_path): |
| img_target_size = Image.open(img1) |
| img_to_resize = resize_and_crop( |
| img2_path, |
| (img_target_size.size[0], img_target_size.size[1]), |
| crop_origin="middle" |
| ) |
| img_to_resize.save('resized_img2.png') |
|
|
| def predict(frame1, frame2, times_to_interpolate, model_name): |
| model = models[model_name] |
|
|
| frame1 = resize(1080, frame1) |
| frame2 = resize(1080, frame2) |
|
|
| frame1.save("test1.png") |
| frame2.save("test2.png") |
|
|
| resize_img("test1.png", "test2.png") |
| input_frames = ["test1.png", "resized_img2.png"] |
|
|
| frames = list( |
| util.interpolate_recursively_from_files( |
| input_frames, times_to_interpolate, model)) |
|
|
| mediapy.write_video("out.mp4", frames, fps=30) |
| return "out.mp4" |
|
|
| title = "Sports model" |
| description = "Wechat:Liesle1" |
| article = "" |
| examples = [ |
| ['cat3.jpeg', 'cat4.jpeg', 2, model_names[0]], |
| ['cat1.jpeg', 'cat2.jpeg', 2, model_names[1]], |
| ] |
|
|
| gr.Interface( |
| fn=predict, |
| inputs=[ |
| gr.Image(label="First Frame"), |
| gr.Image(label="Second Frame"), |
| gr.Number(label="Times to Interpolate", value=2), |
| gr.Dropdown(label="Model", choices=model_names), |
| ], |
| outputs=gr.Video(label="Interpolated Frames"), |
| title=title, |
| description=description, |
| article=article, |
| examples=examples, |
| ).launch() |
|
|