1. はじめに
作成するアプリの概要
この Codelab では、TensorFlow Lite For Microcontrollers を使用して SparkFun Edge 開発ボードでディープ ラーニング モデルを実行する方法を学びます。ここでは、ボードの 2 つのマイクから発せられた「はい」と「いいえ」の単語を畳み込みニューラル ネットワークで検出する、ボードの組み込み音声検出モデルを使用します。

マイクロコントローラでの ML
機械学習は、Google アシスタントなど、ユーザーの生活をより快適にするインテリジェントなツールを作成するために使用できます。しかし、多くの場合、こうしたエクスペリエンスには、強力なクラウド サーバーやデスクトップなどの多くの計算やリソースが必要になります。しかし、現在では、マイクロコントローラのような小型で低消費電力のハードウェアで機械学習の推論を実行できるようになりました。
マイクロコントローラは非常に一般的で安価であり、必要なエネルギーが非常に少なく、信頼性が高いです。家電製品、自動車、おもちゃなど、あらゆる種類の家庭用デバイスに組み込まれています。実際、毎年約 300 億台のマイクロコントローラ搭載デバイスが製造されています。

機械学習を小型のマイクロコントローラに導入することで、高価なハードウェアや信頼性の高いインターネット接続に依存することなく、日常生活で使用する数十億台のデバイスのインテリジェンスを高めることができます。毎日決まった仕事をこなせるスマート家電、動作の異常と正常を見分けられるインテリジェント工業センサー、子どもが自分で楽しく学習できる魅力的なおもちゃを想像してください。
TensorFlow Lite For Microcontrollers(ソフトウェア)

TensorFlow は、モデルのトレーニングと実行に使用される Google のオープンソースの ML フレームワークです。TensorFlow Lite は、ソフトウェア フレームワークであり、TensorFlow の最適化されたバージョンです。スマートフォンなどの小型で比較的低電力のデバイスで TensorFlow モデルを実行することを目的としています。
TensorFlow Lite For Microcontrollers は、マイクロコントローラなどの小型で低消費電力のハードウェアで TensorFlow モデルを実行することを目的とした、TensorFlow の最適化バージョンであるソフトウェア フレームワークです。この環境で必要な制約(バイナリ サイズが小さい、オペレーティング システムのサポート、標準の C / C++ ライブラリ、動的メモリ割り当てなどが不要)に準拠しています。
SparkFun Edge(ハードウェア)
SparkFun Edge は、マイクロコントローラ ベースのプラットフォームです。1 枚の回路基板に搭載された小型のコンピュータです。プロセッサ、メモリ、I/O ハードウェアを備えており、他のデバイスとの間でデジタル信号を送受信できます。ソフトウェアで制御可能な 4 つの LED が、お気に入りの Google カラーで搭載されています。

パソコンとは異なり、マイクロコントローラはオペレーティング システムを実行しません。代わりに、作成したプログラムはハードウェア上で直接実行されます。コードはパソコンで記述し、プログラマーと呼ばれるデバイスを介してマイクロコントローラにダウンロードします。
マイクロコントローラは高性能なコンピュータではありません。プロセッサが小さく、メモリもあまりありません。マイクロコントローラは可能な限りシンプルになるように設計されているため、消費電力が非常に少なくなります。プログラムの内容によっては、SparkFun Edge は 1 個のボタン電池で数週間動作します。
学習内容
- パソコンで SparkFun Edge のサンプル プログラムをコンパイルする
- プログラムをデバイスにデプロイする
- プログラムを変更して再デプロイする
必要なもの
次のハードウェアが必要です。
- Linux または macOS のパソコン
- SparkFun Edge ボード
- SparkFun USB-C Serial Basic プログラマー
- USB-C - USB-A ケーブル(USB-C パソコンをお使いの場合は、代わりに USB-C - USB-C ケーブルを入手してください)
- (省略可)プログラマーとケーブルなしで推論を実行するための 3V 20mm コイン型リチウム電池(CR2032)
次のソフトウェアが必要です。
- Git(コマンドラインで
gitを実行して、インストールされているかどうかを確認します) - Python 3(コマンドラインで
python3またはpython --versionを実行して、インストールされているかどうかを確認します) - Python 3 用の Pip(StackOverflow の回答を参照)
- 4.2.1 以上(コマンドラインで
make --versionを実行してインストールされているかどうかを確認) - SparkFun Serial Basic ドライバ
2. ハードウェアをセットアップする
SparkFun Edge マイクロコントローラには、音声モデルを実行できるバイナリがプリインストールされています。このモデルを独自のバージョンで上書きする前に、まずこのモデルを実行してみましょう。
ボードの電源を入れます。
- コイン型電池を基板の背面にある電池コネクタに挿入します(電池の「+」側を上に向けます)。ボードにバッテリーがすでに挿入されている場合は、プラスチックのタブを引き抜き、バッテリーを押し込んで完全に挿入されていることを確認します)。

