【MediaPipe + OpenCV】ジェスチャ入力方式のソフトウェアキーボードを作る (2) -ジェスチャ基本入力編-

前回の記事はこちら

ログを出力するところまで出来ている状態です。

今回は「ジェスチャ基本入力編」ということで、
ここからキーボード作成/ジェスチャ入力まで一気に実装していきます。

現状の暫定版demo


実装

全実装は以下。
(制作途中のものです)



各指に対するキーマップは以下の通りです。

・左手
 小指... Q,A,Z
 薬指... W,S,X
 中指... E,D,C
 人差し指... R,F,V,T,G,B


・右手
 人差し指... Y,H,N,U,J,M
 中指.. .I,K
 薬指... O,L
 小指... P

各指と親指が触れるジェスチャをした場合に対応キーマップが選択され、
さらに複数回親指と触れさせることで特定のキーを選択します。
(demoをみていただくのが早いと思います)

左手人差し指、右手人差し指に関しては、今後何かしらのジェスチャで左右のキーを選択できるようにしていきたいと思います。

簡単にコードの解説をすると、
createKeyboardでキーボードを作成/表示し、
judgePressKeyで各指が親指に触れたかどうかを判定し、
lightOnKeysで指のキーマップに対抗したキーを選択しています。
コードとしては「とりあえず動く」レベルのもので、まだまだ改良の余地ありですね。

最後に、以下のコマンドで実行します。

bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 \
mediapipe/examples/desktop/multi_hand_tracking:multi_hand_tracking_cpu 
export GLOG_logtostderr=1 
bazel-bin/mediapipe/examples/desktop/multi_hand_tracking/multi_hand_tracking_cpu

demoのように動けば成功です。

次回

今後は、左手人差し指、右手人差し指に関して、ジェスチャで左右のキーを選択できるよう改良していきます。
また、精度の改善も行っていく予定です。