【what is this】手の指のランドマーク(キーポイント)21点をリアルタイムに検出する学習モデルhandpose (MediaPipe Hands)[1]があります。そのAPIを利用して、5本の指で0〜31までを数えるジェスチャを認識するデモアプリを作成しました。
■5本の指で0〜31を数える
2進法を使えば、5本の指で、0〜31を数えることができます。具体的には、図1のように、親指、人差指、中指、薬指、小指を折り曲げることで、各々1、2、4、8、16を与えます。通常、深層学習でこのようなパタンを認識させる場合は、この32種のそれぞれに500枚程度の画像を用意して学習させます。しかし、ここでは、そのような学習をせずに、handpose (MediaPipe Hands)から得られるランドマークを利用して簡単に認識させたい。
■handpose (MediaPipe Hands)の利用
handposeでは、図2のとおり、5本の指の関節合計21点をリアルタイムに検出します。それを、PythonやJavaScriptからAPIで使えるようになっています。ここでは、上記の目的に沿って、21点のうち、15点を利用します。すなわち、図1にあるとおり、各指の先端、第1関節、第2関節の検出結果のみを使います。
各指の折れ曲がりの判定は、図1の説明にあるとおり、指の先端と第2関節の座標の差分を使って行います。ただし、親指の場合は、x座標を、その他の指はy座標に着目します。例えば、薬指の場合は、先端のy座標が第2関節のy座標よりも大きければ折れていることになります。図1の左図では、薬指と親指が折れていますので、9(=8+1)を意味します。
正面から撮影するという条件下では、このようなジェスチャ32種を、ほぼ100%認識することができました。「学習」を行わずに、短めのPythonプログラムによって比較的簡単に実現できたことに驚きます。ただし、ランドマークがリアルタイムに得られるというのは、すでにそのための深層学習が十分に実行されているからです。
状況によっては、指の折れ状態をもっと厳格に(他の関節点も利用するなど)する必要があるかも知れません。この例以外にも、何か応用ができそうです。
0 件のコメント:
コメントを投稿