Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
hackassin
GitHub Repository: hackassin/learnopencv
Path: blob/master/Face-Recognition-with-ArcFace/align/face_resize.py
3142 views
1
import os
2
import cv2
3
from tqdm import tqdm
4
5
6
def mkdir(path):
7
if not os.path.exists(path):
8
os.mkdir(path)
9
10
11
def process_image(img):
12
13
size = img.shape
14
h, w = size[0], size[1]
15
scale = max(w, h) / float(min_side)
16
new_w, new_h = int(w / scale), int(h / scale)
17
resize_img = cv2.resize(img, (new_w, new_h))
18
if new_w % 2 != 0 and new_h % 2 == 0:
19
top, bottom, left, right = (min_side - new_h) / 2, (min_side - new_h) / 2, (min_side - new_w) / 2 + 1, (
20
min_side - new_w) / 2
21
elif new_h % 2 != 0 and new_w % 2 == 0:
22
top, bottom, left, right = (min_side - new_h) / 2 + 1, (min_side - new_h) / 2, (min_side - new_w) / 2, (
23
min_side - new_w) / 2
24
elif new_h % 2 == 0 and new_w % 2 == 0:
25
top, bottom, left, right = (min_side - new_h) / 2, (min_side - new_h) / 2, (min_side - new_w) / 2, (
26
min_side - new_w) / 2
27
else:
28
top, bottom, left, right = (min_side - new_h) / 2 + 1, (min_side - new_h) / 2, (min_side - new_w) / 2 + 1, (
29
min_side - new_w) / 2
30
pad_img = cv2.copyMakeBorder(resize_img, top, bottom, left, right, cv2.BORDER_CONSTANT,
31
value=[0, 0, 0])
32
33
return pad_img
34
35
36
def main(source_root):
37
38
dest_root = "/media/pc/6T/jasonjzhao/data/MS-Celeb-1M_Resized"
39
mkdir(dest_root)
40
cwd = os.getcwd() # delete '.DS_Store' existed in the source_root
41
os.chdir(source_root)
42
os.system("find . -name '*.DS_Store' -type f -delete")
43
os.chdir(cwd)
44
45
if not os.path.isdir(dest_root):
46
os.mkdir(dest_root)
47
48
for subfolder in tqdm(os.listdir(source_root)):
49
if not os.path.isdir(os.path.join(dest_root, subfolder)):
50
os.mkdir(os.path.join(dest_root, subfolder))
51
for image_name in os.listdir(os.path.join(source_root, subfolder)):
52
print("Processing\t{}".format(os.path.join(source_root, subfolder, image_name)))
53
img = cv2.imread(os.path.join(source_root, subfolder, image_name))
54
if type(img) == type(None):
55
print("damaged image %s, del it" % (img))
56
os.remove(img)
57
continue
58
size = img.shape
59
h, w = size[0], size[1]
60
if max(w, h) > 512:
61
img_pad = process_image(img)
62
else:
63
img_pad = img
64
cv2.imwrite(os.path.join(dest_root, subfolder, image_name.split('.')[0] + '.jpg'), img_pad)
65
66
67
if __name__ == "__main__":
68
min_side = 512
69
main(source_root = "/media/pc/6T/jasonjzhao/data/MS-Celeb-1M/database/base")
70