-
Notifications
You must be signed in to change notification settings - Fork 226
/
main.py
51 lines (40 loc) · 1.68 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#! /usr/bin/env python
import os
import cv2
import argparse
from face_detection import select_face, select_all_faces
from face_swap import face_swap
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='FaceSwapApp')
parser.add_argument('--src', required=True, help='Path for source image')
parser.add_argument('--dst', required=True, help='Path for target image')
parser.add_argument('--out', required=True, help='Path for storing output images')
parser.add_argument('--warp_2d', default=False, action='store_true', help='2d or 3d warp')
parser.add_argument('--correct_color', default=False, action='store_true', help='Correct color')
parser.add_argument('--no_debug_window', default=False, action='store_true', help='Don\'t show debug window')
args = parser.parse_args()
# Read images
src_img = cv2.imread(args.src)
dst_img = cv2.imread(args.dst)
# Select src face
src_points, src_shape, src_face = select_face(src_img)
# Select dst face
dst_faceBoxes = select_all_faces(dst_img)
if dst_faceBoxes is None:
print('Detect 0 Face !!!')
exit(-1)
output = dst_img
for k, dst_face in dst_faceBoxes.items():
output = face_swap(src_face, dst_face["face"], src_points,
dst_face["points"], dst_face["shape"],
output, args)
dir_path = os.path.dirname(args.out)
if not os.path.isdir(dir_path):
os.makedirs(dir_path)
cv2.imwrite(args.out, output)
##For debug
if not args.no_debug_window:
cv2.imshow("From", dst_img)
cv2.imshow("To", output)
cv2.waitKey(0)
cv2.destroyAllWindows()