From 4380e7a1541d00a33bb21ba68ef30bd80d5eef0b Mon Sep 17 00:00:00 2001 From: henryruhs Date: Fri, 20 Dec 2024 16:39:41 +0100 Subject: [PATCH] Add region mask for deep swapper --- facefusion/processors/modules/deep_swapper.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/facefusion/processors/modules/deep_swapper.py b/facefusion/processors/modules/deep_swapper.py index cd5cd5e0..71706cbd 100755 --- a/facefusion/processors/modules/deep_swapper.py +++ b/facefusion/processors/modules/deep_swapper.py @@ -14,7 +14,7 @@ from facefusion.common_helper import create_int_metavar from facefusion.download import conditional_download_hashes, conditional_download_sources, resolve_download_url_by_provider from facefusion.face_analyser import get_many_faces, get_one_face from facefusion.face_helper import paste_back, warp_face_by_face_landmark_5 -from facefusion.face_masker import create_occlusion_mask, create_static_box_mask +from facefusion.face_masker import create_occlusion_mask, create_region_mask, create_static_box_mask from facefusion.face_selector import find_similar_faces, sort_and_filter_faces from facefusion.face_store import get_reference_faces from facefusion.filesystem import in_directory, is_image, is_video, list_directory, resolve_relative_path, same_file_extension @@ -330,6 +330,11 @@ def swap_face(target_face : Face, temp_vision_frame : VisionFrame) -> VisionFram crop_vision_frame = normalize_crop_frame(crop_vision_frame) crop_vision_frame = conditional_match_frame_color(crop_vision_frame_raw, crop_vision_frame) crop_masks.append(prepare_crop_mask(crop_source_mask, crop_target_mask)) + + if 'region' in state_manager.get_item('face_mask_types'): + region_mask = create_region_mask(crop_vision_frame, state_manager.get_item('face_mask_regions')) + crop_masks.append(region_mask) + crop_mask = numpy.minimum.reduce(crop_masks).clip(0, 1) paste_vision_frame = paste_back(temp_vision_frame, crop_vision_frame, crop_mask, affine_matrix) return paste_vision_frame