【MediaPipe】Multi Hand Trackingの左手右手の判定をもう少し詳しく見てみた

2020.06.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

カフェチームの山本です。

以前の記事で、MediaPipe Multi Hand Trackingのv0.7.5を動かし、変更点を調べました。そこで、新しく右手左手の判定(Handedness)が加わっていることを確認しました。

【MediaPipe】v0.7.4 → v0.7.5 の変更点を調べて、Android APKを動かしてみた

前回は、その結果を利用して骨格と手の対応付けようとしました。しかし、出力される左右の判定が不正確な場合が多く、対応付けがうまくできないことがありました。

【MediaPipe ✕ Cubemos SDK】骨格検出した身体と手を対応付ける(その2:3D動画編)

今回は、この右手左手の判定を詳しく見て、どのような状況なら正しく判定できる/できないのかを調べます。

(MediaPipeに関連する記事はこちらにまとめてあります。)

【MediaPipe】投稿記事まとめ

動画で確認

結果

右手左手の判定の様子は、下の動画のようでした。使用したMediaPipeのバージョンはv0.7.5です。

左上の数値が右手らしさを表すスコア(左手と判定されると高くなり、右手と判断されると小さくなる)を表示しています。手を囲う四角や数値の色は、スコアが高いほど赤く、低いほど青く表示され、中間の場合は紫色に近づきます。

今回の場合、動画中に右手が表示されているため、スコア値はずっと1で、色は赤であるのが理想的な正しい判定ということになります。

分析

結果の動画を見てみると以下のことがわかりました。

  • 判定の精度が手の形に大きく依存している。平たいと間違えやすく(0~2秒目)、少し指を曲げてると正しく判定されやすい(2~4秒目)。
  • ただし、指を曲げていても、判定結果は完全に安定しているわけではなく、たまに判定が逆になるフレームがある。
  • 正しく判定できているフレームは、高いスコア(0.99以上など)を出力する。
  • 正しく判定できていないフレームは、中間的な値(0.4など)や、かなり低い値(0.1など)になる場合がある。

考察

上の結果から、正しい判定を得るためには、(例えば)以下のような工夫をする必要がありそうです。

  • 判定のスコア値が高く、確実に判定できるところだけを利用する
  • 一定時間のウィンドウ内でスコアを時間方向に平均して、一定以上になったら判定できたとみなす

まとめ

今回は、手の左右の判定(Handedness)の様子を動画で確認しました。検出結果をそのまま利用するのは少し難しく、工夫が必要であることがわかりました。