ToF測距センサを活用した3Dジェスチャ認識

　　ジェスチャ認識は、コンピュータ･サイエンスと言語技術のトピックであり、数学的アルゴリズムによって人間のジェスチャを解釈することを目的としています。機械と人間のつながりをより豊かにする架け橋として、よりスマートで豊かな生活の実現に貢献します。すでに、画像 / 映像ベースのジェスチャ認識に関する研究はいくつかありますが、一般的に2Dカメラが使用されています。今回は、ToF（Time-of-Flight）測距センサをベースにした3Dジェスチャ認識という新たなソリューションについて説明します。
コロナ禍を経て、非接触ソリューション向けのユーザ･インタフェースに対するニーズが大きく増加しました。ソーシャル･ディスタンスを保つことが当たり前の環境になりつつある一方、日常生活では依然として、ATM、自動販売機、工場設備など、特に公共の空間で複数のモノに触れる必要があります。STの新しいセンシング技術と強力なAIアルゴリズムを組み合わせることで、3Dジェスチャ認識のデモで非接触ソリューションを実現できました。
デモの概要：
　　このデモは、現時点で、左右 / 上下スワイプ、タップ、ダブル･タップ、時計回り / 反時計回り回転の8つのジェスチャを認識できます。  
　　STのマルチゾーン測距対応ToF測距センサ「VL53L5CX」を入力として使用し、STM32マイクロコントローラ（マイコン）上でニューラル･ネットワークを実行してから、最終的にPC上のGUIで認識結果を表示します。使用したハードウェアは、STM32 Nucleoボード「STM32F401RC」とX-Nucleo機能拡張ボード「VL53L5 EVK」です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/8a74f9aa-a6bd-0b15-6fbd-0b584ba948ff.png)

  
入力センサ：
VL53L5CX（2021年発表）は、STのFlightSense製品ファミリで提供されるマルチゾーン測距に対応したToF測距センサです。

特徴：
- 高速かつ正確なマルチゾーン測距センサ
–	4 x 4（16ゾーン）または8 x 8（64ゾーン）のマルチゾーン測距出力
–	ホスト･ウェイクアップ用の割り込みプログラム可能なしきい値を持つ自律型低消費電力モード
–	最大400cmの測距
- 	広いFoV（視野角）を持つオール・イン・ワンの小型モジュール 
–	エミッタ： 940nmの不可視光レーザーVCSELと内蔵アナログ･ドライバ 
–	トランスミッタとレシーバの両方にDOEを使用した対角63°の正方形FoV
–	サイズ： 6.4mm x 3.0mm x 1.5mm
- 	簡単に実装可能
–	リフロー対応 
–	柔軟な電源オプション：3.3Vまたは2.8Vの単一電源、あるいは3.3Vまたは2.8V AVDDと1.8V IOVDDの組合せ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/fb064206-e5f5-c024-dfe8-bbae82f8bc73.png)

データセットのキャプチャとラベル付け：
   ニューラル･ネットワーク･モデルのトレーニングにおいては、各種ジェスチャに関する描写データを十分にキャプチャすることがきわめて重要です。
   Pythonで開発された特別なGUIを使用することで、ジェスチャを実行しながらToF測距センサから簡単に生データをキャプチャしてラベル付けを行い、独自のデータセットを作成できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/669ddf03-2891-0dfd-c665-77753ff06aa6.png)

データセットには、左右 / 上下スワイプ、タップ、ダブル･タップ、時計回り / 反時計回り回転の8つのジェスチャそれぞれに対する数千のサンプルが含まれています。
    もちろん、同じツールを使用して、新しくカスタマイズしたジェスチャ用のデータセットも作成可能です。

