Spaces:
Runtime error
Runtime error
import torch | |
import gradio as gr | |
from pytube import YouTube | |
from pdb import set_trace | |
from colorizer import colorize_vid | |
from dcgan import * | |
# ================================ | |
# EXAMPLE_FPS = "Same as original" | |
examples = [ | |
["examples/1_falcon.mp4", "modelv2", "Same as original"], # 4:21 | |
# ["examples/2_mughal.mp4", "modelv1", 12], # 4:30 | |
["examples/3_wizard.mp4", "modelv1", 6], # 7 min | |
# ["examples/4_elgar.mp4", "modelv2", 6] # 22 min | |
] | |
model_choices = [ | |
"modelv2", | |
"modelv1", | |
] | |
loaded_models = {} | |
for model_weights in model_choices: | |
model = torch.load(f"{model_weights}.pth", map_location=torch.device('cpu')) | |
model.eval() # also done in colorizer | |
loaded_models[model_weights] = model | |
def colorize_video(path_video, chosen_model, chosen_fps, start='', end=''): | |
if not path_video: | |
return | |
return colorize_vid( | |
path_video, | |
loaded_models[chosen_model], | |
chosen_fps, | |
start, | |
end | |
) | |
def download_youtube(url): | |
try: | |
yt = YouTube(url) | |
streams = yt.streams.filter( | |
progressive=True, | |
file_extension='mp4').order_by('resolution') | |
return streams[0].download() | |
except BaseException: | |
raise Exception("Invalid URL or Video Unavailable") | |
app = gr.Blocks() | |
with app: | |
gr.Markdown("# <p align='center'>Movie and Video Colorization</p>") | |
gr.Markdown( | |
""" | |
<p style='text-align: center'> | |
Colorize black-and-white movies or videos with a DCGAN-based model! | |
<br> | |
Project by David Peng, Annie Lin, Adam Zapatka, and Maggy Lambo. | |
<p> | |
""" | |
) | |
gr.Markdown("### Step 1: Choose a YouTube video (or upload locally below)") | |
youtube_url = gr.Textbox(label="YouTube Video URL") | |
youtube_url_btn = gr.Button(value="Extract YouTube Video") | |
with gr.Row(): | |
gr.Markdown("### Step 2: Adjust settings") | |
gr.Markdown("### Step 3: Hit \"Colorize\"") | |
with gr.Row(): | |
bw_video = gr.Video(label="Black-and-White Video") | |
colorized_video = gr.Video(label="Colorized Video") | |
with gr.Row(): | |
with gr.Column(): | |
with gr.Row(): | |
start_time = gr.Text( | |
label="Start Time (hh:mm:ss or blank for original)", value='') | |
end_time = gr.Text( | |
label="End Time (hh:mm:ss or blank for original)", value='') | |
with gr.Column(): | |
bw_video_btn = gr.Button(value="Colorize", variant="primary") | |
with gr.Row(): | |
with gr.Column(): | |
model_dropdown = gr.Dropdown( | |
model_choices, | |
value=model_choices[0], | |
label="Model" | |
) | |
fps_dropdown = gr.Dropdown( | |
[3, 6, 12, 24, 30, "Same as original"], | |
value=6, | |
label="FPS of Colorized Video" | |
) | |
gr.Markdown( | |
""" | |
#### Colorization Notes | |
- Leave start, end times blank to colorize the entire video | |
- To lower colorization time, you can decrease FPS, resolution, or duration | |
- *modelv2* tends to color videos orange and sepia | |
- *modelv1* tends to color videos with a variety of colors | |
- *modelv2* and *modelv1* use the same modified DCGAN architecture but differ in results because of randomization in training | |
#### More Reading | |
- <a href='https://towardsdatascience.com/colorizing-black-white-images-with-u-net-and-conditional-gan-a-tutorial-81b2df111cd8' target='_blank'>Colorizing black & white images with U-Net and conditional GAN</a> | |
- <a href='https://arxiv.org/abs/1803.05400' target='_blank'>Image Colorization with Generative Adversarial Networks</a> | |
""" | |
) | |
with gr.Column(): | |
gr.Examples( | |
examples=examples, | |
inputs=[bw_video, model_dropdown, fps_dropdown], | |
outputs=[colorized_video], | |
fn=colorize_video, | |
cache_examples=True, | |
) | |
youtube_url_btn.click( | |
download_youtube, | |
inputs=youtube_url, | |
outputs=bw_video | |
) | |
bw_video_btn.click( | |
colorize_video, | |
inputs=[bw_video, model_dropdown, fps_dropdown, start_time, end_time], | |
outputs=colorized_video | |
) | |
app.launch() | |