davidpengg's picture
update examples
25b43b2
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()