ニューラル･ネットワークの構築とトレーニング：
   ニューラル･ネットワークの構築に関しては、シンプルで柔軟性が高く、強力なフレームワークであるKerasを使いました。ジェスチャは一連の動作であるため、CNNとGRUレイヤを使用してモデルを作成することにしました。約50回のトレーニング後、トレーニングおよび検証のデータセットで95%の精度を記録し、損失も約0.08と良好でした。
   テスト用のデータセットでも、各ジェスチャで優れた精度が得られています。F1スコアは96%に達することもあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/295d07a0-f567-8089-70e7-20299c12a763.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/aaa3a132-3fbd-071f-ac78-f474bfa201a6.png)

マイコン側でのジェスチャ･モデルの実装：                                 
   前提条件：STM32CubeMXに拡張パッケージのX-Cube-AIをインストールする必要があります。最新バージョンは。2024年7月時点で9.0.0であり、sklearnの機械学習モデルにも対応します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/f9b08408-a31a-a106-0d2e-5bafcfb0c901.png)

X-Cube-AIの設定：使用する開発ボードを選択した後、[Software Packs]->[Select Components]の順に選択するか、ホットキーのAlt+Oを使用してX-Cube-AIをロードできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/0e710798-1e80-2ee9-0bcf-14747bb9c1ee.png)

  NN（ニューラル･ネットワーク）モデルをアップロードし、関連するSTM32 NNライブラリを生成するには、[Software Packs Component Selector]ウィンドウで、X-Cube-AI/Coreバンドルにチェックを入れる必要があります。次に[OK]をクリックして選択内容を確定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/dce2874c-5ed8-51a1-5853-5546007be05c.png)

X-CUBE-AIコンポーネントの有効化：
[STMicroelectronics X-CUBE-AI 7.0.0]をクリックして、最初のAI設定ウィンドウを開きます。[Artificial Intelligence Core]にチェックを入れ、X-CUBE-AIコア･コンポーネントを有効にします。アドオンのAIアプリケーションを追加するには、[Artificial Intelligence Application]にもチェックを入れる必要があります。

NNのロード：
1.ネットワークを追加
2.モデル名を「gesture」に変更
3.入力モデルのタイプで「Keras」を選択
4.[Browse]ボタンを選択して実装するモデル（gesture.h5）を選択
5.[Analyze]ボタンをクリックしてモデルを解析

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/6d15b822-c22b-0292-2049-c6dc0bd3bb86.png)

   解析が完了すると、モデル･レイヤの詳細なレポートとともに、このモデルで使用すべきMACC、Flash、RAMの情報が表示されます。
   
最後にSTM32CubeMXで[Generate code]を押すと、X-CUBE-AIフォルダがプロジェクト内に作成されます。このフォルダには、以下のような有用なファイルが含まれています。
-	トポロジ用のgesture.cファイルおよびgesture.hファイル
-	荷重 / バイアス用のgesture_data.cファイルおよびgesture_data.hファイル
-	app_x-cube-ai.cファイルおよびapp_x-cube-ai.hファイル（AIクライアント･アプリケーションで使用できる汎用のマルチネットワーク推論APIも含む）

　　性能向上のためにデータセットの荷重を更新する場合は、gesture_data.cファイルおよびgesture_data.hファイルを更新する必要があります。更新は簡単です。

結果の表示：
   最後に、uartログをPCに出力して、GUI側に予測結果を示します。ToF測距センサの前で、20cm～80cmで時計周りに回転するジェスチャをすると、GUIに以下の図のような予測結果が表示されます。パーセンテージは、このジェスチャである確率を示しています。
 

　　以上で3Dジェスチャのデモは完了です。このソリューションは、以下のようなアプリケーションに最適です。
•	スマート家電： 手が汚れていたり、濡れていたりする場合にジェスチャ認識を使用してさまざまな生活家電を制御
•	ゲーム機などのインタラクティブなエンタテインメント
•	ヒューマンマシン･インタラクション： 機械をよりインテリジェントに、人々の安全を強化するために活用
   VL53L5センサとSTM32開発ボード、そして強力なX-Cube-AIライブラリを使用して、独自のジェスチャ認識デモをお試しできます。