From b5e5e52ddde357642f60004e56e1dc120c320c1a Mon Sep 17 00:00:00 2001 From: Kenneth Estanislao Date: Tue, 10 Sep 2024 23:35:19 +0800 Subject: [PATCH] Merge pull request #566 from pereiraroland26/main Added support for multiple faces --- modules/processors/frame/face_swapper.py | 27 +++++++----------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/modules/processors/frame/face_swapper.py b/modules/processors/frame/face_swapper.py index 6fd0760..caf493e 100644 --- a/modules/processors/frame/face_swapper.py +++ b/modules/processors/frame/face_swapper.py @@ -101,30 +101,19 @@ def process_frame_v2(temp_frame: Frame, temp_frame_path: str = "") -> Frame: for target_face in frame['faces']: temp_frame = swap_face(source_face, target_face, temp_frame) else: - detected_faces = get_many_faces(temp_frame) + many_faces = get_many_faces(temp_frame) if modules.globals.many_faces: - if detected_faces: - source_face = default_source_face() - for target_face in detected_faces: + source_face = default_source_face() + if many_faces: + for target_face in many_faces: temp_frame = swap_face(source_face, target_face, temp_frame) elif not modules.globals.many_faces: - if detected_faces: - if len(detected_faces) <= len(modules.globals.simple_map['target_embeddings']): - for detected_face in detected_faces: - closest_centroid_index, _ = find_closest_centroid(modules.globals.simple_map['target_embeddings'], detected_face.normed_embedding) + if many_faces: + for target_face in many_faces: + closest_centroid_index, _ = find_closest_centroid(modules.globals.simple_map['target_embeddings'], target_face.normed_embedding) - temp_frame = swap_face(modules.globals.simple_map['source_faces'][closest_centroid_index], detected_face, temp_frame) - else: - detected_faces_centroids = [] - for face in detected_faces: - detected_faces_centroids.append(face.normed_embedding) - i = 0 - for target_embedding in modules.globals.simple_map['target_embeddings']: - closest_centroid_index, _ = find_closest_centroid(detected_faces_centroids, target_embedding) - - temp_frame = swap_face(modules.globals.simple_map['source_faces'][i], detected_faces[closest_centroid_index], temp_frame) - i += 1 + temp_frame = swap_face(modules.globals.simple_map['source_faces'][closest_centroid_index], target_face, temp_frame) return temp_frame