import importlib from types import ModuleType from typing import Any, List from facefusion import logger, translator from facefusion.exit_helper import hard_exit PROCESSORS_METHODS =\ [ 'get_inference_pool', 'clear_inference_pool', 'register_args', 'apply_args', 'get_common_modules', 'pre_check', 'pre_process', 'post_process', 'process_frame' ] def load_processor_module(processor : str) -> Any: try: processor_module = importlib.import_module('facefusion.processors.modules.' + processor + '.core') for method_name in PROCESSORS_METHODS: if not hasattr(processor_module, method_name): raise NotImplementedError except ModuleNotFoundError as exception: logger.error(translator.get('processor_not_loaded').format(processor = processor), __name__) logger.debug(exception.msg, __name__) hard_exit(1) except NotImplementedError: logger.error(translator.get('processor_not_implemented').format(processor = processor), __name__) hard_exit(1) return processor_module def get_processors_modules(processors : List[str]) -> List[ModuleType]: processor_modules = [] for processor in processors: processor_module = load_processor_module(processor) processor_modules.append(processor_module) return processor_modules