# A smaller version of the model (FP16) is also provided.
# MODEL_PATH = './model/res10_300x300_ssd_iter_140000_fp16.caffemodel'
MODEL_PATH = './model/res10_300x300_ssd_iter_140000.caffemodel'
CONFIG_PATH = './model/deploy.prototxt'
# Load the face detection model.
net = cv2.dnn.readNetFromCaffe(CONFIG_PATH, MODEL_PATH)
# Create the landmark detector instance.
landmarkDetector = cv2.face.createFacemarkLBF()
# Load the model.
model = './model/lbfmodel.yaml'
landmarkDetector.loadModel(model)
image_filename = 'family.jpg'
img = cv2.imread(image_filename)
img_display_faces = img.copy()
img_display_marks = img.copy()
# Detect the faces.
faces = detect_faces(img)
if len(faces) > 0:
# Render bounding boxes.
for face in faces:
cv2.rectangle(img_display_faces, face, (0,255,0), 3)
# Detect the facial landmarks.
retval, landmarksList = landmarkDetector.fit(img, faces)
# Render landmark points.
for landmarks in landmarksList:
cv2.face.drawFacemarks(img_display_marks, landmarks, (0, 255, 0))
fig = plt.figure(figsize=(20,10))
plt.subplot(121); plt.imshow(img_display_faces[...,::-1]); plt.axis('off');
plt.subplot(122); plt.imshow(img_display_marks[...,::-1]); plt.axis('off');
else:
print('No faces detected in image.')