import argparse import cv2 import glob import os def main(args): txt_file = open(args.meta_info, 'w') for folder, root in zip(args.input, args.root): img_paths = sorted(glob.glob(os.path.join(folder, '*'))) for img_path in img_paths: status = True if args.check: # read the image once for check, as some images may have errors try: img = cv2.imread(img_path) except (IOError, OSError) as error: print(f'Read {img_path} error: {error}') status = False if img is None: status = False print(f'Img is None: {img_path}') if status: # get the relative path img_name = os.path.relpath(img_path, root) print(img_name) txt_file.write(f'{img_name}\n') if __name__ == '__main__': """Generate meta info (txt file) for only Ground-Truth images. It can also generate meta info from several folders into one txt file. """ parser = argparse.ArgumentParser() parser.add_argument( '--input', nargs='+', default=['datasets/DF2K/DF2K_HR', 'datasets/DF2K/DF2K_multiscale'], help='Input folder, can be a list') parser.add_argument( '--root', nargs='+', default=['datasets/DF2K', 'datasets/DF2K'], help='Folder root, should have the length as input folders') parser.add_argument( '--meta_info', type=str, default='datasets/DF2K/meta_info/meta_info_DF2Kmultiscale.txt', help='txt path for meta info') parser.add_argument('--check', action='store_true', help='Read image to check whether it is ok') args = parser.parse_args() assert len(args.input) == len(args.root), ('Input folder and folder root should have the same length, but got ' f'{len(args.input)} and {len(args.root)}.') os.makedirs(os.path.dirname(args.meta_info), exist_ok=True) main(args)