diff options
Diffstat (limited to 'megapixels/datasets/commands/resize.py')
| -rw-r--r-- | megapixels/datasets/commands/resize.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/megapixels/datasets/commands/resize.py b/megapixels/datasets/commands/resize.py new file mode 100644 index 00000000..5e2d31aa --- /dev/null +++ b/megapixels/datasets/commands/resize.py @@ -0,0 +1,81 @@ +""" +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) + |
