Spaces:
Build error
Build error
| from faceSwap import * | |
| import os, imageio, shutil, sys | |
| from PIL import Image | |
| # get face landmarks | |
| gif = sys.argv[1] | |
| face, landmarks2 = read_im_and_landmarks(sys.argv[2]) | |
| mask = get_face_mask(face, landmarks2) | |
| # extract frames | |
| currFrame = Image.open(gif) | |
| if not os.path.exists('swap'): | |
| os.makedirs('swap') | |
| frameNum = 0 | |
| while currFrame: | |
| currFrame.convert('RGB').save('swap/%s.jpg' % frameNum) | |
| frameNum += 1 | |
| try: | |
| currFrame.seek(frameNum) | |
| except EOFError: | |
| break; | |
| # faceswap all frames (adapted from faceswap.py) | |
| for frame in range(frameNum): | |
| try: | |
| im1, landmarks1 = read_im_and_landmarks('swap/%s.jpg' % frame) | |
| M = transformation_from_points(landmarks1[ALIGN_POINTS], | |
| landmarks2[ALIGN_POINTS]) | |
| warped_mask = warp_im(mask, M, im1.shape) | |
| combined_mask = numpy.max([get_face_mask(im1, landmarks1), warped_mask], | |
| axis=0) | |
| warped_face = warp_im(face, M, im1.shape) | |
| warped_corrected_face = correct_colours(im1, warped_face, landmarks1) | |
| output_im = im1 * (1.0 - combined_mask) + warped_corrected_face * combined_mask | |
| cv2.imwrite('swap/%s.jpg' % frame, output_im) | |
| except: | |
| pass | |
| frames = [] | |
| for frame in range(frameNum): | |
| frames.append(imageio.imread('swap/%s.jpg' % frame)) | |
| imageio.mimsave('processed/' + sys.argv[3] + '.gif', frames, fps=20) | |
| shutil.rmtree('swap') |