- この記事はTensorFlow Advent Calendar 2020の9日目の記事です。
MediaPipe(Pythonパッケージ版)
Pythonパッケージ版のMediaPipeが超お手軽です。
pip install mediapipe
pipでインストールして、、、
import mediapipe as mp
importして、、、
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(
min_detection_confidence=0.7,
min_tracking_confidence=0.5,
)
インスタンス作って、、、
image = cv2.imread('XXXXXXXX.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
results = hands.process(image)
process()に画像投げ込んだら、手のランドマークをゲット🦔!
※別途、描画処理が必要です。
CPU動作でもかなり早い!
むしろGPU対応していない気がする(ドキュメントのどっかに非対応な旨が書いてあるはあず、、、
MediaPipe(Pythonパッケージ版)がサポートする機能(2020/12/17時点)
Pythonパッケージ版のMediaPipeは、現時点で以下の4機能をサポートしています。
Hands
Pose
Face Mesh
Holistic(Pose, Face Mesh, Handsを一度に推定)
MediaPipe(Pythonパッケージ版)サンプルプログラム
おまけ:簡易なMLPで指ジェスチャー推定
あまりにも簡単に手のランドマークが取れるようになったので、
簡易なMLPと組み合わせて、以下のようなプログラムも作ってみました。
せっかくMediaPipe自体の動作が早いので、なるべく邪魔しないようにTensorflow-Lite
で作っています。
手のランドマーク座標を入力に3分類(パー、グー、指差し)するモデルと、
指差し時の軌跡を入力に4分類(静止、時計回り、反時計回り、移動)するモデルを
組み合わせて動かしています。
「パー」「グー」「指差し」の分類
こんな感じに前処理して、、、(ID:0が最終的に0,0になっているの少々無駄ですが、、、)
「静止」「時計回り」「反時計回り」「移動」の分類
人差指の座標履歴を16点ほど取って、こんな感じに前処理して、、、(T-15が最終的に0,0になっているの少々無駄ですが、、、)
プログラム
上記のプログラムもGithubで公開しています。
適当MLPなので、もっとイカした構造にすると、もっと精度が上がります🦔