Spaces:
Running
on
Zero
Running
on
Zero
File size: 4,973 Bytes
bfa59ab |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
#!/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()
|