1. はじめに
作成するアプリの概要
この Codelab では、TensorFlow Lite For Microcontrollers を使用して SparkFun Edge 開発ボードでディープ ラーニング モデルを実行する方法を学びます。ボードに組み込まれた音声検出モデルを使用します。このモデルは、畳み込みニューラル ネットワークを使用して「はい」という単語を検出します。と「no」2 つのマイクから送られます
マイクロコントローラでの ML
ML を使用してインテリジェントなツールを作成し、ユーザーのGoogle アシスタントのように、生活がもっと便利になります。しかし多くの場合、このようなエクスペリエンスには大量のコンピューティングやリソースが必要であり、これには強力なクラウド サーバーやデスクトップが含まれます。しかし、マイクロコントローラなどの小型で低電力のハードウェアでも ML 推論を実行できるようになりました。
マイクロコントローラは非常に一般的で、安価で、エネルギーをほとんど必要とせず、非常に信頼性があります。家電、自動車、おもちゃなど、あらゆる種類の家庭用デバイスの一部です。実際、マイクロコントローラ搭載デバイスは毎年約 300 億台製造されています。
ML を小さなマイクロコントローラに搭載することで、高価なハードウェアや信頼性の高いインターネット接続に頼ることなく、生活で使用する何十億台ものデバイスのインテリジェンスを向上させることができます。日常生活に適応できるスマート家電、問題と通常の動作の違いを認識するインテリジェントな産業センサー、子どもたちが楽しく楽しく学習できるよう支援する魔法のおもちゃなどを想像してみてください。
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 20 mm コイン リチウム電池(CR2032): プログラマーとケーブルを使わずに推論を実行可能
次のソフトウェアが必要です。
- Git(インストールされているかどうかを確認するには、コマンドラインで
git
を実行します) - Python 3(インストールされているかどうかを確認するには、コマンドラインで
python3
またはpython --version
を実行します) - pip for Python 3(StackOverflow に関する有用な回答)
- 4.2.1 以降を作成する(コマンドラインで
make --version
を実行して、インストールされているかどうかを確認します) - SparkFun Serial Basic ドライバ
2. ハードウェアをセットアップする
SparkFun Edge マイクロコントローラには、音声モデルを実行できるバイナリがプリインストールされています。これを独自のバージョンで上書きする前に、まずこのモデルを実行しましょう。
ボードをパワーアップ:
- コイン型電池を(電池の「+」側を上にして)基板背面の電池コネクタに差し込みます。ボードに電池がすでに挿入されている場合は、プラスチックのつまみを引き出し、電池を押してしっかりと挿入されていることを確認します)
- コイン電池がない場合は、SparkFun USB-C シリアル ベーシック プログラマー デバイスを使用してボードに電力を供給できます。このデバイスをボードに接続するには、次の手順を行います。
- SparkFun Edge の側面にある 6 つのピンヘッダーを見つけます。
- これらのピンに SparkFun USB-C Serial Basic を接続し、「BLK」というラベルの付いたピンを確認します。および「GRN」正しく並べられているかを確認します
- SparkFun USB-C シリアル ベーシックとパソコンを USB-C ケーブルで接続します。
バッテリーを挿入したり USB プログラマーを接続して電源に接続したりすると、ボードが起動してマイクのリッスンを開始します。青色のライトが点滅し始めます。
上の ML モデルは、「はい」という単語を認識するようにトレーニングされています。「no」を指定し、発話の有無を検出します。結果は、色付きの LED ライトで通知されます。次の表に、LED の各色の意味を示します。
検出結果 | LED の色 |
「はい」 | 黄 |
「いいえ」 | 赤 |
不明な音声 | 緑 |
音声が検出されませんでした | LED が点灯しない |
試してみる
ボードを口まで近づけて「はい」と言いますおすすめします。黄色の LED が点滅します。「はい」と言っても何も起こらない場合は、次の方法をお試しください。
- ボードを 10 インチほど持ちます口から
- 過度な背景雑音を避ける
- 「はい」と繰り返して連続して数回(「はい、はい」と言ってみてください)
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 シリアル ベーシック シリアル プログラマーを使用します。このデバイスは、コンピュータが USB 経由でマイクロコントローラと通信できるようにします。
このデバイスをボードに接続するには、次の手順を行います。
- SparkFun Edge の側面にある 6 つのピンヘッダーを見つけます。
- これらのピンに SparkFun USB-C Serial Basic を接続し、「BLK」というラベルの付いたピンを確認します。および「GRN」正しく並べられているかを確認します
プログラマーをパソコンに接続する
Board を 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 モデルは、「はい」という単語を認識するようにトレーニングされています。「no」を設定して、発話の有無を検出します。結果は、色付きの LED ライトで通知されます。次の表に、LED の各色の意味を示します。
検出結果 | LED の色 |
「はい」 | 黄 |
「いいえ」 | 赤 |
不明な音声 | 緑 |
音声が検出されませんでした | LED が点灯しない |
試してみる
ボードを口まで近づけて「はい」と言いますおすすめします。黄色の LED が点滅します。「はい」と言っても何も起こらない場合は、次の方法をお試しください。
- ボードを 10 インチほど持ちます口から
- 過度な背景雑音を避ける
- 「はい」と繰り返して連続して数回(「はい、はい」と言ってみてください)
動作しない場合はどうすればよいですか?
考えられる問題とそのデバッグ方法は次のとおりです。
問題: 点滅した後、LED がどれも点灯しない。
解決策: RST
ボタンをクリックするか、ボードとプログラマーの接続を解除してから接続し直してみてください。上記の方法を試しても問題が解決しない場合は、もう一度ボードをフラッシュしてみてください。
問題: 青色の LED が点灯しているが、非常に暗い。
解決策: バッテリー残量が少なくなったら、バッテリーを交換します。あるいは、プログラマーとケーブルを使ってコンピュータからボードに電力を供給することもできます。
8. デバッグ出力を確認する(省略可)
問題が発生し、コードを詳細にデバッグする必要がある場合は、このセクションを確認してください。コード実行時にマイクロコントローラで何が起きているかを理解するために、ボードのシリアル接続を介してデバッグ情報を出力できます。コンピュータを使用して Board に接続し、Board から送信されたデータを表示します。
シリアル接続を開く
デフォルトでは、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
は、コマンドが初めて聞こえるかどうかを Google に通知します。
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 からなるバンクがあるため、これらの LED を特定のコマンドの score
のビジュアル インジケーターとして使用するようにプログラムを変更しましょう。スコアが低い場合は 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 をご覧ください。小さなデバイスでの ML を紹介し、いくつかの楽しいプロジェクトを紹介しています。この Codelab は、本書の 7 章と 8 章に基づいています。
ありがとうございました。では、楽しみながら構築してください。