import logging import cv2 import mediapipe as mp def main() -> None: """Main function.""" mp_drawing = mp.solutions.drawing_utils # type: ignore mp_drawing_styles = mp.solutions.drawing_styles # type: ignore mp_face_mesh = mp.solutions.face_mesh # type: ignore # open webcam cap = cv2.VideoCapture(0) with mp_face_mesh.FaceMesh( max_num_faces=2, refine_landmarks=True, min_detection_confidence=0.5, min_tracking_confidence=0.5 ) as face_mesh: while cap.isOpened(): # read webcam success, image = cap.read() if not success: print("Ignoring empty camera frame.") # If loading a video, use 'break' instead of 'continue' continue # to improve performance, optionally mark the image as not writeable to pass by reference. image.flags.writeable = False image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results = face_mesh.process(image) # draw the face mesh annotations on the image. image.flags.writeable = True image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) if results.multi_face_landmarks: for face_landmarks in results.multi_face_landmarks: mp_drawing.draw_landmarks( image=image, landmark_list=face_landmarks, connections=mp_face_mesh.FACEMESH_TESSELATION, landmark_drawing_spec=None, connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_tesselation_style(), ) mp_drawing.draw_landmarks( image=image, landmark_list=face_landmarks, connections=mp_face_mesh.FACEMESH_CONTOURS, landmark_drawing_spec=None, connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_contours_style(), ) mp_drawing.draw_landmarks( image=image, landmark_list=face_landmarks, connections=mp_face_mesh.FACEMESH_IRISES, landmark_drawing_spec=None, connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_iris_connections_style(), ) # flip the image horizontally for a selfie-view display. cv2.imshow("MediaPipe Face Mesh", cv2.flip(image, 1)) if cv2.waitKey(5) & 0xFF == 27: break # close webcam cap.release() if __name__ == "__main__": # setup logging format logging.basicConfig( level=logging.INFO, format="%(asctime)s %(name)s %(levelname)-8s %(message)s", datefmt="(%F %T)", ) main()