Download training/dataset/utils/face_aug.py from DeepfakeGenome/DeepfakeGenome_Codebase: direct link, hf CLI and curl.
- Browser
- Download file 4.15 kB
-
https://huggingface.co/DeepfakeGenome/DeepfakeGenome_Codebase/resolve/main/training/dataset/utils/face_aug.py
- Command line
-
hf download hf://DeepfakeGenome/DeepfakeGenome_Codebase/training/dataset/utils/face_aug.py
-
curl -L -o face_aug.py https://huggingface.co/DeepfakeGenome/DeepfakeGenome_Codebase/resolve/main/training/dataset/utils/face_aug.py
4.15 kB
| """ | |
| Exposing DeepFake Videos By Detecting Face Warping Artifacts | |
| Yuezun Li, Siwei Lyu | |
| https://arxiv.org/abs/1811.00656 | |
| """ | |
| import cv2 | |
| import numpy as np | |
| from PIL import Image, ImageEnhance | |
| # We only use opencv3 | |
| # if not (cv2.__version__).startswith('3.'): | |
| # raise ValueError('Only opencv 3. is supported!') | |
| ''' | |
| these two function is implemented by myself, may have some errors QAQ | |
| ''' | |
| def change_res(img): | |
| init_res = img.shape[0] | |
| fake_res = np.random.randint(init_res//4, init_res*2) | |
| img = cv2.resize(img, (fake_res, fake_res)) | |
| img = cv2.resize(img, (init_res, init_res)) | |
| return img, fake_res | |
| def aug_one_im(img, | |
| random_transform_args=None, | |
| color_rng=[0.9, 1.1]): | |
| """ | |
| Augment operation for image list | |
| :param images: image list | |
| :param random_transform_args: shape transform arguments | |
| :param color_rng: color transform arguments | |
| :return: | |
| """ | |
| images = [img] | |
| images = aug(images, random_transform_args, color_rng) | |
| return images[0] | |
| def aug(images, | |
| random_transform_args={ | |
| 'rotation_range': 10, | |
| 'zoom_range': 0.05, | |
| 'shift_range': 0.05, | |
| 'random_flip': 0.5, | |
| }, | |
| color_rng=[0.9, 1.1]): | |
| """ | |
| Augment operation for image list | |
| :param images: image list | |
| :param random_transform_args: shape transform arguments | |
| :param color_rng: color transform arguments | |
| :return: | |
| """ | |
| if random_transform_args is not None: # do aug | |
| # Transform | |
| images = random_transform(images, **random_transform_args) | |
| # Color | |
| if color_rng is not None: | |
| for i, im in enumerate(images): | |
| # im = im[:, :, (2, 1, 0)] | |
| im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB) | |
| im = Image.fromarray(np.uint8(im)) | |
| # Brightness | |
| factor = np.random.uniform(color_rng[0], color_rng[1]) | |
| enhancer = ImageEnhance.Brightness(im) | |
| im = enhancer.enhance(factor) | |
| # Contrast | |
| factor = np.random.uniform(color_rng[0], color_rng[1]) | |
| enhancer = ImageEnhance.Contrast(im) | |
| im = enhancer.enhance(factor) | |
| # Color distort | |
| factor = np.random.uniform(color_rng[0], color_rng[1]) | |
| enhancer = ImageEnhance.Color(im) | |
| im = enhancer.enhance(factor) | |
| # Sharpe | |
| factor = np.random.uniform(color_rng[0], color_rng[1]) | |
| enhancer = ImageEnhance.Sharpness(im) | |
| im = enhancer.enhance(factor) | |
| im = np.array(im).astype(np.uint8) | |
| # im = im[:, :, (2, 1, 0)] | |
| im = cv2.cvtColor(im, cv2.COLOR_RGB2BGR) | |
| images[i] = im.copy() | |
| return images | |
| def random_transform(images, rotation_range, zoom_range, shift_range, random_flip): | |
| """ | |
| Random transform images in a list | |
| :param images: | |
| :param rotation_range: | |
| :param zoom_range: | |
| :param shift_range: | |
| :param random_flip: | |
| :return: | |
| """ | |
| h, w = images[0].shape[:2] | |
| rotation = np.random.uniform(-rotation_range, rotation_range) | |
| scale = np.random.uniform(1 - zoom_range, 1 + zoom_range) | |
| tx = np.random.uniform(-shift_range, shift_range) * w | |
| ty = np.random.uniform(-shift_range, shift_range) * h | |
| flip_prob = np.random.random() | |
| for i, image in enumerate(images): | |
| mat = cv2.getRotationMatrix2D((w / 2, h / 2), rotation, scale) | |
| mat[:, 2] += (tx, ty) | |
| result = cv2.warpAffine( | |
| image, mat, (w, h), borderMode=cv2.BORDER_REPLICATE) | |
| if flip_prob < random_flip: | |
| result = result[:, ::-1] | |
| images[i] = result.copy() | |
| return images | |
| if __name__ == "__main__": | |
| dirr = '/FaceXray/dataset/utils/' | |
| test_im = cv2.imread('{}test.png'.format(dirr)) | |
| resample_res, fake_res = change_res(test_im) | |
| cv2.imwrite('{}res_{}.png'.format(dirr, fake_res), resample_res) | |
| aug_im = aug_one_im(test_im) | |
| cv2.imwrite('{}auged.png'.format(dirr), aug_im) | |