- コイン電池がない場合は、SparkFun USB-C Serial Basic プログラマー デバイスを使用してボードに電力を供給できます。このデバイスをボードに取り付けるには、次の手順を行います。
- SparkFun Edge の側面にある 6 ピン ヘッダーを見つけます。
- SparkFun USB-C Serial Basic をこれらのピンに差し込みます。各デバイスの「BLK」と「GRN」のラベルが付いたピンが正しく並んでいることを確認してください。
- SparkFun USB-C Serial Basic とパソコンを USB-C ケーブルで接続します。

バッテリーを挿入するか、USB プログラマーを接続してボードに電力を供給すると、ボードが起動し、マイクでリッスンを開始します。青色のライトが点滅し始めます。
ボード上の ML モデルは、「はい」と「いいえ」という単語を認識し、音声の有無を検出するようにトレーニングされています。結果は、色付きの LED を点灯することで伝えられます。次の表に、各 LED の色の意味を示します。
検出結果 | LED の色 |
「はい」 | 黄 |
「いいえ」 | 赤 |
不明な音声 | 緑 |
音声が検出されませんでした | LED が点灯していない |
試してみる
ボードを口元に当てて、「はい」と数回言います。黄色の LED が点滅します。「はい」と答えても何も起こらない場合は、次の方法をお試しください。
- 口から約 25 cm 離してボードを持ちます
- 周囲の騒音が大きすぎないようにする
- 「はい」を数回連続して繰り返す(「はいはいはい」と言ってみる)
3. ソフトウェアをセットアップする
次に、マイクロコントローラに音声モデルをダウンロードしてインストールし、実行します。そのため、まずこのプログラムのソースコードと、ビルドに必要な依存関係をダウンロードします。このプログラムは C++ で記述されており、ボードにダウンロードする前にバイナリにコンパイルする必要があります。バイナリは、SparkFun Edge ハードウェアで直接実行できる形式でプログラムを含むファイルです。
以下の手順は、Linux または MacOS を対象としています。
TensorFlow リポジトリをダウンロードする
コードは、GitHub の TensorFlow リポジトリの次の場所にあります。
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/micro
コンピュータでターミナルを開き、普段コーディング プロジェクトを保存しているディレクトリに移動して、以下のように TensorFlow リポジトリをダウンロードし、作成されたディレクトリに入ります。
cd ~ # change into your home (or any other) directory git clone --depth 1 https://github.com/tensorflow/tensorflow.git cd tensorflow
Python 依存関係をダウンロードする
Python 3 を使用してバイナリを準備し、デバイスに書き込みます。Python スクリプトは、特定のライブラリが使用可能であることを前提としています。次のコマンドを実行して、これらの依存関係をインストールします。
pip3 install pycrypto pyserial --user
4. バイナリをビルドして準備する
バイナリをビルドし、デバイスにダウンロードする準備を行うコマンドを実行します。
バイナリをビルドする
必要な依存関係をすべてダウンロードしてバイナリを作成するには、次のコマンドを実行します。
make -f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge micro_speech_bin
ビルドが正常に動作すると、出力の最終行は次のようになります。
arm-none-eabi-objcopy tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4/bin/micro_speech tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4/bin/micro_speech.bin -O binary
バイナリが正常に作成されたことを確認するには、次のコマンドを実行します。
test -f \ tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4/bin/micro_speech.bin && \ echo "Binary was successfully created" || echo "Binary is missing"
コンソールに Binary was successfully created が出力されます。Binary is missing が表示された場合は、ビルドプロセスに問題が発生しており、デバッグが必要になります。
バイナリを準備する
バイナリは、デバイスにデプロイするために暗号鍵で署名する必要があります。次に、バイナリに署名して SparkFun Edge にダウンロードできるようにするコマンドを実行します。
次のコマンドを入力して、開発に使用できるダミーの暗号鍵を設定します。
cp tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/keys_info0.py tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/keys_info.py
次のコマンドを実行して、署名付きバイナリを作成します。
python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/create_cust_image_blob.py \ --bin tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4/bin/micro_speech.bin \ --load-address 0xC000 \ --magic-num 0xCB \ -o main_nonsecure_ota \ --version 0x0
これにより、ファイル main_nonsecure_ota.bin が作成されます。次に、別のコマンドを実行して、次のステップで使用するブートローダー スクリプトでデバイスをフラッシュするために使用できるファイルの最終バージョンを作成します。
python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/create_cust_wireupdate_blob.py \ --load-address 0x20000 \ --bin main_nonsecure_ota.bin \ -i 6 \ -o main_nonsecure_wire \ --options 0x1
コマンドを実行したディレクトリに main_nonsecure_wire.bin というファイルが作成されます。これがデバイスに書き込むファイルです。
5. バイナリをフラッシュする準備をします。
フラッシュとは
SparkFun Edge は、現在実行中のプログラムを 512 KB のフラッシュ メモリに保存します。ボードで新しいプログラムを実行する場合は、ボードに送信する必要があります。ボードは、以前に保存されたプログラムを上書きして、フラッシュ メモリに保存します。
このプロセスを「フラッシュ」と呼びます。これを使用して、プログラムをボードに送信します。
プログラマーをボードに取り付ける
ボードに新しいプログラムをダウンロードするには、SparkFun USB-C Serial Basic シリアル プログラマーを使用します。このデバイスを使用すると、パソコンは USB 経由でマイクロコントローラと通信できます。
このデバイスをボードに取り付けるには、次の手順を行います。
- SparkFun Edge の側面にある 6 ピン ヘッダーを見つけます。
- SparkFun USB-C Serial Basic をこれらのピンに差し込みます。各デバイスの「BLK」と「GRN」のラベルが付いたピンが正しく並んでいることを確認してください。

