【MediaPipe】Multi Hand Trackingで誰が商品を取ったか判別できる条件を確認する
カフェチームの山本です。
前回は、Multi Hand Trackingの検出結果を利用して、誰が商品を取ったかを判定する方式を考え、カフェで撮影した動画で実験をしました。用意したデータでは正しく紐付けできたものの、精度が落ちそうな場面が見受けられました。
今回は、前回考えた方式では、どのような状況だと正しく判定できないが調べるため、条件を変えて撮影した複数の動画に対して、正しく判定できるかを簡単に確認します。
結論としては、ユーザと商品が近い場合と、手を上からかぶせる形で商品を取った場合に判定が間違いやすいことがわかりました。
(MediaPipeに関連する記事はこちらにまとめてあります。)
実験
考えた方式や概要などについては、前回をご参照ください。
仮説
今回の実験の仮説(確認すること)は、以下のようなものです。
- 通常の距離であれば、正しく判定できる
- ユーザと商品の距離が近づくほど、判定の精度が悪くなる
- 左右の立ち位置によって、判定の精度が変わる
- 商品を取る際の手の形によって、判定の精度が変わる
データ
今回利用するデータとして、以下のように立ち位置(距離・左右)・手の出し方を変えながら、商品を手に取る様子を撮影し、計28(=7*4)個の動画を用意しました。
商品は、小さなパッケージ状のお菓子を利用しました。
立ち位置
以下の7箇所にそれぞれ立ちました(後から気づきましたが、目の前の右・左を忘れていました)。
- 通常:50~60cm程度(普段自分が商品を取るくらいの距離)
- 右・正面・左(=位置0・1・2)
- 近づく:30cm程度(通常の位置より、一歩ほど近づいた距離)
- 右・正面・左(=位置3・4・5)
- 目の前:10cm程度(商品を取り出すと目の前にくる位の距離)
- 正面(=位置6)
手の形
以下の4種類の動作で商品を取りました。すべて右手で行いました。
- 上からかぶせる
- 上側をつまむ
- 真ん中を掴む
- 下から支える
分析方法
MediaPipeのMulti Hand Trackingで各動画に映っている手を検出し、手を囲うバウンディングボックスの角度がユーザの方向を向いているかを目視で確認しました(今回は大まかの傾向を知るにとどめ、正確な計測までは行いませんでした)。判定基準はおおよそ以下のようにしました。
- OK:手のバウンディングボックスの角度が、ユーザの方向を向いている
- Soso:手のバウンディングボックスの角度が、おおよそユーザの方向を向いている(15度程度のズレ)
- Bad:手のバウンディングボックスの角度が、あまりユーザの方向を向いてない(30度程度のズレ)
- NG:手のバウンディングボックスの角度が、ユーザの方向を向いていない(45度程度のズレ、それ以上)
結果
検出結果動画は再生リストにまとめてあります。各結果に関して、各観点ごとに表を見ながら分析していきます。
分析:距離
距離ごとにならべると以下の表のようになりました。通常の距離では、おおよそうまく判定できましたが、手を上からかぶせる形にすると判定できない場合がありました。また、距離が近づくについて、判定の精度が悪くなっていきました。
距離が近づくにつれて、商品を取る際に肘を曲げる形になり、外側に手の方向が向いてしまうため、今回の方式ではうまく紐付けできませんでした。
Name | (距離) | (左右) | 上からかぶせる | 上側をつまむ | 真ん中を掴む | 下から支える |
---|---|---|---|---|---|---|
位置0 | 通常 | 右 | Bad | Soso | Soso | Soso |
位置1 | 通常 | 正面 | Bad | Soso | Soso | Soso |
位置2 | 通常 | 左 | Good | Good | Good | Good |
位置3 | 近づく | 右 | NG | Soso | Soso | Soso |
位置4 | 近づく | 正面 | NG | NG | NG | Good |
位置5 | 近づく | 左 | Soso | Soso | Soso | Soso |
位置6 | 目の前 | 正面 | NG | NG | Bad | Soso |
分析:左右
左右の条件ごとに並べると、下の表のようになりました。左に立っているとうまく判定でき、正面や右に立つとうまく判定できない状況が現れました。
動画を見てみると、右や正面に立つと、腕の方向が頭の方向とずれてしまうのに対し、左側に立つと腕の方向が頭の方向に近くなるため、判定がうまくいっていることがわかります。
Name | (距離) | (左右) | 上からかぶせる | 上側をつまむ | 下から支える | 真ん中を掴む |
---|---|---|---|---|---|---|
位置5 | 近づく | 左 | Soso | Soso | Soso | Soso |
位置4 | 近づく | 正面 | NG | NG | Good | NG |
位置3 | 近づく | 右 | NG | Soso | Soso | Soso |
位置2 | 通常 | 左 | Good | Good | Good | Good |
位置0 | 通常 | 右 | Bad | Soso | Soso | Soso |
位置1 | 通常 | 正面 | Bad | Soso | Soso | Soso |
位置6 | 目の前 | 正面 | NG | NG | Soso | Bad |
分析:手の形
上の2つの表を見てみると、下から支える形で商品を取った場合、すべての条件で正しく判定できています。真ん中を掴む場合と上側をつまむ場合は、距離が近く正面で商品を取った場合に正しく判定できませんでした。上からかぶせる場合だと、立ち位置が左でないと正しく判定できませんでした。
動画を見てみると、手の形と腕の形が連動していることがわかります。下から支える形だと、肘が下に来るため、手と肘と肩が(画像内で)一直線上に並びます。真ん中を掴む・上側をつまむ場合、肘が横になっており、手の方向も外側を向きます。上からかぶせる場合、より肘が横になるため、手の方向もより外側を向いてしまっています(実際に手を動かしてみると、自然とそうなっているのがわかります)。下の図は、下から支える、横から掴む、上からつまむ、上からかぶせる、の順で並んでいます。
分析まとめ
最初に挙げた、以下の仮説は正しいことがわかりました。3点目に関しては、左側(ユーザから見ると商品に対して右側)から商品を取った方が精度が良いことがわかりました。4点目に関しては、下から支える形が一番良く、次に真ん中を掴む・上側をつまむ形がよく、上からかぶせる形が一番悪くなることがわかりました。
- 通常の距離であれば、正しく判定できる
- ユーザと商品の距離が近づくほど、判定の精度が悪くなる
- 左右の立ち位置によって、判定の精度が変わる
- 商品を取る際の手の形によって、判定の精度が変わる
結論・考察
今回の結果から、今回の方式(=手のバウンディングボックスの方向にいるユーザをその商品を取ったユーザとして紐付ける)では、対応できない条件があることがわかりました。
対策
この問題への対策としては、以下のような方法と考えられます。
- バウンディングボックスの角度を補正する。例)手の形によって検出された角度を補正する(上からかぶせていた20度、横から掴んでいたら10度、それぞれ左にずらす)
- 手のLandmark中のバウンディングボックス以外の情報を利用する。例)手首と各指の根本の5点を利用して計算する
- 身体の骨格の情報と組み合わせる。例)身体の骨格と手の骨格の組み合わせの中で、最も自然なものを選ぶ(コスト最小化的な)
まとめ
今回は、前回考えた方式がどのような条件であれば正しく判定できるかを実験で調べました。結果として、ユーザと商品が近い場合と、手を上からかぶせる形で商品を取った場合に判定がずれることがわかりました。
今後は、上に挙げた対策のどれが効果的か、調べていきます。