File size: 2,690 Bytes
9e14838
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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.int64)
    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.int64)
    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)