Download clean/video/pwtf_dvd/inference/test_tools/utils.py from deepsafe/model-code: direct link, hf CLI and curl.
- Browser
- Download file 2.69 kB
-
https://huggingface.co/deepsafe/model-code/resolve/main/clean/video/pwtf_dvd/inference/test_tools/utils.py
- Command line
-
hf download hf://deepsafe/model-code/clean/video/pwtf_dvd/inference/test_tools/utils.py
-
curl -L -o utils.py https://huggingface.co/deepsafe/model-code/resolve/main/clean/video/pwtf_dvd/inference/test_tools/utils.py
2.69 kB
| import numpy as np | |
| import cv2 | |
| import os | |
| import platform | |
| import json | |
| import errno | |
| def weak_check(detect_res): | |
| return sum([len(faces) for faces in detect_res]) > len(detect_res) * 0.75 | |
| def get_crop_box(shape, box, scale=0.5): | |
| height, width = shape | |
| box = np.rint(box).astype(np.int32) | |
| new_box = box.reshape(2, 2) | |
| size = new_box[1] - new_box[0] | |
| diff = scale * size | |
| diff = diff[None, :] * np.array([-1, 1])[:, None] | |
| new_box = new_box + diff | |
| new_box[:, 0] = np.clip(new_box[:, 0], 0, width - 1) | |
| new_box[:, 1] = np.clip(new_box[:, 1], 0, height - 1) | |
| new_box = np.rint(new_box).astype(np.int32) | |
| return new_box.reshape(-1) | |
| def get_fps(input_file): | |
| reader = cv2.VideoCapture(input_file) | |
| fps = reader.get(cv2.CAP_PROP_FPS) | |
| reader.release() | |
| return fps | |
| def mkdir_p(dirname): | |
| """Like "mkdir -p", make a dir recursively, but do nothing if the dir exists | |
| 这个是线程安全的, from Lingzhi Li | |
| Args: | |
| dirname(str): | |
| """ | |
| assert dirname is not None | |
| if dirname == "" or os.path.isdir(dirname): | |
| return | |
| try: | |
| os.makedirs(dirname) | |
| except OSError as e: | |
| if e.errno != errno.EEXIST: | |
| raise e | |
| def mkdir(*args): | |
| for folder in args: | |
| if not os.path.isdir(folder): | |
| mkdir_p(folder) | |
| def make_join(*args): | |
| folder = os.path.join(*args) | |
| mkdir(folder) | |
| return folder | |
| def list_dir(folder, condition=None, key=lambda x: x, reverse=False, co_join=[]): | |
| files = os.listdir(folder) | |
| if condition is not None: | |
| files = filter(condition, files) | |
| co_join = [folder] + co_join | |
| if key is not None: | |
| files = sorted(files, key=key, reverse=reverse) | |
| files = [(file, *[os.path.join(fold, file) for fold in co_join]) for file in files] | |
| return files | |
| def get_jointer(file): | |
| def jointer(folder): | |
| return os.path.join(folder, file) | |
| return jointer | |
| def flatten(l): | |
| return [item for sublist in l for item in sublist] | |
| def is_win(): | |
| return platform.system() == "Windows" | |
| def get_postfix(post_fix): | |
| return lambda x: x.endswith(post_fix) | |
| def partition(images, size): | |
| """ | |
| Returns a new list with elements | |
| of which is a list of certain size. | |
| >>> partition([1, 2, 3, 4], 3) | |
| [[1, 2, 3], [4]] | |
| """ | |
| return [ | |
| images[i : i + size] if i + size <= len(images) else images[i:] | |
| for i in range(0, len(images), size) | |
| ] | |
| def load_json(file): | |
| with open(file, "r") as f: | |
| res = json.load(f) | |
| return res | |
| def save_json(file, obj): | |
| with open(file, "w", encoding="utf-8") as f: | |
| json.dump(obj, f, indent=4, ensure_ascii=False) | |