AIで高い認識精度を実現!
ジェスチャ認識UI開発ツールの実力を試してみた。

画像
e-ai-3d-gesture

組み込み機器のUI(ユーザインタフェース)としてジェスチャを採用し、「触れずに」機器を操作できるようにする事例が増えてきています。しかし、このジェスチャのUI採用については、開発のハードルは決して低くはありません。想定していた手の動きを認識しない、開発した人以外の手では反応が悪いということもよくあります。
静電容量式タッチセンサの開発支援ツール QE for Capacitive Touchは、AI(ディープラーニング)を利用した高精度なジェスチャ・ソフトウエアを30分程度の短時間で立ち上げることが可能です。ここでは、このツールのメカニズム、ジェスチャのデザイン、ツールを利用しながら操作感や完成したジェスチャの認識精度を解説します。

以下の項目に沿って、順に説明します。

  1. メカニズム
  2. ジェスチャのデザイン
  3. ジェスチャの開発 <その1 : AI学習用データの作成>
  4. ジェスチャの開発 <その2 : AIの学習、Cソース組み込み>
  5. ジェスチャの開発 <その3 : モニタリング>
  6. 完成したジェスチャの認識精度

 

メカニズム

ツールで作成するジェスチャ・ソフトウエアは、ディープラーニングのテクノロジーを利用します。複数の電極(センサー)に手を近づけることで変化する静電容量の値をAIに学習させ、“スワイプ”や“プッシュ”などのジェスチャを見分けることができるようになります。この超小型のAIを簡単にデバイスに組み込める仕組みを実現させたうえで、e-AIでは、完全にエンドポイントのデバイス内で閉じたAI処理を行うので、安全で高速な反応を実現しています。

画像
mechanism-image

 

ジェスチャのデザイン

センサーの信号波形の形からジェスチャの種類を判断する仕組みのため、理論的には波形の形さえ異なればどんなジェスチャも区別できます。
製品適用時の例として、例えば“左右のスワイプ”操作で項目を選択して、“プッシュ”操作で確定、上から左へ90度手を動かす“リターン”操作で戻る、といったジェスチャ入力が考えられます。
なお、センサーに手を近づけてから離れるまでを1つのジェスチャと判断するため、ジェスチャの切れ目では一度手をセンサーから離す必要があります。

画像
design-image

非接触UIの例として、“左スワイプ”、“右スワイプ”、“上スワイプ”、“プッシュ”の4種類のジェスチャを作成してみます。
QE for Capacitive Touchワークフローの[ジェスチャ構成を編集する]項目からジェスチャ構成を編集するダイアログを表示します。“左スワイプ”、“右スワイプ”、"上スワイプ"、“プッシュ”は、プリセットから選択して、"下スワイプ"は外します。もしここで独自のジェスチャ(例えば ”リターン”)を作成したい場合は、[ジェスチャの新規作成]ボタンから新しく登録できます。名前は“return”などにします。アイコンも登録が可能ですので、作成した画像ファイルを登録することができます。登録したアイコンはツール内のジェスチャ判別に使われるのみであり、プログラムには関係しませんので、利用者がわかりやすい画像を登録することをお勧めします。

 

ジェスチャの開発 <その1 : AI学習用データの作成>

実際にジェスチャAIを作成します。
高い精度(正解確率)のAIを開発するためには、十分な量の学習データセットを、パラメータを最適に設定したニューラルネットワークで学習させることが必要です。QE for Capacitive Touchでは、それらの試行錯誤に必要な工程をすべて自動化しているので、非常に簡単です。
QE for Capacitive Touchの[ジェスチャを登録する]項目から専用のダイアログを開き、まずは“左スワイプ”からAI学習用データを登録していきます。エミュレータを接続し[ジェスチャ登録を開始する]ボタンを押すと、評価ボード上で自動的に波形取得用のプログラムが動きます。あとはセンサーの上で実際に右から左へ手を動かすジェスチャ(左スワイプ)をしていくだけです。

画像
aicreate-movie

ディープラーニングを用いたAIの精度は、一般的に学習データの品質に左右されます。学習データ数が少ない、間違ったデータの登録があることは、よい結果につながりません。
例えば「ネコ」の写真を見分けるAIを開発する時には大量のネコの写真を見せて学習させますが、ネコの写真が10枚と少ない、「イヌ」の写真が混在するということがあると、よい結果にならないことは想像できます。
ダイアログ中に説明されている通り、このツールでも1つのジェスチャあたり50個以上のデータ数を推奨しています。とはいえ、手を動かすだけなので50個の登録はあっという間にできました。もしも、少し波形が複雑になる“リターン”などがある場合は少し増やして、それぞれ80個程度ずつ登録すると良いでしょう。
QE for Capacitive Touchは、データのインポート・エクスポート機能を備えているため、複数の開発者でデータを取得して、あとで一つにまとめることも可能です。このようなやり方をすると、ジェスチャの波形が特定の個人の手の動きに過度に寄らないため、誰の手の動きでも反応する良いジェスチャになりやすいです。また、電極や筐体の形の都合により各センサーが均等に配置できないような場合でも、その筐体ならではの信号波形を用いた学習データを作成できるため、開発する製品に合ったAIが開発可能です。

 

ジェスチャの開発 <その2 : AIの学習、Cソース組み込み>

AIの学習は完全に自動化されています。[開始]ボタンを押したら少し待つのみです。学習データを自動的に拡張(増やす)するなどの前処理の後、AIの学習が進みます。
グラフの青いラインは、学習中のAIの精度を表しています。学習が進むにつれ正解率が上がっていくのがわかります。5分ほど待ちグラフがターゲットの赤いラインを越えていれば、精度に問題がないことを判断できます。ここで上手くラインを超えない場合は、学習データを見直します。ポイントは、データを増す、間違ったデータの削除、などです。

