| from typing import List, Optional
|
|
|
| import gradio
|
|
|
| from facefusion import state_manager, wording
|
| from facefusion.filesystem import get_file_name, resolve_file_paths
|
| from facefusion.processors.core import get_processors_modules
|
| from facefusion.uis.core import register_ui_component
|
|
|
| PROCESSORS_CHECKBOX_GROUP : Optional[gradio.CheckboxGroup] = None
|
|
|
|
|
| label_map = {
|
| "face_swapper": "人脸替换",
|
| "face_enhancer": "人脸增强",
|
| "frame_enhancer": "帧率增强",
|
| "lip_syncer": "口形同步",
|
| "emotion_analyzer": "情绪分析",
|
| "face_debugger": "人脸调试",
|
| "face_masker": "人脸遮罩",
|
| "face_landmarker": "特征点检测",
|
| "age_modifier": "年龄修改",
|
| "deep_swapper": "深度替换",
|
| "face_editor": "脸部编辑",
|
| "expression_restorer": "表情还原",
|
| "frame_colorizer": "画面上色"
|
| }
|
|
|
|
|
| def render() -> None:
|
| global PROCESSORS_CHECKBOX_GROUP
|
| processors = state_manager.get_item('processors')
|
| all_processors = sort_processors(processors)
|
| choices = [(label_map.get(p, p), p) for p in all_processors]
|
| PROCESSORS_CHECKBOX_GROUP = gradio.CheckboxGroup(
|
| label = wording.get('uis.processors_checkbox_group'),
|
|
|
| choices = choices,
|
| value = state_manager.get_item('processors')
|
| )
|
| register_ui_component('processors_checkbox_group', PROCESSORS_CHECKBOX_GROUP)
|
|
|
|
|
| def listen() -> None:
|
| PROCESSORS_CHECKBOX_GROUP.change(update_processors, inputs = PROCESSORS_CHECKBOX_GROUP, outputs = PROCESSORS_CHECKBOX_GROUP)
|
|
|
|
|
| def update_processors(processors : List[str]) -> gradio.CheckboxGroup:
|
| for processor_module in get_processors_modules(state_manager.get_item('processors')):
|
| if hasattr(processor_module, 'clear_inference_pool'):
|
| processor_module.clear_inference_pool()
|
|
|
| for processor_module in get_processors_modules(processors):
|
| if not processor_module.pre_check():
|
| return gradio.CheckboxGroup()
|
|
|
| state_manager.set_item('processors', processors)
|
| sorted_processors = sort_processors(state_manager.get_item('processors'))
|
| choices = [(label_map.get(p, p), p) for p in sorted_processors]
|
| return gradio.CheckboxGroup(
|
| value = state_manager.get_item('processors'),
|
| choices = choices
|
| )
|
|
|
|
|
| def sort_processors(processors : List[str]) -> List[str]:
|
| available_processors = [ get_file_name(file_path) for file_path in resolve_file_paths('facefusion/processors/modules') ]
|
| return sorted(available_processors, key = lambda processor : processors.index(processor) if processor in processors else len(processors))
|
|
|