|
- import os
- import sys
- import glob
- import numpy as np
- from tqdm import tqdm
- from PIL import Image, ImageDraw
-
-
- def generate_datasets():
- os.makedirs('./data/generated_eyes', exist_ok=True)
-
- mask_im = Image.new("L", (300,300), (0,))
- draw = ImageDraw.Draw(mask_im)
-
- X, Y = 150, 150
- r = 55
-
- draw.ellipse([(X-r, Y-r), (X+r, Y+r)], fill = 'white', outline ='white')
-
- eyes_tex = [Image.open(path).convert('RGBA') for path in sorted(glob.glob('data/eyes/*.jpg'))]
- for tex in eyes_tex:
- tex.putalpha(mask_im)
- eyes_tex = [tex.crop((95, 95, 205, 205))for tex in eyes_tex]
-
- center_x = 37
- center_y = 39
-
- head_eyes_ori = Image.open('data/head_eyes.png').convert('RGBA')
- head_eyes_ori = np.asarray(head_eyes_ori).copy()
- head_eyes_ori[...,:-1] = 255
- head_eyes_ori = Image.fromarray(head_eyes_ori)
-
- datas = []
-
- pbar = tqdm(range(len(eyes_tex)))
- pbar.set_description('Generating eyes dataset...')
- for id in pbar:
- tex = eyes_tex[id].copy()
- for radius in range(28, 42+1, 2):
- eye = tex.resize((radius, radius))
- head_eyes = head_eyes_ori.copy()
- paste_x = center_x - eye.size[0] // 2
- paste_y = center_y - eye.size[1] // 2
- canvas = Image.new('RGBA', head_eyes.size, (0,0,0,0))
- canvas.paste(eye, (paste_x, paste_y))
- canvas.paste(eye, (head_eyes.size[0] - paste_x - eye.size[0], paste_y))
- out = Image.alpha_composite(head_eyes, canvas)
- out.convert('RGB').save(f'./data/generated_eyes/{str(id).zfill(2)}_{radius}.png')
- out = np.half(np.asarray(out.convert('RGB')) / 255.0).reshape(-1)
- datas.append(out)
- datas = np.stack(datas, -1)
- print('eyes tex shape:', datas.shape)
- np.save('./data/head_eyes.npy', datas)
-
-
- if __name__ == '__main__':
- generate_datasets()
|