Spaces:
Runtime error
Runtime error
| import cv2 | |
| import mediapipe as mp | |
| from mediapipe import solutions | |
| from mediapipe.framework.formats import landmark_pb2 | |
| import numpy as np | |
| def draw_mediapipe_landmarks(rgb_image: object, face_landmarks_list: object) -> object: | |
| annotated_image = np.copy(rgb_image) | |
| # Loop through the detected faces to visualize. | |
| for idx in range(len(face_landmarks_list)): | |
| face_landmarks = face_landmarks_list[idx] | |
| # Draw the face landmarks. | |
| face_landmarks_proto = landmark_pb2.NormalizedLandmarkList() | |
| face_landmarks_proto.landmark.extend([ | |
| landmark_pb2.NormalizedLandmark(x=landmark.x, y=landmark.y, z=landmark.z) for landmark in face_landmarks | |
| ]) | |
| # print(len(mp.solutions.face_mesh.FACEMESH_TESSELATION)) | |
| # exit() | |
| solutions.drawing_utils.draw_landmarks( | |
| image=annotated_image, | |
| landmark_list=face_landmarks_proto, | |
| connections=mp.solutions.face_mesh.FACEMESH_TESSELATION, | |
| # connections=FACEMESH_NOSE, | |
| landmark_drawing_spec=None, | |
| connection_drawing_spec=mp.solutions.drawing_styles.get_default_face_mesh_tesselation_style() | |
| ) | |
| solutions.drawing_utils.draw_landmarks( | |
| image=annotated_image, | |
| landmark_list=face_landmarks_proto, | |
| connections=mp.solutions.face_mesh.FACEMESH_CONTOURS, | |
| landmark_drawing_spec=None, | |
| connection_drawing_spec=mp.solutions.drawing_styles.get_default_face_mesh_contours_style()) | |
| solutions.drawing_utils.draw_landmarks( | |
| image=annotated_image, | |
| landmark_list=face_landmarks_proto, | |
| connections=mp.solutions.face_mesh.FACEMESH_IRISES, | |
| landmark_drawing_spec=None, | |
| connection_drawing_spec=mp.solutions.drawing_styles.get_default_face_mesh_iris_connections_style()) | |
| return annotated_image | |
| def draw_landmarks(canvas, landmarks, eps=1e-4, fill=(0, 0, 0), thickness=-1): | |
| h, w, c = canvas.shape | |
| for lmk in landmarks: | |
| x, y = lmk | |
| x = int(x * w) | |
| y = int(y * h) | |
| if eps < x <= w and eps < y <= h: | |
| cv2.circle(canvas, (x, y), 3, fill, thickness=thickness) | |
| return canvas | |