In [ ]:
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
import concurrent.futures
import os
In [ ]:
# The variable 'number' gives the numbers of images generated from one image
def datagen(filename, destination, number):
datagen = ImageDataGenerator(
rotation_range=0.2,
width_shift_range=0.2,
height_shift_range=0.2,
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
img = load_img(filename)
x = img_to_array(img)
x = x.reshape((1,) + x.shape)
filename = filename.split('/')[1]
i = 0
for batch in datagen.flow(x, batch_size=1,
save_to_dir=destination, save_prefix=filename, save_format='jpg'):
i += 1
if i > number:
break
In [ ]:
# The source directory of original images
photoDir = 'middle_hair_man_train/'
photoList = os.listdir(photoDir)
# The target directory to save images generated
direction = 'middle_hair_man_train/'
# Use multi-threading to speed up
with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor:
for photo in photoList:
try:
filename = photoDir+photo
executor.submit(datagen, filename, direction, 20)
except Exception as exc:
print(exc)