プログラマーをパソコンに接続する
ボードを USB 経由でパソコンに接続します。ボードをプログラミングするには、パソコンがデバイスに割り当てた名前を知る必要があります。この方法としては、接続前と接続後のコンピュータのデバイスをすべてリストアップし、どのデバイスが新しいかを確認するのが最適です。
USB 経由でデバイスを接続する前に、次のコマンドを実行します。
If you are using Linux: ls /dev/tty* If you are using MacOS: ls /dev/cu*
次のような接続されたデバイスのリストが出力されます。
/dev/cu.Bluetooth-Incoming-Port /dev/cu.MALS /dev/cu.SOC
プログラマーをパソコンの USB ポートに接続します。次のコマンドを再度入力します。
If you are using Linux: ls /dev/tty* If you are using MacOS: ls /dev/cu*
次の例のように、出力に項目が追加されます。新しいアイテムの名前は異なる場合があります。この新しいアイテムはデバイスの名前です。
/dev/cu.Bluetooth-Incoming-Port /dev/cu.MALS /dev/cu.SOC /dev/cu.wchusbserial-1450
まず、デバイス名を識別する環境変数を作成します。
export DEVICENAME=put your device name here
次に、ボーレート(デバイスにデータが送信される速度)を指定する環境変数を作成します。
export BAUD_RATE=921600
6. バイナリをフラッシュする
スクリプトを実行してボードをフラッシュする
ボードをフラッシュするには、新しいバイナリを受け取る準備をする特別な「ブートローダー」状態にする必要があります。次に、スクリプトを実行してバイナリをボードに送信します。
ボードの次のボタンについて説明します。

