Spaces:
Running
Running
from typing import Dict, Optional, Any | |
import importlib | |
import sys | |
import cv2 | |
import gradio | |
import DeepFakeAI.globals | |
from DeepFakeAI import metadata, wording | |
from DeepFakeAI.typing import Frame | |
from DeepFakeAI.uis.typing import Component, ComponentName | |
COMPONENTS: Dict[ComponentName, Component] = {} | |
UI_LAYOUT_METHODS =\ | |
[ | |
'pre_check', | |
'render', | |
'listen' | |
] | |
def launch() -> None: | |
with gradio.Blocks(theme = get_theme(), title = metadata.get('name') + ' ' + metadata.get('version')) as ui: | |
for ui_layout in DeepFakeAI.globals.ui_layouts: | |
ui_layout_module = load_ui_layout_module(ui_layout) | |
ui_layout_module.pre_check() | |
ui_layout_module.render() | |
ui_layout_module.listen() | |
ui.launch(debug=True, show_api=True) | |
def load_ui_layout_module(ui_layout : str) -> Any: | |
try: | |
ui_layout_module = importlib.import_module('DeepFakeAI.uis.layouts.' + ui_layout) | |
for method_name in UI_LAYOUT_METHODS: | |
if not hasattr(ui_layout_module, method_name): | |
raise NotImplementedError | |
except ModuleNotFoundError: | |
sys.exit(wording.get('ui_layout_not_loaded').format(ui_layout = ui_layout)) | |
except NotImplementedError: | |
sys.exit(wording.get('ui_layout_not_implemented').format(ui_layout = ui_layout)) | |
return ui_layout_module | |
def get_theme() -> gradio.Theme: | |
return gradio.themes.Soft( | |
primary_hue = gradio.themes.colors.red, | |
secondary_hue = gradio.themes.colors.gray, | |
font = gradio.themes.GoogleFont('Inter') | |
).set( | |
background_fill_primary = '*neutral_50', | |
block_label_text_size = '*text_sm', | |
block_title_text_size = '*text_sm' | |
) | |
def get_component(name: ComponentName) -> Optional[Component]: | |
if name in COMPONENTS: | |
return COMPONENTS[name] | |
return None | |
def register_component(name: ComponentName, component: Component) -> None: | |
COMPONENTS[name] = component | |
def normalize_frame(frame : Frame) -> Frame: | |
return cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) | |