ViDove / entries /app.py
Eason Lu
debug& add gradio web interface
d0f2803
raw
history blame
3.15 kB
import __init_lib_path
import gradio as gr
from src.task import Task
import logging
from yaml import Loader, Dumper, load, dump
import os
from pathlib import Path
from datetime import datetime
import shutil
from uuid import uuid4
launch_config = "./configs/local_launch.yaml"
task_config = './configs/task_config.yaml'
def init(output_type, src_lang, tgt_lang, domain):
launch_cfg = load(open(launch_config), Loader=Loader)
task_cfg = load(open(task_config), Loader=Loader)
# overwrite config file
task_cfg["source_lang"] = src_lang
task_cfg["target_lang"] = tgt_lang
task_cfg["field"] = domain
if "Video File" in output_type:
task_cfg["output_type"]["video"] = True
else:
task_cfg["output_type"]["video"] = False
if "Bilingual" in output_type:
task_cfg["output_type"]["bilingual"] = True
else:
task_cfg["output_type"]["bilingual"] = False
if ".ass output" in output_type:
task_cfg["output_type"]["subtitle"] = "ass"
else:
task_cfg["output_type"]["subtitle"] = "srt"
# initialize dir
local_dir = Path(launch_cfg['local_dump'])
if not local_dir.exists():
local_dir.mkdir(parents=False, exist_ok=False)
# get task id
task_id = str(uuid4())
# create locak dir for the task
task_dir = local_dir.joinpath(f"task_{task_id}")
task_dir.mkdir(parents=False, exist_ok=False)
task_dir.joinpath("results").mkdir(parents=False, exist_ok=False)
# logging setting
logfmt = "%(asctime)s (%(module)s:%(lineno)d) %(levelname)s: %(message)s"
logging.basicConfig(level=logging.INFO, format=logfmt, handlers=[
logging.FileHandler(
"{}/{}_{}.log".format(task_dir, f"task_{task_id}", datetime.now().strftime("%m%d%Y_%H%M%S")),
'w', encoding='utf-8')])
return task_id, task_dir, task_cfg
def process_input(video_file, youtube_link, src_lang, tgt_lang, domain, output_type):
task_id, task_dir, task_cfg = init(output_type, src_lang, tgt_lang, domain)
if youtube_link:
task = Task.fromYoutubeLink(youtube_link, task_id, task_dir, task_cfg)
task.run()
return task.result
elif video_file is not None:
task = Task.fromVideoFile(video_file, task_id, task_dir, task_cfg)
task.run()
return task.result
else:
return None
demo = gr.Interface(fn=process_input,
inputs=[
gr.components.Video(label="Upload a video"),
gr.components.Textbox(label="Or enter a YouTube URL"),
gr.components.Dropdown(choices=["EN", "ZH"], label="Select Source Language"),
gr.components.Dropdown(choices=["ZH", "EN"], label="Select Target Language"),
gr.components.Dropdown(choices=["General", "SC2"], label="Select Domain"),
gr.CheckboxGroup(["Video File", "Bilingual", ".ass output"], label="Output Settings", info="What do you want?"),
],
outputs=[
gr.components.Video(label="Processed Video")
],
title="ViDove: video translation toolkit demo",
description="Upload a video or enter a YouTube URL."
)
if __name__ == "__main__":
demo.launch()