mirror of
https://github.com/aljazceru/InvSR.git
synced 2025-12-17 06:14:22 +01:00
156 lines
4.9 KiB
Python
156 lines
4.9 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding:utf-8 -*-
|
|
# Power by Zongsheng Yue 2022-02-06 10:34:59
|
|
|
|
import os
|
|
import random
|
|
import requests
|
|
import importlib
|
|
from pathlib import Path
|
|
from PIL import Image
|
|
|
|
def mkdir(dir_path, delete=False, parents=True):
|
|
import shutil
|
|
if not isinstance(dir_path, Path):
|
|
dir_path = Path(dir_path)
|
|
if delete:
|
|
if dir_path.exists():
|
|
shutil.rmtree(str(dir_path))
|
|
if not dir_path.exists():
|
|
dir_path.mkdir(parents=parents)
|
|
|
|
def get_obj_from_str(string, reload=False):
|
|
module, cls = string.rsplit(".", 1)
|
|
if reload:
|
|
module_imp = importlib.import_module(module)
|
|
importlib.reload(module_imp)
|
|
return getattr(importlib.import_module(module, package=None), cls)
|
|
|
|
def instantiate_from_config(config):
|
|
if not "target" in config:
|
|
raise KeyError("Expected key `target` to instantiate.")
|
|
return get_obj_from_str(config["target"])(**config.get("params", dict()))
|
|
|
|
def str2bool(v):
|
|
if isinstance(v, bool):
|
|
return v
|
|
if v.lower() in ("yes", "true", "t", "y", "1"):
|
|
return True
|
|
elif v.lower() in ("no", "false", "f", "n", "0"):
|
|
return False
|
|
else:
|
|
raise argparse.ArgumentTypeError("Boolean value expected.")
|
|
|
|
def get_filenames(dir_path, exts=['png', 'jpg'], recursive=True):
|
|
'''
|
|
Get the file paths in the given folder.
|
|
param exts: list, e.g., ['png',]
|
|
return: list
|
|
'''
|
|
if not isinstance(dir_path, Path):
|
|
dir_path = Path(dir_path)
|
|
|
|
file_paths = []
|
|
for current_ext in exts:
|
|
if recursive:
|
|
file_paths.extend([str(x) for x in dir_path.glob('**/*.'+current_ext)])
|
|
else:
|
|
file_paths.extend([str(x) for x in dir_path.glob('*.'+current_ext)])
|
|
|
|
return file_paths
|
|
|
|
def readline_txt(txt_file):
|
|
txt_file = [txt_file, ] if isinstance(txt_file, str) else txt_file
|
|
out = []
|
|
for txt_file_current in txt_file:
|
|
with open(txt_file_current, 'r') as ff:
|
|
out.extend([x[:-1] for x in ff.readlines()])
|
|
|
|
return out
|
|
|
|
def scan_files_from_folder(dir_paths, exts, recursive=True):
|
|
'''
|
|
Scaning images from given folder.
|
|
Input:
|
|
dir_pathas: str or list.
|
|
exts: list
|
|
'''
|
|
exts = [exts, ] if isinstance(exts, str) else exts
|
|
dir_paths = [dir_paths, ] if isinstance(dir_paths, str) else dir_paths
|
|
|
|
file_paths = []
|
|
for current_dir in dir_paths:
|
|
current_dir = Path(current_dir) if not isinstance(current_dir, Path) else current_dir
|
|
for current_ext in exts:
|
|
if recursive:
|
|
search_flag = f"**/*.{current_ext}"
|
|
else:
|
|
search_flag = f"*.{current_ext}"
|
|
file_paths.extend(sorted([str(x) for x in Path(current_dir).glob(search_flag)]))
|
|
|
|
return file_paths
|
|
|
|
def write_path_to_txt(
|
|
dir_folder,
|
|
txt_path,
|
|
search_key,
|
|
num_files=None,
|
|
write_only_name=False,
|
|
write_only_stem=False,
|
|
shuffle=False,
|
|
):
|
|
'''
|
|
Scaning the files in the given folder and write them into a txt file
|
|
Input:
|
|
dir_folder: path of the target folder
|
|
txt_path: path to save the txt file
|
|
search_key: e.g., '*.png'
|
|
write_only_name: bool, only record the file names (including extension),
|
|
write_only_stem: bool, only record the file names (not including extension),
|
|
'''
|
|
txt_path = Path(txt_path) if not isinstance(txt_path, Path) else txt_path
|
|
dir_folder = Path(dir_folder) if not isinstance(dir_folder, Path) else dir_folder
|
|
if txt_path.exists():
|
|
txt_path.unlink()
|
|
if write_only_name:
|
|
path_list = sorted([str(x.name) for x in dir_folder.glob(search_key)])
|
|
elif write_only_stem:
|
|
path_list = sorted([str(x.stem) for x in dir_folder.glob(search_key)])
|
|
else:
|
|
path_list = sorted([str(x) for x in dir_folder.glob(search_key)])
|
|
if shuffle:
|
|
random.shuffle(path_list)
|
|
if num_files is not None:
|
|
path_list = path_list[:num_files]
|
|
with open(txt_path, mode='w') as ff:
|
|
for line in path_list:
|
|
ff.write(line+'\n')
|
|
|
|
def download_image_from_url(url, dir="./"):
|
|
# Download a file from a given URI, including minimal checks
|
|
|
|
# Download
|
|
f = str(Path(dir) / os.path.basename(url)) # filename
|
|
try:
|
|
with open(f, "wb") as file:
|
|
file.write(requests.get(url, timeout=10).content)
|
|
except:
|
|
print(f'Skip the url: {f}!')
|
|
|
|
# Rename (remove wildcard characters)
|
|
src = f # original name
|
|
for c in ["%20", "%", "*", "~", "(", ")"]:
|
|
f = f.replace(c, "_")
|
|
f = f[: f.index("?")] if "?" in f else f # new name
|
|
if src != f:
|
|
os.rename(src, f) # rename
|
|
|
|
# Add suffix (if missing)
|
|
if Path(f).suffix == "":
|
|
src = f # original name
|
|
try:
|
|
f += f".{Image.open(f).format.lower()}"
|
|
os.rename(src, f) # rename
|
|
except:
|
|
Path(f).unlink()
|