python - face mesh

2022. 3. 5. 13:40· 개발/mediapipe
목차
  1. References
  2. Source
  3. Execution
  4. Solution APIs

References

https://google.github.io/mediapipe/solutions/face_mesh

 

Face Mesh

Cross-platform, customizable ML solutions for live and streaming media.

google.github.io

 

Source

그대로 실행하였습니다.

인풋에 따른 두 가지 소스가 있습니다.

1. 이미지 파일을 인풋으로 사용

import cv2
import mediapipe as mp
mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles
mp_face_mesh = mp.solutions.face_mesh

# For static images:
IMAGE_FILES = []
drawing_spec = mp_drawing.DrawingSpec(thickness=1, circle_radius=1)
with mp_face_mesh.FaceMesh(
    static_image_mode=True,
    max_num_faces=1,
    refine_landmarks=True,
    min_detection_confidence=0.5) as face_mesh:
  for idx, file in enumerate(IMAGE_FILES):
    image = cv2.imread(file)
    # Convert the BGR image to RGB before processing.
    results = face_mesh.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))

    # Print and draw face mesh landmarks on the image.
    if not results.multi_face_landmarks:
      continue
    annotated_image = image.copy()
    for face_landmarks in results.multi_face_landmarks:
      print('face_landmarks:', face_landmarks)
      mp_drawing.draw_landmarks(
          image=annotated_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=annotated_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=annotated_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())
    cv2.imwrite('/tmp/annotated_image' + str(idx) + '.png', annotated_image)

2. 비디오를 인풋으로 사용

import cv2
import mediapipe as mp
mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles
mp_face_mesh = mp.solutions.face_mesh

# For webcam input:
drawing_spec = mp_drawing.DrawingSpec(thickness=1, circle_radius=1)
cap = cv2.VideoCapture(0)
with mp_face_mesh.FaceMesh(
    max_num_faces=1,
    refine_landmarks=True,
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5) as face_mesh:
  while cap.isOpened():
    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
cap.release()

Execution

Drawing 시 세 가지 옵션이 나와있습니다. 

각 옵션마다 그릴 경우 전체 모습입니다.

 

FACEMESH_TESSELATION

 
전체적인 메쉬 입니다.

 

FACEMESH_CONTOURS

컨투어입니다.

 

 
FACEMESH_IRISES
 
동공입니다.
비디오에서 눈을 감을 때는 동공 위치를 잡은 것처럼 보였고? 그렇지만 마지막 동공 위치를 잡는 것인지 확실하진 않았기에
윙크한 이미지로도 해보았습니다.

ㅎㅎ 완벽하지 않음을 발견하였습니다. 아 근데 너무 똑똑합니다.

다른 이미지도 해보겠습니다.

똑똑합니다..

 

Solution APIs

각 설정 값을 레퍼런스에 의거하여 잠시 살펴보겠습니다.

 

728x90
반응형

'개발 > mediapipe' 카테고리의 다른 글

빌드 실행 모음  (0) 2022.03.06
Framework Concepts - Packets  (0) 2022.03.05
mediapipe hello world error on m1  (0) 2022.03.03
Framework Concepts - Graphs  (0) 2022.03.03
Framework Concepts - Calculators  (0) 2022.03.03
  1. References
  2. Source
  3. Execution
  4. Solution APIs
'개발/mediapipe' 카테고리의 다른 글
  • 빌드 실행 모음
  • Framework Concepts - Packets
  • mediapipe hello world error on m1
  • Framework Concepts - Graphs
내공얌냠
내공얌냠
내공냠냠
내공얌냠
내공냠냠
내공얌냠
전체
오늘
어제
  • 분류 전체보기 (254)
    • 개발 (113)
      • mediapipe (16)
      • insightface (5)
      • JongjuAR (3)
    • 자료구조 알고리즘 (79)
      • 코딩테스트 (64)
      • 이론 (15)
    • 공부 (7)
      • 단행본 (7)
      • 튜토리얼 (19)
      • 논문 (15)
      • 복기 (5)
    • 참여 (5)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • vscode 스프링 설치
  • flutter tutorial
  • speaker adaptation tts
  • 음성인식 튜토리얼
  • 컴퓨터 비전 기초
  • ios google places api
  • 음성인식 기초
  • flutter 행사
  • postgresql 재설치
  • 딥러닝 기반 음성인식 기초
  • flutter 행사 후기
  • mediapipe
  • google mediapipe
  • 플러터 튜토리얼
  • torchscript vs onnx vs tensorrt
  • 컴퓨터 비전 책 추천
  • flutter conference
  • 미디어파이프
  • kubeflow설치가이드
  • 구글 미디어파이프
  • mediapipe translate
  • 머신러닝이란
  • 깃 튜토리얼
  • flutter
  • postgresql install in mac
  • 플러터
  • python telegrambot
  • git tutorial
  • kubeflow설치안됨
  • 컴퓨터 비전

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
내공얌냠
python - face mesh
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.