test / processors.py
liang001's picture
Upload 2 files
3d452b7 verified
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') # e.g., ['face_swapper', 'lip_syncer']
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 = sort_processors(state_manager.get_item('processors')),
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))