Spaces:
Build error
Build error
Duplicate from johngoad/frame-interpolation
Browse filesCo-authored-by: JohnGoad <[email protected]>
- .gitattributes +31 -0
- README.md +13 -0
- app.py +97 -0
- cat1.jpeg +0 -0
- cat2.jpeg +0 -0
- cat3.jpeg +0 -0
- cat4.jpeg +0 -0
- packages.txt +1 -0
- requirements.txt +12 -0
.gitattributes
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
5 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
6 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
7 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
8 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
9 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
10 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
11 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
12 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
13 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
14 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
15 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
16 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
17 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
18 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
20 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
21 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
22 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
23 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
24 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
25 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
26 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
27 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
28 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
29 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
30 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
31 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
README.md
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: Frame Interpolation
|
3 |
+
emoji: 🐢
|
4 |
+
colorFrom: blue
|
5 |
+
colorTo: gray
|
6 |
+
sdk: gradio
|
7 |
+
sdk_version: 3.1.4
|
8 |
+
app_file: app.py
|
9 |
+
pinned: false
|
10 |
+
duplicated_from: johngoad/frame-interpolation
|
11 |
+
---
|
12 |
+
|
13 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces#reference
|
app.py
ADDED
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
|
3 |
+
os.system("git clone https://github.com/google-research/frame-interpolation")
|
4 |
+
import sys
|
5 |
+
|
6 |
+
sys.path.append("frame-interpolation")
|
7 |
+
import numpy as np
|
8 |
+
import tensorflow as tf
|
9 |
+
import mediapy
|
10 |
+
from PIL import Image
|
11 |
+
from eval import interpolator, util
|
12 |
+
import gradio as gr
|
13 |
+
|
14 |
+
from huggingface_hub import snapshot_download
|
15 |
+
|
16 |
+
from image_tools.sizes import resize_and_crop
|
17 |
+
|
18 |
+
|
19 |
+
def load_model(model_name):
|
20 |
+
model = interpolator.Interpolator(snapshot_download(repo_id=model_name), None)
|
21 |
+
|
22 |
+
return model
|
23 |
+
|
24 |
+
|
25 |
+
model_names = [
|
26 |
+
"akhaliq/frame-interpolation-film-style",
|
27 |
+
"NimaBoscarino/frame-interpolation_film_l1",
|
28 |
+
"NimaBoscarino/frame_interpolation_film_vgg",
|
29 |
+
]
|
30 |
+
|
31 |
+
models = {model_name: load_model(model_name) for model_name in model_names}
|
32 |
+
|
33 |
+
ffmpeg_path = util.get_ffmpeg_path()
|
34 |
+
mediapy.set_ffmpeg(ffmpeg_path)
|
35 |
+
|
36 |
+
|
37 |
+
def resize(width, img):
|
38 |
+
basewidth = width
|
39 |
+
img = Image.open(img)
|
40 |
+
wpercent = (basewidth / float(img.size[0]))
|
41 |
+
hsize = int((float(img.size[1]) * float(wpercent)))
|
42 |
+
img = img.resize((basewidth, hsize), Image.ANTIALIAS)
|
43 |
+
return img
|
44 |
+
|
45 |
+
|
46 |
+
def resize_img(img1, img2):
|
47 |
+
img_target_size = Image.open(img1)
|
48 |
+
img_to_resize = resize_and_crop(
|
49 |
+
img2,
|
50 |
+
(img_target_size.size[0], img_target_size.size[1]), # set width and height to match img1
|
51 |
+
crop_origin="middle"
|
52 |
+
)
|
53 |
+
img_to_resize.save('resized_img2.png')
|
54 |
+
|
55 |
+
|
56 |
+
def predict(frame1, frame2, times_to_interpolate, model_name):
|
57 |
+
model = models[model_name]
|
58 |
+
|
59 |
+
frame1 = resize(256, frame1)
|
60 |
+
frame2 = resize(256, frame2)
|
61 |
+
|
62 |
+
frame1.save("test1.png")
|
63 |
+
frame2.save("test2.png")
|
64 |
+
|
65 |
+
resize_img("test1.png", "test2.png")
|
66 |
+
input_frames = ["test1.png", "resized_img2.png"]
|
67 |
+
|
68 |
+
frames = list(
|
69 |
+
util.interpolate_recursively_from_files(
|
70 |
+
input_frames, times_to_interpolate, model))
|
71 |
+
|
72 |
+
mediapy.write_video("out.mp4", frames, fps=30)
|
73 |
+
return "out.mp4"
|
74 |
+
|
75 |
+
|
76 |
+
title = "frame-interpolation"
|
77 |
+
description = "Gradio demo for FILM: Frame Interpolation for Large Scene Motion. To use it, simply upload your images and add the times to interpolate number or click on one of the examples to load them. Read more at the links below."
|
78 |
+
article = "<p style='text-align: center'><a href='https://film-net.github.io/' target='_blank'>FILM: Frame Interpolation for Large Motion</a> | <a href='https://github.com/google-research/frame-interpolation' target='_blank'>Github Repo</a></p>"
|
79 |
+
examples = [
|
80 |
+
['cat3.jpeg', 'cat4.jpeg', 2, model_names[0]],
|
81 |
+
['cat1.jpeg', 'cat2.jpeg', 2, model_names[1]],
|
82 |
+
]
|
83 |
+
|
84 |
+
gr.Interface(
|
85 |
+
predict,
|
86 |
+
[
|
87 |
+
gr.inputs.Image(type='filepath'),
|
88 |
+
gr.inputs.Image(type='filepath'),
|
89 |
+
gr.inputs.Slider(minimum=2, maximum=4, step=1),
|
90 |
+
gr.inputs.Dropdown(choices=model_names, default=model_names[0])
|
91 |
+
],
|
92 |
+
"playable_video",
|
93 |
+
title=title,
|
94 |
+
description=description,
|
95 |
+
article=article,
|
96 |
+
examples=examples
|
97 |
+
).launch(enable_queue=True)
|
cat1.jpeg
ADDED
![]() |
cat2.jpeg
ADDED
![]() |
cat3.jpeg
ADDED
![]() |
cat4.jpeg
ADDED
![]() |
packages.txt
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
ffmpeg
|
requirements.txt
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
tensorflow==2.6.2 # The latest should include tensorflow-gpu
|
2 |
+
tensorflow-datasets==4.4.0
|
3 |
+
tensorflow-addons==0.15.0
|
4 |
+
absl-py==0.12.0
|
5 |
+
gin-config==0.5.0
|
6 |
+
parameterized==0.8.1
|
7 |
+
mediapy==1.0.3
|
8 |
+
scikit-image==0.19.1
|
9 |
+
apache-beam==2.34.0
|
10 |
+
google-cloud-bigquery-storage==1.1.0 # Suppresses a harmless error from beam
|
11 |
+
natsort==8.1.0
|
12 |
+
image-tools
|