Microcontrollers」という実験的なプロジェクトがあります。以前から興味があったので、チュートリアルに従ってサンプルを動かしてみました。Summitでも紹介されています。‘19)ドキュメントはこちらにあります。Lite現在、サンプルとしては以下のものが用意されています。wand:加速度センサのデータから3つの異なるジェスチャを認識また、サンプルの動作対象となるハードウェアとプラットホームは以下のものです。32bitなどの名前もありますので、将来はこれらにも移植されていくのかもしれません。speechのサンプルを動かしてみました。Mbed開発環境をインストールプラットホームとしてMbedが使われていますので、まず開発環境を導入します。Mbedにはオンライン版とオフライン版がありますが、今回使うのはオフライン版です。私の使用したプラットホームはUbuntu16.04です。Mbed自体はWindowsでも利用できますが、Linuxのほうが何かとトラブルが少ないと思います。環境構築はPythonスクリプト化されており、簡単です。インストール手順書はこちらにあります。DocumentationPythonとpipとgitはインストール済みだとして、mercurialというソースコード管理ツールと、Mbedの統合開発ツールmbed-cliをインストールします。mbed-cli基本的にはこれで終わりですが、後で述べるように、他にMbed開発環境で利用されるPythonのパッケージのインストールが必要です。MbedでLチカして開発環境を確認いきなりTensorflowへ行く前に、まずLチカがビルドできることを確認して開発環境が正しくインストールできかたチェックしておきます。チュートリアルは以下のページにあります。DocumentationLチカのプロジェクトファイルを以下のようにしてローカルにコピーしてきます。mbed-os-example-blinky/Mbedのプロジェクトはハードウェアに依存しないように作られていますので、ビルド時にターゲットの指定が必要になります。kitを使いますので、このボードのターゲット名を調べます。|ということでターゲット名はDISCO_F746NGと分かりました。ビルドは以下のようになります。GCC_ARMARM用GCCをインストールしていない場合は、以下からダウンロードしてパスを張っておいてください。(6-2017-q1-update)です。(が、私は最新のgcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2をインストールしちゃいました。DeveloperPythonパッケージの不足というエラーメッセージが出る場合は、メッセージにもあるようにmbed-os/requirements.txtを使って、以下のようにパッケージをインストールします。requirements.txtビルドは1000個近いファイルをコンパイルするので、結構時間がかかります。ビルドが完了するとBUILD/DISCO_F746NG/GCC_ARM/に.binファイルができます。DiscoveryボードをUSB接続して、binファイルをストレージにドラッグ&ドロップすればインストール完了です。ビルドできていればLEDが点滅するはずです。TensorflowサンプルのビルドMbed環境がちゃんと動作していたら、次にTensorflowサンプルをビルドしてみます。ガイドのドキュメントは以下にあります。tensorflow/tensorflowまずtensorflowをクローンします。directoryと怒られる)ので、最新リリースのv2.1.0をチェックアウトします。r2.1(実は、まだこれだけではビルドが失敗するのですが、修正方法は後述します。Mbed環境に合わせて必要なフォルダを作成します。これはTensorflowに付属のMakefileがやってくれます。generate_micro_speech_mbed_projectこれでフォルダが作られたので、フォルダへ移動してMbedプロジェクトとして初期化します。.次にMbed関連のソースコードをダウンロードします。これには結構時間がかかります。deployビルドする前に、ガイドのドキュメントにあるとおり、Mbedのコンパイラオプションを書き換えます。現時点ではMbed側のファイルではこの部分の指定がgnu++98ではなく、gnu++14になっているので、この処理は結果的に何もしていないように思います。\"-fpermissive\"")'Lチカと同じようにmbedコマンドでビルドします。GCC_ARM私の場合、以下のようにarm_mult_q15.cのコンパイルエラーで停止しました。^~~~~~~~~~~~このエラーですが、以下のIssuesにあるようにMbed側のファイルmbed/mbed-os/cmsis/TARGET_CORTEX_M/arm_math.hでconst宣言をいくつかつけると出なくなりました。tensorflow/tensorflowビルドが無事完了したら、.binファイルをドラッグ&ドロップでボードに書き込んで完了です。DiscoveryボードはLCDの右側にMEMSマイクが付いていますので、そこへ「Yes」「No」を発音すれば認識されます。認識結果はUSBシリアルポート(VCP)へも出力されます。実際に認識させてみた様子です。http://blog.boochow.com/wp-content/uploads/microspeech.mp4試してみたいけどビルドは面倒くさい、という方用にビルド済みバイナリを以下に置いておきます。kitにドラッグ&ドロップして下さい。(他の機種では使用できません。)感想この音声認識のデモは、オーディオ入力をFFTにかけ、その帯域ごとの強度の変動を使って音声認識をするものです。認識タスクだけを見れば、機械学習を使わなくても実現できそうではありますが、Tensorflowで学習させたモデルをマイコンにまで持ってくることができる(かも)というコンセプトは魅力的ですね。Mbedを使うのは約3年ぶりでしたが、以前に比べると大分安定した環境になっている印象は受けました。全部入りのシステムなので、理解するには気合が必要そうな気もします。関連stm32AIboochow楽しくやろう。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。ホームstm32元マイコン少年が、調べたことや作ったものを気まぐれに紹介するブログです。(9)メタ情報ログイン投稿フィードコメントフィードWordPress.org楽しくやろう。元マイコン少年が、調べたことや作ったものを気まぐれに紹介するブログです。(9)メタ情報ログイン投稿フィードコメントフィードWordPress.org。