Mediapipeことはじめ

mediapipeことはじめ

1 概要

  • 瞳検出、Dlibよりも細かい顔ランドマーク検出、体のボーン検出など、相当良さげ

3 インストール(Python)

  • Pythonをインストールしてから、pip install mediapipeで、Pythonから使えるようになる(Linux,Windows,Mac等)

3.1 以下の操作を行っている動画


3.2 インストール(Python) する手順

  • Pythonがインストールされてて、pipあるいはpip3が使える環境で以下を実行
  • virtualenv で作成した方が良いかも。動画では virtualenv mediapipeしてから以下を行なった。
    • ipythonも追加でインストール
pip install mediapipe
or
pip3 install mediapipe

3.3 この章のまとめ

  • Python用のMediaPipeをインストール

4 顔のランドマーク(Python)検出

  • Pythonをインストールしてから、pip install mediapipeで、Pythonから使えるようになる(Linux,Windows,Mac等)

4.1 以下の操作を行っている動画


4.2 顔のランドマーク(Python)検出 する手順

  • MediaPipe Face Mesh https://google.github.io/mediapipe/solutions/face_mesh にあるサンプルソースを修正した
    • # For webcam input: までをコピペ
    • globを利用してカレントディレクトリにあるjpgファイルに対して処理
    • 元々は/tmpディレクトリに結果を書き出すが、ここでは、表示するように修正(オリジナルと、結果)
  • MediaPipe Face Mesh Colab https://mediapipe.page.link/face_mesh_py_colab もわかりやすい
  • 画像としては、パブリックドメインの”Yukichi_Fukuzawa_1891.png”File:Yukichi_Fukuzawa_1891.jpgを利用。他のファイルでもOK
  • ランドマークの描画の色がわかりにくいので、赤に変更するオプション追加
import cv2
import mediapipe as mp
import glob
mp_drawing = mp.solutions.drawing_utils
mp_face_mesh = mp.solutions.face_mesh

#file_list=["radu-florin-JyVcAIUAcPM-unsplash_small.jpg"]
file_list=glob.glob('*.jpg')

# For static images:
#drawing_spec = mp_drawing.DrawingSpec(thickness=1, circle_radius=1)
drawing_spec = mp_drawing.DrawingSpec(thickness=1, circle_radius=1, color=(0, 0, 255))
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):
    image = cv2.imread(file)
    cv2.imshow('org', image)
    # 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.FACE_CONNECTIONS,
	  landmark_drawing_spec=drawing_spec,
	  connection_drawing_spec=drawing_spec)
    cv2.imshow('result', annotated_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    #cv2.imwrite('/tmp/annotated_image' + str(idx) + '.png', annotated_image)

4.3 この章のまとめ

  • Python用のMediaPipeで顔のランドマーク(Python)検出を行った。

5 今後

  • 今後も文書追加していきます。

6 この文書のチェンジログ

  • 2021/02/19 初版
  • 2021/05/17 長期放置の後、修正、追加

著者: NM Max

Created: 2021-05-20 木 05:49

Validate

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です