LoginSignup
72
49

More than 1 year has passed since last update.

Pythonパッケージ版のMediaPipeが超お手軽 + 簡易なMLPで指ジェスチャー推定

Last updated at Posted at 2020-12-16

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分類(静止、時計回り、反時計回り、移動)するモデルを
組み合わせて動かしています。
Finger Gesture Demo

「パー」「グー」「指差し」の分類

hand_landmarks.png
手のランドマークのIDはこんな感じ↑なので、、、

preprocess1.png
こんな感じに前処理して、、、(ID:0が最終的に0,0になっているの少々無駄ですが、、、)


こんな感じの簡易なMLPにぶち込んでます🦔

「静止」「時計回り」「反時計回り」「移動」の分類

preprocess2.png
人差指の座標履歴を16点ほど取って、こんな感じに前処理して、、、(T-15が最終的に0,0になっているの少々無駄ですが、、、)


こんな感じの簡易なMLPにぶち込んでます🦔

プログラム

上記のプログラムもGithubで公開しています。
適当MLPなので、もっとイカした構造にすると、もっと精度が上がります🦔

72
49
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
72
49