STM32マイコンで低電力コンピュータ･ビジョンを実現： スマート･メータのデモ

一般的な家庭に設置されている水道メータは、その多くがアナログ･メータです。水道の使用量を計算するために、毎月エンジニアが現場に出向き、データを手作業で記録する必要があり、人手を要する面倒な作業が発生します。このようなアナログ･メータに代わり、インターネットに接続されたスマート･メータも徐々に普及していますが、依然としてコストが高いため、一般家庭や企業がそのような代替品にコストをかける余裕がない国々などでは普及が進まず、課題が残っています。 STはこのような課題に対し、通信機能を搭載した汎用32bitマイコンと低解像度のカメラで構成される低消費電力かつ低コストのシステムを使用して、アナログ･メータを効率的にデジタル化する方法を紹介します。
![Picture1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/6cc0187e-2c00-2b45-4e3f-d29a1ec040ab.jpeg)

この記事では、Sub-GHz無線トランシーバを搭載したSTのワイヤレス･マイコンSTM32WL55をベースにしたデモを紹介します。カメラを使用して水道メータの測定値領域をキャプチャしてから、マイコン上で実行されるAIアルゴリズムを使用してメータの測定値を認識します。その後、AI分類アルゴリズムの結果（すなわちメータの測定値）が、STM32WLによってサポートされるSub-GHz長距離無線ネットワーク（LoRaWANなど）を介して送信されます。従来のコネクテッド･デバイスが画像をクラウドに送信するのに対し、STのソリューションは測定値を送信します。そのため、ローカルのAIモデルを通じて、測定値を迅速かつ正確に認識でき、データ･センターに送信するだけで良いというメリットがあります。 

また、この方法では、ユーザ･データのプライバシーを効果的に保護できるだけでなく、推論結果のみをデータ・センターに送信するため、バンド幅も節約可能です。低コスト、低消費電力、高効率な方法でスマート･メータの普及に貢献するソリューションを提供します。

STM32WLシリーズは、長距離の無線通信をサポートする世界初のマイコンです。 
LoRa®に対応した市場初のワイヤレス･マイコンとして、超低消費電力STM32L4シリーズと複数の変調方式をサポートするSub-GHz 無線サブシステムを統合しています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/84c0eb1e-334d-ee54-3107-350963772e29.png)


![Picture3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/91e014d6-8744-b171-4e08-bd5e7d0495ff.png)

STM32には充実した開発エコシステムが用意されており、STM32WLシリーズを使用する開発者は、市場で実績のある成熟した開発エコシステムを利用できます。STM32製品を使った一般的な開発をサポートする、すでになじみのある開発ツールだけでなく、Sub-GHz無線開発専用のソフトウェア･パッケージやAI設計ツールも含まれています。これにより、開発の簡略化や、市場投入までの期間短縮に貢献します。 

開発エコシステムでは、STM32マイコンの初期化コード自動生成ツール「STM32CubeMX」や、動作時変数のモニタリングおよび視覚化ツール「STM32CubeMonitor」、プログラミング･ツール「STM32CubeProgrammer」なども提供されています。 
組込みAI開発ツール「STM32Cube.AI」により、トレーニングされたAIモデルをSTM32マイコンに迅速に実装し、検証テストを行うことも可能です。

STM32CubeWLマイコン･ソフトウェア･パッケージのコンポーネントには、ペリフェラル･ドライバ、STのLoRaWANプロトコル･スタック、SigfoxTMプロトコル･スタック、STのセキュリティ･スタートアップおよびセキュリティ･ファームウェア更新テクノロジーを使用してLoRaWANファームウェアの無線更新を実現するためのサンプル･コードなど、STM32WLシリーズを実行するために必要なあらゆる組込みソフトウェア･モジュールが含まれています。
 
また、STM32WLシリーズのマイコンを搭載した2種類の開発ボード「NUCLEO-WL55JC1」（868pm 915amp 923 MHz）および「NUCLEO-WL55JC2（433Accord470 MHz）」も提供されており、迅速な試作開発が可能です。この記事で紹介するデモは、NUCLEO-WL55JC2をベースにしています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/879877bd-079c-f0f0-c45c-4df684cc9787.png)



NUCLEO-WL55JC2に加えて、このプロジェクトのもう1つの主要コンポーネントとなっているのがカメラです。
STM32WLファミリではDCMIインタフェースを利用できないため、カメラ･モジュール（低コストのOV2640センサに基づく）は、標準のGPIOを介してNUCLEO-WL55JC2開発ボードにあるSTM32と直接接続します。デモでは、再現しやすいように、ほとんどの一般的なオンライン･ストアで購入しやすい電磁カウンタを使用しています。
実験システムを以下の図に示します。

