import cv2, dlib, os
from scipy.spatial import distance
import pickle
def save(name, list):
with open(str(name) + '.pkl', 'wb') as filehandle:
pickle.dump(list, filehandle)
def load(name):
with open(str(name) + '.pkl', 'rb') as filehandle:
list = pickle.load(filehandle)
return list
predictor_path = 'datasets/shape_predictor_5_face_landmarks.dat'
face_rec_model_path = 'datasets/dlib_face_recognition_resnet_model_v1.dat'
weights = 'datasets/mmod_human_face_detector.dat'
path = 'photo_pairs/'
files = os.listdir(path)
detector = dlib.get_frontal_face_detector()
sp = dlib.shape_predictor(predictor_path)
facerec = dlib.face_recognition_model_v1(face_rec_model_path)
pics = {}
fail_pics = []
for img in files:
image = cv2.imread(path + img)
cnn_face_detector = dlib.cnn_face_detection_model_v1(weights)
faces_cnn = cnn_face_detector(image, 1)
if len(faces_cnn) > 0:
for ind, face in enumerate(faces_cnn):
destRGB = dlib.load_rgb_image(path + img)
faceBox = dlib.rectangle(left=face.rect.left(), top=face.rect.top(), right=face.rect.right(),
bottom=face.rect.bottom())
shape = sp(destRGB, faceBox)
face_descriptor = facerec.compute_face_descriptor(destRGB, shape)
newname = '123/rez/' + str(ind) + '_' + img.split('.')[0]
if len(face_descriptor) > 0:
print('got vectors', img)
save(newname, face_descriptor)
if img in pics:
pics[img].append(face_descriptor)
else:
pics[img] = []
pics[img].append(face_descriptor)
else:
print('no vectors', img)
fail_pics.append(img)
else:
print('no face', img)
fail_pics.append(img)
save('photo_pairs', pics)
save('fail_photo_pairs', fail_pics)
Comments