今回、mediapipeの動き方を調査して、ハンドトラッキングの仕組みについて話させていただきます。
伝えたいこと
- mediapipeの概要
- ハンドトラッキングモデルの仕組み
mediapipeの概要
MediaPipeは、クロスプラットフォーム(デスクトップ、モバイル、ウェブ、Raspberryなどのマイコン)のマルチモーダル適用MLパイプラインを構築するためのフレームワークです。
コンセプト
- グラフ(Graph):以上の画像のようなノードのネットワークを保持します
- パケット(Packet):基本データユニットです。パケットの中にはペイロード(テキストや画像データなど)とタイムスタンプがあります
- ノード(Nodes):インプットストリームのパケットを処理してアウトプットストリームに新しいパケットを抽出します
- ストリーム(Streams):一連のパケットを伝送する2つのノード間の接続です
- 側パケット(Side packets):タイムスタンプのない単一パケット(設定値とか、静的なワンタイムインプット)
ハンドトラッキンググラフ
試しのリンク:https://viz.mediapipe.dev/demo/hand_tracking
参考:https://webbigdata.jp/ai/post-3992
## 仕組み
ハンドトラッキンググラフ:
インプットノード(input_frames_gpu):ウェブカメラからビデオデータ
- インプット動画を水平方向に反転する(ImageTransformation)
- 後ろのフローに1つ画像だけ権限をする(FlowLimiter)
- 画像全体を操作し、手のバウンディングボックスを返す手のひら検出器モデル(HandDetectionというノード)
- インプット:画像
- アウトプット:手のバウンディングボックス(NORM_RECT)
- 手のひら検出器によって定義されたトリミングされた画像領域で動作し、忠実度の高い3D手のキーポイントを返す手のランドマークモデル(HandLandmarkというノード)。
- インプットは
- 画像(IMAGE)
- 手があるバウンディングボックス(NORM_RECT)
- アウトプットは
- 手の21位置(LANDMARKS)
- 右手か左手か(HANDEDNESS)
- 現時点の手のバウンディングボックス(NORM_RECT)
- そのハウンディングボックスにある手があるかどうか(PRESENCE)
- インプットは
一旦今回ここまでです。次、ハンドトラッキンググラフのコードを編集してみて簡単なことをやりましょう!