|
import cv2 |
|
import dlib |
|
|
|
def swap_faces(image_path1, image_path2, output_path): |
|
# Load the images |
|
img1 = cv2.imread(image_path1) |
|
img2 = cv2.imread(image_path2) |
|
|
|
# Initialize the face detector |
|
detector = dlib.get_frontal_face_detector() |
|
|
|
# Detect faces in both images |
|
faces1 = detector(img1) |
|
faces2 = detector(img2) |
|
|
|
# Swap the faces |
|
for face1, face2 in zip(faces1, faces2): |
|
x1, y1, w1, h1 = face1.left(), face1.top(), face1.width(), face1.height() |
|
x2, y2, w2, h2 = face2.left(), face2.top(), face2.width(), face2.height() |
|
|
|
# Extract the face regions |
|
face1_region = img1[y1:y1 + h1, x1:x1 + w1] |
|
face2_region = img2[y2:y2 + h2, x2:x2 + w2] |
|
|
|
# Swap the faces |
|
img1[y1:y1 + h1, x1:x1 + w1] = face2_region |
|
img2[y2:y2 + h2, x2:x2 + w2] = face1_region |
|
|
|
# Save the output images |
|
cv2.imwrite(output_path + "_1.jpg", img1) |
|
cv2.imwrite(output_path + "_2.jpg", img2) |
|
|
|
if __name__ == "__main__": |
|
image1_path = "path/to/your/image1.jpg" |
|
image2_path = "path/to/your/image2.jpg" |
|
output_path = "path/to/output/directory/output" |
|
|
|
swap_faces(image1_path, image2_path, output_path) |
|
|