7.「STM32Cube.AI」の拡張パックを実装する。「READY」を表示する段階ではSTM32Cube.AIを使わないが、最初の段階でSTM32Cube.AIを実装しておく。具体的な操作は、X-CUBE-AIプラグインを開いて、プロジェクトに追加するだけだ。
ここまでが初期設定である。STM32CubeIDEに統合されているSTM32CubeMXの画面上で設定する。プロジェクトを生成したら、STM32F7シリーズのライブラリから32F746GDISCOVERYキット用のLCD用、SDRAM用などのソフトウェアをプロジェクト内にコピーしてリンクする。
ここまでがプロジェクトの準備段階である。次に、実際にユーザーのコードを入力する(図7)
ステップ1では液晶画面に「READY」と表示するだけなので、ユーザーコードで表示文字の色や位置やフォントを指定する。ユーザーコードを入れ終わったらBuildして、マイコンのフラッシュメモリプログラムを書き込み、実行すれば液晶画面に「READY」が表示される。
ここで、STM32ファミリーのプログラムに関して補足説明をしておく。
STM32CubeIDEに統合されているSTM32CubeMX(単体で使用の場合も同じ)は、STM32ファミリーのファームウェアライブラリ(例、STM32Cube_FW_F7_Vx.xx.x:xはバージョンを示す)をベースにプログラムコードを生成する。このファームウェアライブラリは、ハードウェア抽象化レイヤー(以降HAL: Hardware Abstraction Layer)で記述されている。俗に言う「レジスタ直たたき」でもなく「アセンブル言語」でもない。「レジスタ直たたき」や「アセンブル言語」でプログラムを作る場合、マニュアルとにらめっこして、レジスタの1ビットずつの仕様を確認しながら設定を行うため、時間がかかる上に間違いを起こす可能性も非常に高くなる。
一方、HALで記述すれば、設定内容がすぐ分かるように記述されているので、ソフトウェア開発の効率も上がり、間違いも起こりにくくなる。STM32ファミリーのファームウェアライブラリはもとより、各製品や今回使用する32F746GDISCOVERYキットなどの評価用ボードのサンプルプログラムは、全てHALで記述されている。
タッチパネル機能付きの液晶画面に、手書きされたアルファベットの軌跡のイメージをインポートする。そして、インポートしたイメージを液晶画面に表示する。さらに、同じイメージの画像を縮小し、サムネイルを作って液晶画面に表示する。
これらのフローは、ステップ1で作ったプロジェクトにユーザーコードを追加することで実現する。タッチパネル機能付きの液晶画面からデータを取り込むコードや、文字を表示するコードは、STM32ファミリーのファームウェアライブラリや32F746GDISCOVERYキット用のサンプルコードを参照しつつ、STM32CubeIDE上でユーザーが作成する。
いよいよAIを起動して文字認識を行う。
最初に人工ニューラルネットワークモデルの学習結果の推論アルゴリズムをプロジェクトにインポートする必要がある。推論アルゴリズムは、汎用マイコンの能力では構築することができないので、PCなどの他のコンピュータ上で行うか、クラウドに用意されたサービスを利用して事前に準備しておく。
推論アルゴリズムが準備できれば、「STM32Cube.AI」を使って人工ニューラルネットワークの学習で構築された推論アルゴリズム部分をオブジェクトコードに変換し、マイコンとインタフェース可能なC言語に変換することができる。C言語はマイコンのAPI(Application Programming Interface)としてマイコンにインポートされ、使用可能かどうか分析される。分析結果がOKであれば、推論アルゴリズムのインポートが完了する。
インポートは、いったんSTM32CubeIDEに統合されているSTM32CubeMXに戻り、STM32CubeMX上で行う。推論アルゴリズムをインポートして解析する工程は、連載3回目で詳しく解説する。
推論アルゴリズムのインポートが終わったら、認識文字/確率/演算時間を液晶画面に表示するコードを追加して完成だ。プログラムが完成したらBuildし、フラッシュメモリにプログラムを書き込み、実行する。液晶画面に「READY」と表示された後にアルファベットの文字を書くと、LCD画面に認識文字/確率/演算時間が表示される。
Copyright © ITmedia, Inc. All Rights Reserved.