-
Notifications
You must be signed in to change notification settings - Fork 3
/
extract_rcnn_faces.py
111 lines (72 loc) · 2.33 KB
/
extract_rcnn_faces.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
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
# provided rcnn txt file that has coordinates and confidence level,
# this code creates folders, organizes them and employs face_recognition
# package that is based on dlib library
# Note: code doesn't employ RCNN code to extract faces
import os
import cv2
from PIL import Image, ImageDraw
import face_recognition
import name_faces
from name_faces import face_recog_main
rootdir = '/Users/almas/Documents/Research/'
rcnn_files = rootdir + 'rcnn_files/'
face_recog = rootdir + "face_recog/"
assert os.path.isdir(face_recog)
extractedFaces = face_recog + 'rcnn_recog_faces/'
if not os.path.exists(extractedFaces):
os.makedirs(extractedFaces)
# output file for check
outCheck = open(rcnn_files + 'output.txt', 'w')
def coordExtract(coord):
number_float = map(float, coord.split())
return number_float
# return [x, y, h, w]
for fold in os.listdir(rcnn_files):
if 'DS_Store' in fold:
continue
print fold
outCheck.write(fold + '\n')
if fold.endswith('.txt'):
fileEp = open(rcnn_files + fold, 'r')
folderName = fold.strip('.txt')
folderName = extractedFaces + folderName
# folderName = ../Documents/Research/face_recog/rcnn_recog_faces/
if not os.path.exists(folderName):
os.makedirs(folderName)
for line in fileEp:
if 'ep' in line:
picLoc = line.strip('\n')
faceList = []
faceCount = int(next(fileEp))
t = 0
while faceCount > t:
faceList.append(next(fileEp).strip('\n'))
t = t + 1
imOriginal = rootdir + picLoc
if os.path.isfile(imOriginal):
image = Image.open(imOriginal)
else:
continue
picName = os.path.basename(imOriginal)
# imMod = folderName + '/' + picName
outCheck.write(os.path.basename(imOriginal) + '\n')
faceCoordList = []
for count, coord in enumerate(faceList):
x = coordExtract(coord)
conf_tresh = x.pop()
# update list x coords x[2], x[3]
x[0] = x[0] - 15
x[1] = x[1] - 15
x[2] = x[0] + x[2] + 15
x[3] = x[1] + x[3] + 15
if x and conf_tresh >= 0.96:
outCheck.write(str(x) + "\n")
draw = ImageDraw.Draw(image)
draw.rectangle(x)
img_crop = image.crop(x)
img_crop.save(folderName + '/' + str(count) + '_' + os.path.basename(imOriginal))
image.save(imOriginal)
# if faceList:
# break
face_recog_main(folderName)
# break