![Picture5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/ca46af82-25cc-b66c-9c06-f918c3c49956.png)



ハードウェアの準備が整ったら、モデル･トレーニングのために自分でデータセットを作成できます。
コンピュータ･ビジョンでは、MNISTデータセットを認識する典型的な入門プロジェクトがあります。MNISTデータセットは、0～9までの10個からなる手書き数字フォントを集めたもので、トレーニング･セットに6万個のサンプル、テスト･セットには1000個のサンプルが含まれます。前処理やフォーマットの手間を最小限に抑えつつ、実際のデータで各種学習手法やパターン認識方法を試してみたいユーザにとって、優れたデータベースです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/433b654d-e18e-cdc5-0d26-7321529acde4.png)

ただし、水道メータの数字のフォントと色はこのデータセットと大きく異なるため、このデータセットをそのまま使用することができないため、注意が必要です。パフォーマンスを改善するために、上述の機器を使用して、MNISTと類似したデータセットにします。

このデータセットでは、約4000のサンプルを使用しています。各サンプルは5桁の数字で構成されています。データセットのサンプル例を以下に示します。
。

![Picture6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/efea165b-eb31-fe20-6051-0c2d6c83554f.png)


データセットが用意できたら、ニューラル･ネットワークを構築し、独自のデータセットを使用してモデルをトレーニングできます。このモデルでは、40 x 32（1桁）のグレースケールのイメージを入力し、0～19まで20個の分類（0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19）を認識させます。下記の画像は、トレーニングでの損失と正確性の変化を示しています。このデータセットの背景はシンプルで、通常のデジタル･フォントであるため、トレーニング結果はきわめて良好であるように見えます。実際に、モデルで複数の水道メータ測定値を認識できるように、さまざまな水道メータの測定値（異なるフォントと色）を収集し、併せてトレーニングできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/46e2b3ad-1a62-5fdc-5133-d037d7b0a040.png)

トレーニングの後、モデル･ファイルを取得します。この時点で、STM32cube.AIを使用し、モデルを最適化済みコードに変換し、NUCLEO-WL55JC2ボードに迅速に実装することが可能です。

STM32Cube.AIはSTM32Cube開発エコシステムに統合されているため、ユーザは幅広いSTM32マイコンに効率的にモデルを移植できるだけでなく、類似モデルが別の製品に適している場合は、STM32の製品ポートフォリオ全体で簡単に移行できます。今回のデモでは、STM32Cube.AIを使用してモデルをSTM32WLマイコンに実装しています。コンピュータ･ビジョンに関して、前回記事で紹介したソフトウェア･パッケージFP-AI-VISION1には、開発者が素早く理解し、開発するための多数のオープン･コードが含まれています。詳細については、[***こちらの記事***](https://qiita.com/tyonemaru/items/cd267d7c6380a0e3aaeb)を御覧ください。


このプラグインにより、STM32CubeMXの機能が拡張されて、学習済みAIアルゴリズムの自動変換や、生成された最適化済みライブラリのユーザ･プロジェクトへの統合を利用できるため、手作業でコードを作成する必要がなくなります。また、ディープ･ラーニング･ソリューションを幅広いSTM32マイコンに組み込んで、さまざまな製品にインテリジェントな新機能を追加できるようになります。

STM32Cube.AIは、Keras、TensorFlow™ Lite、などの各種ディープ･ラーニング･フレームワークに対応しており、PyTorch™、Microsoft® Cognitive Toolkit、MATLAB®など、ONNX標準フォーマットにエクスポートできるすべてのフレームワークに対応しています。

また、STM32Cube.AIは、Isolation Forest、Support Vector Machine（SVM）、K平均法など、広範なMLオープンソース･ライブラリであるScikit-Learnに含まれる標準的な機械学習アルゴリズムをサポートしています。この記事で紹介したデモでは、TensorFlowフレームワークを使用しています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/f611b53f-6e1f-571d-c3c1-8b0dba2a506c.png)

最後に、実際のパフォーマンスを確認しましょう。デモをわかりやすくするため、カメラでキャプチャされた画像と、マイコン上の認識結果をPCの画面に送信します。動画内の黒い背景にある白い数字はカメラによってキャプチャされたもので、最初の行はAIモデルの結果です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/efc29750-e385-6cc6-5eaf-81b0d3753332.png)


### 参考リンク
STM32WLの詳細については、以下のリンクをクリックしてご覧ください。
- [STM32WLシリーズ - STマイクロエレクトロニクス](https://www.st.com/ja/microcontrollers-microprocessors/stm32wl-series.html)

STM32を用いたアナログ・メータ向け組込みAIデモ
- https://stm32ai.st.com/use-case/aftermarket-wireless-digit-reader/