mediapipeことはじめ
目次
1 概要
- 瞳検出、Dlibよりも細かい顔ランドマーク検出、体のボーン検出など、相当良さげ
2 関連文書
- 本家 https://mediapipe.dev/
- GitHub https://github.com/google/mediapipe
- 文書 https://google.github.io/mediapipe/
- 文書 https://github.com/google/mediapipe/tree/3730fa08ab226aab00d8c30c1c6ea591da6f85e8/mediapipe/docs
- MediaPipe Face Mesh https://google.github.io/mediapipe/solutions/face_mesh
- examples https://google.github.io/mediapipe/getting_started/building_examples.html
- NDK https://developer.android.com/ndk?hl=ja
- NDK ガイド https://developer.android.com/ndk/guides?hl=ja
- ネイティブ API https://developer.android.com/ndk/guides/stable_apis?hl=ja
- 他のビルドシステムで NDK を使用する https://developer.android.com/ndk/guides/other_build_systems?hl=ja
- スタンドアロン ツールチェーン(非推奨) https://developer.android.com/ndk/guides/standalone_toolchain?hl=ja
- CMake https://developer.android.com/ndk/guides/cmake?hl=ja
- NDK ガイド https://developer.android.com/ndk/guides?hl=ja
- MediaPipe in Python https://google.github.io/mediapipe/getting_started/python
- Colab examples
- MediaPipe Face Mesh Colab https://mediapipe.page.link/face_mesh_py_colab
- MediaPipe Hands Colab https://mediapipe.page.link/hands_py_colab
- MediaPipe Pose Colab https://mediapipe.page.link/pose_py_colab
- MediaPipe Holistic Colab https://mediapipe.page.link/holistic_py_colab
- Colab examples
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”を利用。他のファイルでもOK
- https://unsplash.com/photos/JyVcAIUAcPM とかも良いかもsmallあたりが良さげ
- ランドマークの描画の色がわかりにくいので、赤に変更するオプション追加
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 長期放置の後、修正、追加
Created: 2021-05-20 木 05:49