From cefd2fa41d06f68f736c4d0c16e1a8a4c9596a58 Mon Sep 17 00:00:00 2001 From: henryruhs Date: Sun, 19 May 2024 16:50:46 +0200 Subject: [PATCH] Set inswapper according to execution provider --- facefusion/execution.py | 4 ++++ facefusion/processors/frame/modules/face_swapper.py | 5 ++--- tests/test_execution.py | 7 ++++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/facefusion/execution.py b/facefusion/execution.py index f266270d..42b0ce10 100644 --- a/facefusion/execution.py +++ b/facefusion/execution.py @@ -18,6 +18,10 @@ def decode_execution_providers(execution_providers : List[str]) -> List[str]: return [ execution_provider for execution_provider, encoded_execution_provider in zip(available_execution_providers, encoded_execution_providers) if any(execution_provider in encoded_execution_provider for execution_provider in execution_providers) ] +def has_execution_provider(execution_provider : str) -> bool: + return execution_provider in onnxruntime.get_available_providers() + + def apply_execution_provider_options(execution_device_id : str, execution_providers : List[str]) -> List[Any]: execution_providers_with_options : List[Any] = [] diff --git a/facefusion/processors/frame/modules/face_swapper.py b/facefusion/processors/frame/modules/face_swapper.py index 99734085..047fa1f7 100755 --- a/facefusion/processors/frame/modules/face_swapper.py +++ b/facefusion/processors/frame/modules/face_swapper.py @@ -9,8 +9,7 @@ from onnx import numpy_helper import facefusion.globals import facefusion.processors.frame.core as frame_processors from facefusion import config, process_manager, logger, wording -from facefusion.common_helper import is_macos -from facefusion.execution import apply_execution_provider_options +from facefusion.execution import has_execution_provider, apply_execution_provider_options from facefusion.face_analyser import get_one_face, get_average_face, get_many_faces, find_similar_faces, clear_face_analyser from facefusion.face_masker import create_static_box_mask, create_occlusion_mask, create_region_mask, clear_face_occluder, clear_face_parser from facefusion.face_helper import warp_face_by_face_landmark_5, paste_back @@ -150,7 +149,7 @@ def set_options(key : Literal['model'], value : Any) -> None: def register_args(program : ArgumentParser) -> None: - if is_macos(): + if has_execution_provider('CoreMLExecutionProvider') or has_execution_provider('OpenVINOExecutionProvider'): face_swapper_model_fallback = 'inswapper_128' else: face_swapper_model_fallback = 'inswapper_128_fp16' diff --git a/tests/test_execution.py b/tests/test_execution.py index acc81a76..eaada164 100644 --- a/tests/test_execution.py +++ b/tests/test_execution.py @@ -1,4 +1,4 @@ -from facefusion.execution import encode_execution_providers, decode_execution_providers, apply_execution_provider_options +from facefusion.execution import encode_execution_providers, decode_execution_providers, has_execution_provider, apply_execution_provider_options def test_encode_execution_providers() -> None: @@ -9,6 +9,11 @@ def test_decode_execution_providers() -> None: assert decode_execution_providers([ 'cpu' ]) == [ 'CPUExecutionProvider' ] +def test_has_execution_provider() -> None: + assert has_execution_provider('CPUExecutionProvider') is True + assert has_execution_provider('InvalidExecutionProvider') is False + + def test_multiple_execution_providers() -> None: execution_provider_with_options =\ [