forked from freedomofkeima/transfer-learning-anime
-
Notifications
You must be signed in to change notification settings - Fork 0
/
bulk_convert.py
45 lines (37 loc) · 1.5 KB
/
bulk_convert.py
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
import cv2
import os
import sys
from glob import glob
def bulk_convert(src, dst, cascade_file = "lbpcascade_animeface.xml"):
if not os.path.isfile(cascade_file):
raise RuntimeError("%s: not found" % cascade_file)
# Create classifier
cascade = cv2.CascadeClassifier(cascade_file)
files = [y for x in os.walk(src) for y in glob(os.path.join(x[0], '*.*'))]
for image_file in files:
target_path = "/".join(image_file.strip("/").split('/')[1:-1])
target_path = os.path.join(dst, target_path) + "/"
if not os.path.exists(target_path):
os.makedirs(target_path)
image = cv2.imread(image_file)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.equalizeHist(gray)
faces = cascade.detectMultiScale(gray,
# detector options
scaleFactor = 1.1,
minNeighbors = 5,
minSize = (30, 30))
for (x, y, w, h) in faces:
crop_img = image[y:y+h, x:x+w]
filename = os.path.basename(image_file).split('.')[0]
cv2.imwrite(
os.path.join(target_path, filename + ".jpg"),
crop_img
)
def main():
if len(sys.argv) != 3:
sys.stderr.write("usage: bulk_convert.py <source-dir> <target-dir>\n")
sys.exit(-1)
bulk_convert(sys.argv[1], sys.argv[2])
if __name__ == '__main__':
main()