画像
learning-image

この学習用のダイアログにはいくつか設定項目もありますが、まずはデフォルトのままで利用します。
唯一、AIモデル(ニューラルネットワーク)のサイズの選択は悩むところですが、今回はデフォルトのまま[中]サイズにします。基本的にはAIの精度とROM/RAMサイズはトレードオフの関係なので、使用するマイコンに入るのであれば大きいサイズのものを使ったほうが良い精度になります。

学習が完了したらいよいよマイコンに組み込みます。
まずはQE for Capacitive Touchのワークフローの[Cソースを生成する]ボタンを押します。学習結果をCソースに変換する処理が自動で動き、以下のソースファイルがプロジェクトに登録されます。

画像
learning-image2

qe_gesture_user.cがジェスチャを認識した後の処理を記載するソースファイルです。このファイルを開いて、コードを見ると、登録したジェスチャ名ごとにswitch文が並んでおり、ジェスチャAIが完成した後でここに最終的な各ジェスチャの処理を書き込めばいいだけの構成になっていることがわかります。

 

ジェスチャの開発 <その3 : モニタリング>

開発したジェスチャAIを早速動かしてみましょう。
QE for Capacitive Touchワークフローの[モニタリングの開始]から専用ビューを開き、エミュレータに接続しプログラムを実行します。ジェスチャ用のモニタリングビューの右上にある[モニタリングを有効にする]ボタンを押すと、センサー波形の描画が開始します。
AIに学習させたジェスチャを実際にやってみます。

画像
monitoring-movie

この動画を見てわかるとおり、かなりしっかりと認識されることがわかります。
AIが判定したジェスチャはアイコンで表示され、そのジェスチャである可能性(確率)が[スコア]欄にでています。どのくらいのスコア(確率)でジェスチャと認識するかどうかの閾値や、どのくらい短いジェスチャ・または長いジェスチャまで認識したいかなどのパラメータを、手を動かしながら調整できます。

AIのチューニング方法も用意されています。ジェスチャ判定のスコアが閾値に満たなかったジェスチャは「-」ハイフンアイコンで表示されます。また、間違ったジェスチャに判断されてしまったということもあるでしょう。その場合は、モニタリングビューの[履歴]からその波形を選択し、正しいジェスチャの種類の学習データへボタン一つで追加できます。想定した通りの動きになっていない場合は、この機能を利用してAIをチューニングしていきます。

 

完成したジェスチャの認識精度

精度も高く、リアルタイムに推論できている
ワークフローに沿ってここまで30分ほど作業してきました。
実際にできたジェスチャ・ソフトウエアを試してみると、実用上問題のない高い精度で、推論速度も特に遅いと感じることがない速度で動作できていることを確認できます。AIの専門知識が必要になる操作も特にないので、組み込みエンジニアであればどなたでも開発可能です。
実際のところ、まだまだジェスチャ操作で操作するような機器を街で見ることはまだ少ないですが、音声認識など他の非接触UIとも合わせて今後ニーズがより強まってくるだろうと感じています。どんなことができるのかを考えているエンジニアの皆さんには、このQE for Capacitive Touchと3Dジェスチャ用評価ボードを、一度触ってみていただきたいと思っています。

いろいろなジェスチャを試す
スワイプなどシンプルなジェスチャは十分使えることが分かりましたので、少し複雑なジェスチャも試します。手を一回転させる動きや、センサーの端から内側にサッと手を動かすエッジスワイプ、“1”や“2”などの文字型のジェスチャです。
結果を表にまとめました。学習データやモニタリング時の手の動きにも大きく左右されますので、あくまで参考値としてご覧ください。

精度 (%)
AIモデル スワイプ
上下左右4方向
斜めスワイプ
斜め含め8方向
エッジスワイプ
4方向
回転
時計回り/反時計回り1回転
数字
指で1,2,3,4を描く
100 96.9 100 86.7 100
93.8 87.5 85 66.7 75
90.6 75 85 50 55

スワイプなど比較的簡単なジェスチャはどのサイズのAIモデルでも十分な精度が出ていることがわかります。それに比べて回転など比較的複雑なジェスチャは、使用するAIモデルサイズによって精度に差が出てきていることもわかります。理論上、大きなAIモデルを使用する場合のほうが推論時の計算量が多いため、一概に大きいAIモデルを使えばよいというものではありませんが、この表を参考にモデルを選択し、実際にモニタリングビューで動かしてみて目的に動作になっているかをお試しください。

この例で使用した環境

  • 統合開発環境:e² studio V2022-01
  • QEツール:QE for Capacitive Touch V3.1.0
  • CTSU FITモジュール(r_ctsu_qe)2.00
  • QE Touch FITモジュール(rm_touch_qe)2.00
  • CPUボード:RX130 CapTouch CPU Board – RTK0EG0004C01001BJ
     *上記マイコンを使用していますが、タッチIP CTSU/CTSU2搭載の全マイコンに対応しています。
      (RX, RA,RL78の各ファミリ, Renesas SynergyTM プラットフォーム)
  • センサボード:3D Gesture Electrode Board - RTK0EG0023B
  • エミュレータ:E2エミュレータLite(および E2エミュレータ用ユーザインタフェースケーブル)
  • コンパイラ:CC-RX V3.03.00

 

 

ドキュメント/ダウンロード

QE for Capacitive Touch -3Dジェスチャ認識 は、ルネサス統合開発環境e² studioの拡張機能です。
ルネサス静電容量タッチキーソリューションを応用した非接触ユーザインタフェースとe-AIソリューションを組み合わせて実現しています。
各詳細およびダウンロードは以下の製品ページでご確認ください。