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)