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 # Clone the repository and add the path os.system("git clone https://github.com/google-research/frame-interpolation") sys.path.append("frame-interpolation") # Import after appending the path 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]), # set width and height to match img1 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()