Python
Mediapipe

Python으로 Mediapipe Face Mesh 적용하기

Feb. 4, 2023, 2:16 p.m.

MediaPipe 란?

MediaPipe는 구글에서 만든, 인체(얼굴, 손, 포즈 등)를 대상으로 하는 인식에 대해 다양한 형태로 기능과 모델까지 제공하는 서비스입니다.

Python 이외에도 다양한 프로그램언어와 환경에서에서 사용하기 편리한 라이브러리 형태로 제공되며 설치 후 즉시 간편하게 사용이 가능합니다.

모바일 GPU나 CPU 환경에서 잘 작동하도록 설계되어 있습니다.

 

저희는 Python 언어로 MediaPipe의 다양한 기능 중 Face Mesh라는 얼굴 Landmark 검출하는 기능을 이용해보고자 합니다.

MediaPipe Face Mesh는 468개의 3D 얼굴 landmark를 검출하는 서비스로, 3D 얼굴 인식을 위해 머신러닝을 활용하며, 1대의 카메라 만으로 깊이 인식까지 가능합니다.

 

MediaPipe 설치하기

아래의 명령어로 MediaPipe를 설치합니다.

$ pip install mediapipe

 

사진에서 얼굴 검출하기

아래의 코드로 face mesh 검출 및 그리기를 진행합니다.

해당 코드는 Python 3.7, mediapipe 0.8.2 버전입니다. Python 버전이 3.7보다 낮으면 정상작동하지 않을 수 있습니다.

mediapipe 관련 함수와 관련된 내용은 mediapipe facemesh링크를 참조해주세요.

import cv2
import mediapipe as mp

#face_mesh객체, drawing 객체
mp_drawing = mp.solutions.drawing_utils
mp_face_mesh = mp.solutions.face_mesh

#파일 명
file_list=['/home/ubuntu/app/face.jpg']

# face mesh 그리기 위한 설정:
drawing_spec = mp_drawing.DrawingSpec(thickness=1, circle_radius=1)


with mp_face_mesh.FaceMesh(
    static_image_mode=True,
    max_num_faces=1,
    min_detection_confidence=0.5) as face_mesh:
  for idx, file in enumerate(file_list):
    
    #이미지 read
    image = cv2.imread(file)    

    #얼굴 인식 후 face mesh 추출
    results = face_mesh.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))

    # face mesh 그려주는 부분
    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_CONTOURS,
          landmark_drawing_spec=drawing_spec,
          connection_drawing_spec=drawing_spec)

    #그려진 face mesh 이미지 저장
    cv2.imwrite('/home/ubuntu/app/annotated_image' + str(idx) + '.png', annotated_image)

Reference

https://denev6.tistory.com/entry/Face-Mesh


Comments


Related Posts