generate_meta_info.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import argparse
  2. import cv2
  3. import glob
  4. import os
  5. def main(args):
  6. txt_file = open(args.meta_info, 'w')
  7. for folder, root in zip(args.input, args.root):
  8. img_paths = sorted(glob.glob(os.path.join(folder, '*')))
  9. for img_path in img_paths:
  10. status = True
  11. if args.check:
  12. # read the image once for check, as some images may have errors
  13. try:
  14. img = cv2.imread(img_path)
  15. except (IOError, OSError) as error:
  16. print(f'Read {img_path} error: {error}')
  17. status = False
  18. if img is None:
  19. status = False
  20. print(f'Img is None: {img_path}')
  21. if status:
  22. # get the relative path
  23. img_name = os.path.relpath(img_path, root)
  24. print(img_name)
  25. txt_file.write(f'{img_name}\n')
  26. if __name__ == '__main__':
  27. """Generate meta info (txt file) for only Ground-Truth images.
  28. It can also generate meta info from several folders into one txt file.
  29. """
  30. parser = argparse.ArgumentParser()
  31. parser.add_argument(
  32. '--input',
  33. nargs='+',
  34. default=['datasets/DF2K/DF2K_HR', 'datasets/DF2K/DF2K_multiscale'],
  35. help='Input folder, can be a list')
  36. parser.add_argument(
  37. '--root',
  38. nargs='+',
  39. default=['datasets/DF2K', 'datasets/DF2K'],
  40. help='Folder root, should have the length as input folders')
  41. parser.add_argument(
  42. '--meta_info',
  43. type=str,
  44. default='datasets/DF2K/meta_info/meta_info_DF2Kmultiscale.txt',
  45. help='txt path for meta info')
  46. parser.add_argument('--check', action='store_true', help='Read image to check whether it is ok')
  47. args = parser.parse_args()
  48. assert len(args.input) == len(args.root), ('Input folder and folder root should have the same length, but got '
  49. f'{len(args.input)} and {len(args.root)}.')
  50. os.makedirs(os.path.dirname(args.meta_info), exist_ok=True)
  51. main(args)