将文件夹上传到colab并增强图像
发布于 2020-11-28 23:52:20
值得注意的是,这里有一个受上述答案启发的不同示例
import datetime
import glob
from pathlib import Path
import random
from tkinter import *
from tkinter import filedialog, simpledialog
def generate_augmented_images(args):
"""
Generates augmented versions of images in a particular folder and saves them to a new folder.
Each augmented image has prefix from original PNG image name.
A dialog selects the source folder and another asks augmentation factor.
"""
start_timestr = time.strftime("%Y%m%d-%H%M")
src_data_folder = SRC_DATA_FOLDER
os.chdir(src_data_folder)
root = Tk()
root.withdraw()
src_data_folder = filedialog.askdirectory()
if len(src_data_folder) == 0:
log.info('aborted')
quit(1)
train_datagen = ImageDataGenerator( # 实例化
rescale=1. / 256, # todo check this
rotation_range=15, # 图片随机转动的角度
width_shift_range=0.2, # 图片水平偏移的幅度
height_shift_range=0.2, # don't shift too much vertically to avoid losing top of card
fill_mode='constant',
cval=0, # fill edge pixels with black; default fills with long lines of color
zoom_range=[.9, 1.25], # NOTE zoom >1 minifies, don't zoom in (<1) too much in to avoid losing joker part of card
# horizontal_flip=False,
) # 随机放大或缩小
log.info(f'train_datagen: {train_datagen}')
aug_factor = simpledialog.askinteger('Augmentation factor','Factor by which to augment?')
if aug_factor is None:
log.info('aborted')
quit(0)
base=os.path.split(src_data_folder)[-1]
aug_folder = os.path.join(SRC_DATA_FOLDER,f'{base}-augmented-{start_timestr}')
data_path = os.path.join(src_data_folder, '*.png')
files = glob.glob(data_path) # get list of all PNGs
nsrc=len(files)
ntotal=int(aug_factor*nsrc)
log.info(f'saving {aug_factor}X={ntotal} augmented images to {aug_folder} from {src_data_folder} with {nsrc} samples')
try:
Path(aug_folder).mkdir(parents=True)
except:
log.error(f'{aug_folder} already exists')
quit(1)
i = 0
cv2.namedWindow('original', cv2.WINDOW_NORMAL)
cv2.resizeWindow('original', 600, 600)
cv2.namedWindow('augmented', cv2.WINDOW_NORMAL)
cv2.resizeWindow('augmented', 600, 600)
cv2.moveWindow('augmented',0,600)
nsaved=0
for f in tqdm(files):
showit=nsaved%100==0
img = cv2.imread(f)
x = img_to_array(img)
if showit:
cv2.imshow('original', (1/256.)*x)
x = x.reshape((1,) + x.shape)
i=0
base = os.path.splitext(os.path.split(f)[-1])[0] # e.g. /a/b/c/d/0900111.png gives 0900111
for batch in train_datagen.flow(x, batch_size=1, save_to_dir=aug_folder, save_prefix=base, save_format='png'):
i += 1
nsaved+=1
img_aug=batch[0]
if showit:
cv2.imshow('augmented', img_aug)
k = cv2.waitKey(15) & 0xff
if k == ord('x') or k == ord('q'):
log.info(f'saved {nsaved} augmented images to {aug_folder} from {src_data_folder}')
quit(0)
if i == aug_factor:
break
log.info(f'saved {nsaved} augmented images to {aug_folder} from {src_data_folder}')https://stackoverflow.com/questions/62067609
复制相似问题