ボードをリセットしてフラッシュする手順は次のとおりです。
- ボードがプログラマーに接続され、セットアップ全体が USB 経由でパソコンに接続されていることを確認します。
- ボードの
14とマークされたボタンを長押しして、スタートします。ステップ 6 まで押し続けます。 14とマークされたボタンを押したまま、RSTとマークされたボタンをクリックしてボードをリセットし、ブートローダーの状態にします。14とマークされたボタンを押したまま、次のコマンドをターミナルに貼り付けて Enter キーを押し、実行します(便宜上、ボタンを押し始める前にこのコマンドをターミナルに貼り付けることもできますが、この手順に達するまで Enter キーを押さないでください)。
python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/uart_wired_update.py -b ${BAUD_RATE} ${DEVICENAME} -r 1 -f main_nonsecure_wire.bin -i 6
14のボタンを押したまま、画面に次のようなものが表示されるのを確認します。
Connecting with Corvette over serial port /dev/cu.usbserial-1440... Sending Hello. Received response for Hello Received Status length = 0x58 version = 0x3 Max Storage = 0x4ffa0 Status = 0x2 State = 0x7 AMInfo = 0x1 0xff2da3ff 0x55fff 0x1 0x49f40003 0xffffffff [...lots more 0xffffffff...] Sending OTA Descriptor = 0xfe000 Sending Update Command. number of updates needed = 1 Sending block of size 0x158b0 from 0x0 to 0x158b0 Sending Data Packet of length 8180 Sending Data Packet of length 8180 [...lots more Sending Data Packet of length 8180...]
Sending Data Packet of length 8180が表示されたら、ボードの14とマークされたボタンを押すのをやめます(押し続けても問題ありません)。プログラムはターミナルに行の出力を続けます。最終的には次のようになります。
[...lots more Sending Data Packet of length 8180...] Sending Data Packet of length 8180 Sending Data Packet of length 6440 Sending Reset Command. Done.
Done が表示された場合は、正常に点滅したことを示します。プログラムの出力がエラーで終わる場合は、Sending Reset Command が出力されたかどうかを確認します。その場合は、エラーが発生したにもかかわらず、フラッシュは成功した可能性があります。
Linux マシンでは、NoResponse Error が発生することがあります。これは、既存のシリアル ドライバとともに ch34x シリアル ドライバがインストールされているためです。この問題は次のように解決できます。
ステップ 1: ch34x ライブラリの正しいバージョンを再インストールします。インストール中はデバイスがパソコンから外れていることを確認してください。
git clone https://github.com/juliagoda/CH341SER.git cd CH341SER/ make sudo insmod ch34x.ko sudo rmmod ch341
ステップ 2: ボードの USB を接続して、以下を実行します。
dmesg | grep "ch34x"
次のようなメッセージが表示されます。
[ 1299.444724] ch34x_attach+0x1af/0x280 [ch34x] [ 1299.445386] usb 2-13.1: ch34x converter now attached to ttyUSB0
使用されているドライバが「ch34x」でない場合(ch341 など)、次のコマンドを実行して他のドライバを無効にしてみてください。
rmmod <non-ch34x driver name>
デバイスの電源プラグを抜いてからもう一度差し込み、使用されているドライバが「ch34x」であることを確認します。
7. デモ
プログラムを試す
ボードのフラッシュが正常に完了したら、 と書かれたボタンを押します。
RST: ボードを再起動してプログラムを開始します。青色の LED が点滅し始めたら、フラッシュは成功です。うまくいかなかった場合は、下記の「うまくいかなかった場合はどうすればよいですか?」のセクションまでスクロールしてください。

