Spaces:
Runtime error
Runtime error
import inspect | |
import waifuc.action | |
import gradio as gr | |
from .config_manager import ConfigManager | |
class ActionManager: | |
def __init__(self, config_manager: ConfigManager): | |
self.config_manager = config_manager | |
self.action_classes = [ | |
cls for name, cls in inspect.getmembers(waifuc.action, inspect.isclass) | |
if name.endswith("Action") and not inspect.isabstract(cls) | |
] | |
self.action_names = [cls.__name__ for cls in self.action_classes] | |
def get_action_params(self, action_name): | |
action_cls = next(cls for cls in self.action_classes if cls.__name__ == action_name) | |
sig = inspect.signature(action_cls.__init__) | |
return [p for p in sig.parameters.values() if p.name != 'self'] | |
def create_action_param_inputs(self, selected_actions): | |
params = {} | |
for action in selected_actions: | |
params[action] = {} | |
for param in self.get_action_params(action): | |
if param.name == "size" and action == "ResizeAction": | |
params[action][param.name] = gr.Number( | |
label="Resize Size" if self.config_manager.get_config("language") == "en" else "调整大小", | |
value=self.config_manager.get_config("default_resize_size"), | |
info="Image resize dimension" if self.config_manager.get_config("language") == "en" else "图片调整尺寸" | |
) | |
elif param.annotation == int: | |
params[action][param.name] = gr.Number(label=param.name) | |
else: | |
params[action][param.name] = gr.Textbox(label=param.name) | |
return params | |
def instantiate_actions(self, selected_actions, action_params): | |
actions = [] | |
for name in selected_actions: | |
action_cls = next(cls for cls in self.action_classes if cls.__name__ == name) | |
params = action_params.get(name, {}) | |
if name == "FaceCountAction": | |
actions.append(action_cls(params.get("count", 1))) | |
elif name == "AlignMinSizeAction": | |
actions.append(action_cls(params.get("size", 800))) | |
elif name == "ResizeAction": | |
actions.append(action_cls(size=params.get("size", self.config_manager.get_config("default_resize_size")))) | |
else: | |
actions.append(action_cls(**params)) | |
return actions | |