Swap faces – Face swapping Opencv with Python (part 5)
We’re going to see in this video the “core” of face swapping, where we finally swap both faces and we can see the first interesting results.
We will focuso on this tutorial on the explanation of only the swapping part, if you want to understand all the process from the beginning, go and check the entire tutorial.
We added on line 20 a black image with the same size and channels as image 2. This is the image where we’re going to put the swapped face later.
img2_new_face = np.zeros_like(img2)
After we warp the triangles from the first image, we reconstruct the first face warped with same dimensions and position as the second face.
# Reconstructing destination face img2_new_face_rect_area = img2_new_face[y: y + h, x: x + w] img2_new_face_rect_area = cv2.add(img2_new_face_rect_area, warped_triangle) img2_new_face[y: y + h, x: x + w] = img2_new_face_rect_area
Once the face is reconstructed combining the triangles we create a mask to select the face and the black are, so that we can remove the original face from img2.
# Face swapped (putting 1st face into 2nd face) img2_face_mask = np.zeros_like(img2_gray) img2_head_mask = cv2.fillConvexPoly(img2_face_mask, convexhull2, 255) img2_face_mask = cv2.bitwise_not(img2_head_mask)
Once we have the mask we extract everything from image 2 except the face.
img2_head_noface = cv2.bitwise_and(img2, img2, mask=img2_face_mask)
We finally add together img2_head_no_face and img2_new_face.
result = cv2.add(img2_head_noface, img2_new_face)
- Train YOLO to detect a custom object (online with free GPU)
- YOLO object detection using Opencv with Python
- Detecting colors (Hsv Color Space) – Opencv with Python
- How to install Python 3 and Opencv 4 on Windows
- Check if two images are equal with Opencv and Python
- YOLO V3 – Install and run Yolo on Nvidia Jetson Nano (with GPU)
- Feature detection (SIFT, SURF, ORB) – OpenCV 3.4 with python 3 Tutorial 25
- How to install Dlib for Python 3 on Windows