use_irregular_holes_make_dataset.py 3.4 KB
Newer Older
H
hypox64 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13
import numpy as np
import cv2
import os
from torchvision import transforms
from PIL import Image
import random
import sys
sys.path.append("..")
import util.image_processing as impro
from util import util,mosaic
import datetime

ir_mask_path = './Irregular_Holes_mask'
H
hypox64 已提交
14 15
img_dir ='/media/hypo/Hypoyun/Datasets/other/face512' 
MOD = 'mosaic' #HD | pix2pix | mosaic
H
hypox64 已提交
16
MASK = False # if True, output mask,too
H
hypox64 已提交
17
BOUNDING = True # if true the mosaic size will be more big
H
hypox64 已提交
18
suffix = '_1'
H
hypox64 已提交
19
output_dir = os.path.join('./datasets_img',MOD)
H
HypoX64 已提交
20
util.makedirs(output_dir)
H
hypox64 已提交
21

H
HypoX64 已提交
22
if MOD == 'HD':
H
hypox64 已提交
23 24 25 26
    train_A_path = os.path.join(output_dir,'train_A')
    train_B_path = os.path.join(output_dir,'train_B')
    util.makedirs(train_A_path)
    util.makedirs(train_B_path)
H
HypoX64 已提交
27
elif MOD == 'pix2pix':
H
hypox64 已提交
28 29
    train_path = os.path.join(output_dir,'train')
    util.makedirs(train_path)
H
hypox64 已提交
30 31 32 33 34 35 36
elif MOD == 'mosaic':
    ori_path = os.path.join(output_dir,'ori')
    mosaic_path = os.path.join(output_dir,'mosaic')
    mask_path = os.path.join(output_dir,'mask')
    util.makedirs(ori_path)
    util.makedirs(mosaic_path)
    util.makedirs(mask_path)
H
hypox64 已提交
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
if MASK:
    mask_path = os.path.join(output_dir,'mask')
    util.makedirs(mask_path)

transform_mask = transforms.Compose([
     transforms.RandomResizedCrop(size=512, scale=(0.5,1)),
     transforms.RandomHorizontalFlip(),
 ])

transform_img = transforms.Compose([

     transforms.Resize(512),
     transforms.RandomCrop(512)
 ])

mask_names = os.listdir(ir_mask_path)
H
hypox64 已提交
53 54 55
img_paths = util.Traversal(img_dir)
img_paths = util.is_imgs(img_paths)
print('Find images:',len(img_paths))
H
hypox64 已提交
56

H
hypox64 已提交
57
for i,img_path in enumerate(img_paths,1):
H
HypoX64 已提交
58
    try:        
H
hypox64 已提交
59
        img = Image.open(img_path)
H
hypox64 已提交
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
        img = transform_img(img)
        img = np.array(img)
        img = img[...,::-1]

        if BOUNDING:
            mosaic_area = 0
            while mosaic_area < 16384:
                mask = Image.open(os.path.join(ir_mask_path,random.choices(mask_names)[0]))
                mask = transform_mask(mask)
                mask = np.array(mask)
                mosaic_area = impro.mask_area(mask)
            mosaic_img = mosaic.addmosaic_random(img, mask,'bounding') 
        else:
            mask = Image.open(os.path.join(ir_mask_path,random.choices(mask_names)[0]))
            mask = transform_mask(mask)
            mask = np.array(mask)
            mosaic_img = mosaic.addmosaic_random(img, mask)
H
HypoX64 已提交
77 78 79 80
                 
        if MOD == 'HD':#[128:384,128:384,:] --->256
            cv2.imwrite(os.path.join(train_A_path,'%05d' % i+suffix+'.jpg'), mosaic_img)
            cv2.imwrite(os.path.join(train_B_path,'%05d' % i+suffix+'.jpg'), img)
H
hypox64 已提交
81 82 83
            if MASK:
                cv2.imwrite(os.path.join(mask_path,'%05d' % i+suffix+'.png'), mask)
        elif MOD == 'pix2pix':
H
hypox64 已提交
84
            merge_img = impro.makedataset(mosaic_img, img)
H
HypoX64 已提交
85
            cv2.imwrite(os.path.join(train_path,'%05d' % i+suffix+'.jpg'), merge_img)
H
hypox64 已提交
86 87 88
        elif MOD == 'mosaic':
            cv2.imwrite(os.path.join(mosaic_path,'%05d' % i+suffix+'.jpg'), mosaic_img)
            cv2.imwrite(os.path.join(ori_path,'%05d' % i+suffix+'.jpg'), img)
H
HypoX64 已提交
89
            cv2.imwrite(os.path.join(mask_path,'%05d' % i+suffix+'.png'), mask)
H
hypox64 已提交
90 91

        print('\r','Proc/all:'+str(i)+'/'+str(len(img_paths)),util.get_bar(100*i/len(img_paths),num=40),end='')
H
hypox64 已提交
92
    except Exception as e:
H
hypox64 已提交
93
        print(img_path,e)