| import dlib | |
| import cv2 | |
| class LandmarksDetector: | |
| def __init__(self, predictor_model_path): | |
| """ | |
| :param predictor_model_path: path to shape_predictor_68_face_landmarks.dat file | |
| """ | |
| self.detector = dlib.get_frontal_face_detector() | |
| self.shape_predictor = dlib.shape_predictor(predictor_model_path) | |
| def get_landmarks(self, image): | |
| gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| dets = self.detector(gray, 1) | |
| for detection in dets: | |
| try: | |
| face_landmarks = [(item.x, item.y) for item in self.shape_predictor(gray, detection).parts()] | |
| yield face_landmarks | |
| except: | |
| print("Exception in get_landmarks()!") | |