ボード上の ML モデルは、「はい」と「いいえ」という単語を認識し、音声の有無を検出するようにトレーニングされています。結果は、色付きの LED を点灯することで伝えられます。次の表に、各 LED の色の意味を示します。
検出結果 | LED の色 |
「はい」 | 黄 |
「いいえ」 | 赤 |
不明な音声 | 緑 |
音声が検出されませんでした | LED が点灯していない |
試してみる
ボードを口元に当てて、「はい」と数回言います。黄色の LED が点滅します。「はい」と答えても何も起こらない場合は、次の方法をお試しください。
- 口から約 25 cm 離してボードを持ちます
- 周囲の騒音が大きすぎないようにする
- 「はい」を数回連続して繰り返す(「はいはいはい」と言ってみる)
うまくいかなかった場合はどうすればよいですか?
考えられる問題とデバッグ方法を次に示します。
問題: フラッシュ後、LED が点灯しない。
解決策: RST ボタンを押すか、ボードとプログラマーの接続を解除して再接続してみてください。上記の方法で解決しない場合は、ボードを再度フラッシュしてみてください。
問題: 青色の LED が点灯しているが、非常に暗い。
解決策: バッテリー残量が少なくなっているため、バッテリーを交換します。プログラマーとケーブルを使用して、パソコンからボードに電力を供給することもできます。
8. デバッグ出力を読む(省略可)
問題が発生し、コードを詳細にデバッグする必要がある場合は、このセクションを確認してください。コードの実行時にマイクロコントローラで何が起こっているかを把握するには、ボードのシリアル接続を介してデバッグ情報を出力します。パソコンを使用してボードに接続し、ボードが送信しているデータを表示します。
シリアル接続を開く
デフォルトでは、SparkFun Edge のサンプルコードは、発話されたコマンドとその信頼度をログに記録します。ボードの出力を確認するには、次のコマンドを実行します。
screen ${DEVICENAME} 115200
最初は次のような出力が表示されることがあります(これは、ボードが接続後にリセットされた場合にのみ表示されます。それ以外の場合は、デバッグ情報が表示されることがあります)。
Apollo3 Burst Mode is Available
Apollo3 operating in Burst Mode (96MHz)
「はい」または「いいえ」と言って、コマンドを発行してみてください。各コマンドのデバッグ情報が出力されます。
Heard yes (202) @65536ms
上記のログでは、yes はコマンドを指します。数値 202 は、コマンドが聞き取られた信頼度を示します(最小値は 200)。最後に、65536ms は、マイクロコントローラが最後にリセットされてからの経過時間を指します。
デバッグ出力の表示を停止するには、Ctrl+A キーを押し、すぐに K キーを押し、次に Y キーを押します。
デバッグログを書き込む
この情報をログに記録するコードは、先ほど作業した command_responder.cc ファイルで確認できます。
tensorflow/lite/micro/examples/micro_speech/sparkfun_edge/command_responder.cc
データをログに記録するには、error_reporter->Report() メソッドを呼び出します。文字列補間に標準の printf トークンがサポートされています。これを使用して、ログに重要な情報を含めることができます。
error_reporter->Report("Heard %s (%d) @%dms", found_command, score, current_time);
このメソッドは、次のセクションでコードに独自の変更を加える際に役立ちます。
9. コードを拡張する(省略可)
SparkFun Edge のビルドとフラッシュの方法を理解したら、コードを操作してデバイスにデプロイし、結果を確認できます。
コードを読む
コードの読み取りを開始するのに適した場所は、次のファイル command_responder.cc. です。
tensorflow/lite/micro/examples/micro_speech/sparkfun_edge/command_responder.cc
ファイルは GitHub で こちらから確認できます。
このファイルのメソッド RespondToCommand は、音声コマンドが検出されたときに呼び出されます。既存のコードでは、「はい」、「いいえ」、または不明なコマンドが聞こえたかどうかに応じて、異なる LED が点灯します。次のスニペットは、この仕組みを示しています。
if (found_command[0] == 'y') {
am_hal_gpio_output_set(AM_BSP_GPIO_LED_YELLOW);
}
if (found_command[0] == 'n') {
am_hal_gpio_output_set(AM_BSP_GPIO_LED_RED);
}
if (found_command[0] == 'u') {
am_hal_gpio_output_set(AM_BSP_GPIO_LED_GREEN);
}
found_command 引数には、検出されたコマンドの名前が含まれます。この if ステートメントのセットは、最初の文字をチェックして、点灯する LED を決定します。
RespondToCommand メソッドは、次の引数を指定して呼び出されます。
void RespondToCommand(tflite::ErrorReporter* error_reporter,
int32_t current_time, const char* found_command,
uint8_t score, bool is_new_command) {
error_reporterはデバッグ情報をログに記録するために使用されます(詳細については後述します)。current_timeは、コマンドが検出された時刻を表します。found_commandは、検出されたコマンドを示します。scoreは、コマンドを検出したことに対する信頼度を示します。is_new_commandは、コマンドを初めて聞いたかどうかを知らせます。
score は、コマンドが検出された確率を表す 0 ~ 255 の整数です。このサンプルコードでは、スコアが 200 を超える場合にのみコマンドが有効と見なされます。Google のテストによると、ほとんどの有効なコマンドは 200 ~ 210 の範囲に収まります。
コードを変更する
SparkFun Edge ボードには 4 つの LED があります。現在、認識が行われていることを示すために青色の LED が点滅しています。これは command_responder.cc ファイルで確認できます。
static int count = 0;
// Toggle the blue LED every time an inference is performed.
++count;
if (count & 1) {
am_hal_gpio_output_set(AM_BSP_GPIO_LED_BLUE);
} else {
am_hal_gpio_output_clear(AM_BSP_GPIO_LED_BLUE);
}
4 つの LED があるので、プログラムを変更して、特定のコマンドの score の視覚的なインジケーターとして使用しましょう。スコアが低い場合は LED が 1 つ点灯し、スコアが高い場合は複数の LED が点灯します。
プログラムが実行されていることを確認できるように、青色ではなく赤色の LED が継続的に点滅するようにします。隣接する青、緑、黄色の LED は、最新の score の強度を示すために使用されます。簡単にするため、「はい」という言葉が発せられた場合にのみ LED を点灯させます。別の単語が検出されると、LED が消灯します。
この変更を行うには、command_responder.cc ファイル内のすべてのコードを次のスニペットに置き換えます。
#include "tensorflow/lite/micro/examples/micro_speech/command_responder.h"
#include "am_bsp.h"
// This implementation will light up the LEDs on the board in response to different commands.
void RespondToCommand(tflite::ErrorReporter* error_reporter,
int32_t current_time, const char* found_command,
uint8_t score, bool is_new_command) {
static bool is_initialized = false;
if (!is_initialized) {
// Setup LEDs as outputs
am_hal_gpio_pinconfig(AM_BSP_GPIO_LED_RED, g_AM_HAL_GPIO_OUTPUT_12);
am_hal_gpio_pinconfig(AM_BSP_GPIO_LED_BLUE, g_AM_HAL_GPIO_OUTPUT_12);
am_hal_gpio_pinconfig(AM_BSP_GPIO_LED_GREEN, g_AM_HAL_GPIO_OUTPUT_12);
am_hal_gpio_pinconfig(AM_BSP_GPIO_LED_YELLOW, g_AM_HAL_GPIO_OUTPUT_12);
// Ensure all pins are cleared
am_hal_gpio_output_clear(AM_BSP_GPIO_LED_RED);
am_hal_gpio_output_clear(AM_BSP_GPIO_LED_BLUE);
am_hal_gpio_output_clear(AM_BSP_GPIO_LED_GREEN);
am_hal_gpio_output_clear(AM_BSP_GPIO_LED_YELLOW);
is_initialized = true;
}
static int count = 0;
// Toggle the red LED every time an inference is performed.
++count;
if (count & 1) {
am_hal_gpio_output_set(AM_BSP_GPIO_LED_RED);
} else {
am_hal_gpio_output_clear(AM_BSP_GPIO_LED_RED);
}
if (is_new_command) {
// Clear the last three LEDs
am_hal_gpio_output_clear(AM_BSP_GPIO_LED_BLUE);
am_hal_gpio_output_clear(AM_BSP_GPIO_LED_GREEN);
am_hal_gpio_output_clear(AM_BSP_GPIO_LED_YELLOW);
error_reporter->Report("Heard %s (%d) @%dms", found_command, score,
current_time);
// Only indicate a 'yes'
if (found_command[0] == 'y') {
// Always light the blue LED
am_hal_gpio_output_set(AM_BSP_GPIO_LED_BLUE);
// Light the other LEDs depending on score
if (score >= 205) {
am_hal_gpio_output_set(AM_BSP_GPIO_LED_GREEN);
}
if(score >= 210) {
am_hal_gpio_output_set(AM_BSP_GPIO_LED_YELLOW);
}
}
}
}
新しいコマンドが検出されると、is_new_command は true になります。青、緑、黄色の LED を消灯し、found_command と score の値に応じて再度点灯します。
再ビルドしてフラッシュする
コードを変更したら、バイナリをビルドして準備するの手順をすべて実行してテストします。
10. 次のステップ
お疲れさまでした。これで、マイクロコントローラで最初の音声検出器を構築できました。
TensorFlow Lite for Microcontrollers を使用した開発の概要は以上です。マイクロコントローラでのディープ ラーニングというアイデアは新しく、エキサイティングなものです。ぜひ試してみてください。
リファレンス ドキュメント
- 基本的なプログラムの操作を経験したので、独自のモデルをトレーニングして、さまざまなコマンドを理解しましょう。注: トレーニングには数時間かかります。
- TensorFlow Lite for Microcontrollers の詳細(ウェブサイト、GitHub)をご覧ください。
- 他の例を試して、サポートされている場合は SparkFun Edge で実行してみてください。
- O'Reilly の書籍『TinyML: Machine Learning with TensorFlow on Arduino and Ultra-Low Power Micro-Controllers』を参照してください。この書籍では、小型デバイスでの機械学習を紹介し、いくつかの楽しいプロジェクトを説明しています。この Codelab は、書籍の第 7 章と第 8 章に基づいています。

今後ともどうぞよろしくお願いいたします。