""" Crop images to prepare for training """ import click from app.settings import types from app.utils import click_utils from app.settings import app_cfg as cfg """ Filter Q-Down Q-Up Speed NEAREST ⭐⭐⭐⭐⭐ BOX ⭐ ⭐⭐⭐⭐ BILINEAR ⭐ ⭐ ⭐⭐⭐ HAMMING ⭐⭐ ⭐⭐⭐ BICUBIC ⭐⭐⭐ ⭐⭐⭐ ⭐⭐ LANCZOS ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐ """ @click.command() @click.option('-i', '--input', 'opt_dir_in', required=True, help='Input directory') @click.option('-o', '--output', 'opt_dir_out', required=True, help='Output directory') @click.option('-e', '--ext', 'opt_glob_ext', default='jpg', type=click.Choice(['jpg', 'png']), help='File glob ext') @click.option('--size', 'opt_size', type=(int, int), default=(256, 256), help='Output image size (square)') @click.option('--method', 'opt_scale_method', type=click.Choice(['LANCZOS', 'BICUBIC', 'HAMMING', 'BILINEAR', 'BOX', 'NEAREST']), default='LANCZOS', help='Scaling method to use') @click.pass_context def cli(ctx, opt_dir_in, opt_dir_out, opt_glob_ext, opt_size, opt_scale_method): """Crop, mirror images""" import os from os.path import join from pathlib import Path from glob import glob from tqdm import tqdm from PIL import Image, ImageOps, ImageFilter from app.utils import logger_utils, file_utils, im_utils # ------------------------------------------------- # init log = logger_utils.Logger.getLogger() methods = { 'LANCZOS': Image.LANCZOS, 'BICUBIC': Image.BICUBIC, 'HAMMING': Image.HAMMING, 'BILINEAR': Image.BILINEAR, 'BOX': Image.BOX, 'NEAREST': Image.NEAREST } # ------------------------------------------------- # process here # get list of files to process fp_ims = glob(join(opt_dir_in, '*.{}'.format(opt_glob_ext))) log.info('processing {:,} files'.format(len(fp_ims))) # set scale method scale_method = methods[opt_scale_method] # ensure output dir exists file_utils.mkdirs(opt_dir_out) # resize and save images for fp_im in tqdm(fp_ims): im = Image.open(fp_im) im = ImageOps.fit(im, opt_size, method=scale_method, centering=(0.5, 0.5)) fp_out = join(opt_dir_out, Path(fp_im).name) im.save(fp_out)