Spaces:
Sleeping
Sleeping
| import cv2 | |
| import mediapipe as mp | |
| def get_face_landmarks(image, draw=False, static_image_mode=True): | |
| # Read the input image | |
| image_input_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) | |
| face_mesh = mp.solutions.face_mesh.FaceMesh(static_image_mode=static_image_mode, | |
| max_num_faces=1, | |
| min_detection_confidence=0.5) | |
| image_rows, image_cols, _ = image.shape | |
| results = face_mesh.process(image_input_rgb) | |
| image_landmarks = [] | |
| if results.multi_face_landmarks: | |
| if draw: | |
| mp_drawing = mp.solutions.drawing_utils | |
| mp_drawing_styles = mp.solutions.drawing_styles | |
| drawing_spec = mp_drawing.DrawingSpec(thickness=2, circle_radius=1) | |
| mp_drawing.draw_landmarks( | |
| image=image, | |
| landmark_list=results.multi_face_landmarks[0], | |
| connections=mp.solutions.face_mesh.FACEMESH_CONTOURS, | |
| landmark_drawing_spec=drawing_spec, | |
| connection_drawing_spec=drawing_spec) | |
| ls_single_face = results.multi_face_landmarks[0].landmark | |
| xs_ = [] | |
| ys_ = [] | |
| zs_ = [] | |
| for idx in ls_single_face: | |
| xs_.append(idx.x) | |
| ys_.append(idx.y) | |
| zs_.append(idx.z) | |
| for j in range(len(xs_)): | |
| image_landmarks.append(xs_[j] - min(xs_)) | |
| image_landmarks.append(ys_[j] - min(ys_)) | |
| image_landmarks.append(zs_[j] - min(zs_)) | |
| return image_landmarks | |