From 872094a1fd63a29437011229f5d67480ff1717a7 Mon Sep 17 00:00:00 2001 From: henryruhs Date: Wed, 31 Jan 2024 18:25:58 +0100 Subject: [PATCH] Rename to lip syncer --- facefusion/processors/frame/choices.py | 4 ++-- facefusion/processors/frame/globals.py | 8 ++++---- .../frame/modules/{lip_sync.py => lip_syncer.py} | 14 +++++++++----- facefusion/processors/frame/typings.py | 2 +- facefusion/wording.py | 2 +- tests/test_cli.py | 2 +- 6 files changed, 18 insertions(+), 14 deletions(-) rename facefusion/processors/frame/modules/{lip_sync.py => lip_syncer.py} (95%) diff --git a/facefusion/processors/frame/choices.py b/facefusion/processors/frame/choices.py index cdd3d7b4..99010e19 100755 --- a/facefusion/processors/frame/choices.py +++ b/facefusion/processors/frame/choices.py @@ -1,13 +1,13 @@ from typing import List from facefusion.common_helper import create_int_range -from facefusion.processors.frame.typings import FaceDebuggerItem, FaceEnhancerModel, FaceSwapperModel, FrameEnhancerModel, LipSyncModel +from facefusion.processors.frame.typings import FaceDebuggerItem, FaceEnhancerModel, FaceSwapperModel, FrameEnhancerModel, LipSyncerModel face_debugger_items : List[FaceDebuggerItem] = [ 'bbox', 'kps', 'face-mask', 'score', 'age', 'gender' ] face_enhancer_models : List[FaceEnhancerModel] = [ 'codeformer', 'gfpgan_1.2', 'gfpgan_1.3', 'gfpgan_1.4', 'gpen_bfr_256', 'gpen_bfr_512', 'restoreformer_plus_plus' ] face_swapper_models : List[FaceSwapperModel] = [ 'blendswap_256', 'inswapper_128', 'inswapper_128_fp16', 'simswap_256', 'simswap_512_unofficial' ] frame_enhancer_models : List[FrameEnhancerModel] = [ 'real_esrgan_x2plus', 'real_esrgan_x4plus', 'real_esrnet_x4plus' ] -lip_sync_models : List[LipSyncModel] = [ 'wav2lip' ] +lip_syncer_models : List[LipSyncerModel] = [ 'wav2lip' ] face_enhancer_blend_range : List[int] = create_int_range(0, 100, 1) frame_enhancer_blend_range : List[int] = create_int_range(0, 100, 1) diff --git a/facefusion/processors/frame/globals.py b/facefusion/processors/frame/globals.py index 4290bd3b..5fa85395 100755 --- a/facefusion/processors/frame/globals.py +++ b/facefusion/processors/frame/globals.py @@ -1,11 +1,11 @@ from typing import List, Optional -from facefusion.processors.frame.typings import FaceSwapperModel, FaceEnhancerModel, FrameEnhancerModel, FaceDebuggerItem, LipSyncModel +from facefusion.processors.frame.typings import FaceDebuggerItem, FaceEnhancerModel, FaceSwapperModel, FrameEnhancerModel, LipSyncerModel -face_swapper_model : Optional[FaceSwapperModel] = None +face_debugger_items : Optional[List[FaceDebuggerItem]] = None face_enhancer_model : Optional[FaceEnhancerModel] = None -lip_sync_model : Optional[LipSyncModel] = None face_enhancer_blend : Optional[int] = None +face_swapper_model : Optional[FaceSwapperModel] = None frame_enhancer_model : Optional[FrameEnhancerModel] = None frame_enhancer_blend : Optional[int] = None -face_debugger_items : Optional[List[FaceDebuggerItem]] = None +lip_syncer_model : Optional[LipSyncerModel] = None diff --git a/facefusion/processors/frame/modules/lip_sync.py b/facefusion/processors/frame/modules/lip_syncer.py similarity index 95% rename from facefusion/processors/frame/modules/lip_sync.py rename to facefusion/processors/frame/modules/lip_syncer.py index 1cf83cf0..39fc7489 100755 --- a/facefusion/processors/frame/modules/lip_sync.py +++ b/facefusion/processors/frame/modules/lip_syncer.py @@ -34,7 +34,7 @@ MODELS : ModelSet =\ { 'url': 'https://huggingface.co/bluefoxcreation/Wav2lip-Onnx/resolve/main/wav2lip_gan.onnx?download=true', 'path': resolve_relative_path('../.assets/models/wav2lip_gan.onnx'), - }, + } } OPTIONS : Optional[OptionsWithModel] = None @@ -61,7 +61,7 @@ def get_options(key : Literal['model']) -> Any: if OPTIONS is None: OPTIONS =\ { - 'model': MODELS[frame_processors_globals.lip_sync_model] + 'model': MODELS[frame_processors_globals.lip_syncer_model] } return OPTIONS.get(key) @@ -73,12 +73,12 @@ def set_options(key : Literal['model'], value : Any) -> None: def register_args(program : ArgumentParser) -> None: - program.add_argument('--lip-sync-model', help = wording.get('help.lip_sync_model_help'), default = config.get_str_value('frame_processors.lip_sync_model', 'wav2lip'), choices = frame_processors_choices.lip_sync_models) + program.add_argument('--lip-syncer-model', help = wording.get('help.lip_syncer_model'), default = config.get_str_value('frame_processors.lip_syncer_model', 'wav2lip'), choices = frame_processors_choices.lip_syncer_models) def apply_args(program : ArgumentParser) -> None: args = program.parse_args() - frame_processors_globals.lip_sync_model = args.lip_sync_model + frame_processors_globals.lip_syncer_model = args.lip_syncer_model def pre_check() -> bool: @@ -132,7 +132,11 @@ def lip_sync(audio_frame : AudioFrame, target_face : Face, temp_frame : VisionFr crop_frame, affine_matrix = warp_face_by_bbox(temp_frame, target_face.bbox, (96, 96)) audio_frame = prepare_audio_frame(audio_frame) crop_frame = prepare_crop_frame(crop_frame) - crop_frame = frame_processor.run(None, {'vid' : crop_frame, 'mel' : audio_frame})[0] + crop_frame = frame_processor.run(None, + { + 'vid' : crop_frame, + 'mel' : audio_frame + })[0] crop_frame = normalize_crop_frame(crop_frame) crop_mask = create_static_box_mask(crop_frame.shape[:2][::-1], 0.1, (50, 0, 0, 0)) paste_frame = paste_back(temp_frame, crop_frame, crop_mask, affine_matrix) diff --git a/facefusion/processors/frame/typings.py b/facefusion/processors/frame/typings.py index 90074c12..af0ce944 100644 --- a/facefusion/processors/frame/typings.py +++ b/facefusion/processors/frame/typings.py @@ -4,4 +4,4 @@ FaceDebuggerItem = Literal['bbox', 'kps', 'face-mask', 'score', 'age', 'gender'] FaceEnhancerModel = Literal['codeformer', 'gfpgan_1.2', 'gfpgan_1.3', 'gfpgan_1.4', 'gpen_bfr_256', 'gpen_bfr_512', 'restoreformer_plus_plus'] FaceSwapperModel = Literal['blendswap_256', 'inswapper_128', 'inswapper_128_fp16', 'simswap_256', 'simswap_512_unofficial'] FrameEnhancerModel = Literal['real_esrgan_x2plus', 'real_esrgan_x4plus', 'real_esrnet_x4plus'] -LipSyncModel = Literal['wav2lip'] +LipSyncerModel = Literal['wav2lip'] diff --git a/facefusion/wording.py b/facefusion/wording.py index bf80300a..b8d7ed11 100755 --- a/facefusion/wording.py +++ b/facefusion/wording.py @@ -97,9 +97,9 @@ WORDING : Dict[str, Any] =\ 'face_enhancer_model': 'choose the model responsible for enhancing the face', 'face_enhancer_blend': 'blend the enhanced into the previous face', 'face_swapper_model': 'choose the model responsible for swapping the face', - 'lip_sync_model': 'choose the model responsible for lip syncing', 'frame_enhancer_model': 'choose the model responsible for enhancing the frame', 'frame_enhancer_blend': 'blend the enhanced into the previous frame', + 'lip_syncer_model': 'choose the model responsible for the lip syncing', # uis 'ui_layouts': 'Launch a single or multiple UI layouts (choices: {choices}, ...)' }, diff --git a/tests/test_cli.py b/tests/test_cli.py index 65d5ab19..cc2450c6 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -33,7 +33,7 @@ def test_image_to_video() -> None: def test_audio_to_video() -> None: - commands = [ sys.executable, 'run.py', '--frame-processors', 'lip_sync', '-s', '.assets/examples/source.mp3', '-t', '.assets/examples/target-240p.mp4', '-o', '.assets/examples', '--trim-frame-end', '10', '--headless' ] + commands = [ sys.executable, 'run.py', '--frame-processors', 'lip_syncer', '-s', '.assets/examples/source.mp3', '-t', '.assets/examples/target-240p.mp4', '-o', '.assets/examples', '--trim-frame-end', '10', '--headless' ] run = subprocess.run(commands, stdout = subprocess.PIPE, stderr = subprocess.STDOUT) assert run.returncode == 0