1. Pengantar
Yang akan Anda bangun
Dalam codelab ini, kita akan mempelajari cara menggunakan TensorFlow Lite For Microcontrollers untuk menjalankan model deep learning di SparkFun Edge Development Board. Kita akan bekerja dengan model deteksi ucapan bawaan board, yang menggunakan jaringan neural konvolusional untuk mendeteksi kata "ya" dan "tidak" diucapkan melalui dua mikrofon dewan.
Machine Learning di Microcontroller
Machine learning dapat digunakan untuk membuat alat cerdas yang membuat hidup menjadi lebih mudah, seperti Asisten Google. Namun, sering kali pengalaman ini memerlukan banyak komputasi atau resource yang dapat mencakup server cloud yang andal atau desktop. Namun, sekarang inferensi machine learning dapat dilakukan pada hardware kecil berdaya rendah, seperti mikrokontroler.
{i>Microcontroller<i} sangat umum, murah, membutuhkan energi sangat sedikit, dan sangat dapat diandalkan. Mereka adalah bagian dari segala macam perangkat rumah tangga: misalnya peralatan, mobil, dan mainan. Faktanya, ada sekitar 30 miliar perangkat bertenaga mikrokontroler yang diproduksi setiap tahun.
Dengan menghadirkan machine learning ke mikrokontroler kecil, kita dapat meningkatkan kecerdasan miliaran perangkat yang kita gunakan dalam hidup, tanpa bergantung pada hardware yang mahal atau koneksi internet yang andal. Bayangkan peralatan cerdas yang dapat beradaptasi dengan rutinitas sehari-hari, sensor industri cerdas yang memahami perbedaan antara masalah dan pengoperasian normal, serta mainan ajaib yang dapat membantu anak belajar dengan cara yang menyenangkan dan menyenangkan.
TensorFlow Lite Untuk Microcontroller (Software)
TensorFlow adalah framework machine learning open source Google untuk melatih dan menjalankan model. TensorFlow Lite adalah framework software, versi TensorFlow yang dioptimalkan, yang ditargetkan untuk menjalankan model tensorflow pada perangkat kecil yang memiliki daya relatif rendah seperti ponsel.
TensorFlow Lite For Microcontrollers adalah framework software, versi TensorFlow yang dioptimalkan, yang ditargetkan untuk menjalankan model tensorflow pada hardware kecil berdaya rendah seperti pengontrol mikro. Class ini mematuhi batasan yang diperlukan dalam lingkungan tersemat ini, yaitu memiliki ukuran biner yang kecil, tidak memerlukan dukungan sistem operasi, library C atau C++ standar, atau alokasi memori dinamis, dll.
SparkFun Edge (Hardware)
SparkFun Edge adalah platform berbasis mikrokontroler: komputer kecil di atas papan sirkuit tunggal. Komputer ini memiliki prosesor, memori, dan hardware I/O yang memungkinkannya mengirim dan menerima sinyal digital ke perangkat lain. Layar ini memiliki empat LED yang dapat dikontrol software, dalam warna Google favorit Anda.
Tidak seperti komputer, mikrokontroler tidak menjalankan sistem operasi. Sebaliknya, program yang Anda tulis berjalan langsung pada perangkat keras. Anda menulis kode di komputer dan mendownloadnya ke mikrokontroler melalui perangkat yang disebut programmer.
{i>Microcontroller<i} bukanlah komputer yang kuat. Mereka memiliki prosesor kecil, dan tidak banyak memori. Namun, karena dirancang sesederhana mungkin, mikrokontroler dapat menggunakan energi yang sangat sedikit. Bergantung pada fungsi program Anda, SparkFun Edge dapat berjalan selama berminggu-minggu dengan satu baterai sel koin!
Yang akan Anda pelajari
- Kompilasi program contoh untuk SparkFun Edge di komputer Anda
- Men-deploy program ke perangkat Anda
- Buat perubahan pada program dan deploy lagi
Yang Anda butuhkan
Anda memerlukan hardware berikut:
- Komputer Linux atau MacOS
- Papan Edge SparkFun
- Programmer SparkFun USB-C Serial Basic
- Kabel USB-C ke USB-A (Jika Anda menggunakan komputer USB-C, gunakan kabel USB-C ke USB-C)
- (opsional) Baterai lithium sel koin 20 mm 3 V (CR2032) untuk menjalankan inferensi tanpa programmer dan kabel
Anda akan memerlukan software berikut:
- Git (periksa apakah sudah diinstal dengan menjalankan
git
pada command line) - Python 3 (periksa apakah sudah diinstal dengan menjalankan
python3
ataupython --version
pada command line) - Pip untuk Python 3 ( jawaban StackOverflow yang membantu)
- Buat 4.2.1 atau yang lebih tinggi (periksa apakah aplikasi tersebut diinstal dengan menjalankan
make --version
di command line) - Driver SparkFun Serial Basic
2. Menyiapkan hardware
Mikrokontroler SparkFun Edge dilengkapi dengan biner yang telah diinstal sebelumnya yang dapat menjalankan model ucapan. Sebelum kita menimpa ini dengan versi kita sendiri, mari kita jalankan terlebih dahulu model ini.
Dukung papan game Anda dengan:
- Memasukkan baterai sel berbentuk koin ke konektor baterai di bagian belakang papan (dengan sisi "+" baterai menghadap ke atas. Jika papan Anda dilengkapi dengan baterai yang sudah dimasukkan, tarik tab plastik, dan dorong baterai untuk memastikannya terpasang sepenuhnya)
- Jika Anda tidak memiliki baterai koin, Anda dapat menggunakan perangkat programmer SparkFun USB-C Serial Basic untuk memberi daya pada board. Untuk memasang perangkat ini ke board Anda, lakukan langkah-langkah berikut:
- Temukan header enam pin di sisi SparkFun Edge.
- Colokkan SparkFun USB-C Serial Basic ke pin ini, dan pastikan pin berlabel "BLK" dan "GRN" di setiap perangkat disusun dengan benar.
- Hubungkan kabel USB-C antara SparkFun USB-C Serial Basic dan komputer Anda.
Setelah Anda memberi daya pada board dengan memasukkan baterai atau menghubungkan programmer USB, board akan aktif dan mulai mendengarkan dengan mikrofon. Lampu biru akan mulai berkedip.
Model machine learning pada papan tulis ini dilatih untuk mengenali kata "ya" dan "{i>no<i}", dan untuk mendeteksi ada tidaknya ucapan. Sensor ini mengomunikasikan hasilnya dengan menyalakan LED berwarna. Tabel berikut menunjukkan arti setiap warna LED:
Hasil deteksi | Warna LED |
"Ya" | Kuning |
"Tidak" | Merah |
Ucapan tidak diketahui | Hijau |
Tidak ada ucapan yang terdeteksi | Tidak ada LED yang menyala |
Cobalah
Dekatkan papan ke mulut dan ucapkan "ya" beberapa kali. Anda akan melihat flash LED kuning. Jika tidak ada yang terjadi saat Anda mengatakan "ya", berikut beberapa hal yang bisa dicoba:
- Pegang papan sekitar 10" dari mulut Anda
- Hindari suara bising di latar belakang yang berlebihan
- Ulangi "ya" beberapa kali secara berturut-turut (coba ucapkan "ya ya ya")
3. Menyiapkan software
Sekarang kita akan mendownload, menginstal, dan menjalankan sendiri model ucapan pada mikrokontroler. Untuk itu, pertama-tama kita download kode sumber untuk program ini dan dependensi yang kita perlukan untuk membangunnya. Program ini ditulis dalam C++, yang harus dikompilasi menjadi biner sebelum didownload ke board. Biner adalah file yang berisi program dalam bentuk yang dapat dijalankan langsung oleh hardware SparkFun Edge.
Instruksi berikut ditulis untuk Linux atau MacOS.
Download repo TensorFlow
Kode ini tersedia di repositori TensorFlow di GitHub, di lokasi berikut:
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/micro
Buka terminal di komputer Anda, ubah ke direktori tempat Anda biasanya menyimpan project coding, mendownload repositori TensorFlow dan memasukkan direktori yang dibuat, seperti yang ditunjukkan di bawah ini:
cd ~ # change into your home (or any other) directory git clone --depth 1 https://github.com/tensorflow/tensorflow.git cd tensorflow
Mendownload dependensi Python
Kita akan menggunakan Python 3 untuk menyiapkan biner dan mem-flash-nya ke perangkat. Skrip Python bergantung pada ketersediaan library tertentu. Jalankan perintah berikut untuk menginstal dependensi ini:
pip3 install pycrypto pyserial --user
4. Membangun dan menyiapkan biner
Kita akan membangun biner dan menjalankan perintah yang mempersiapkannya untuk diunduh ke perangkat.
Membangun biner
Untuk mendownload semua dependensi yang diperlukan dan membuat biner, jalankan perintah berikut:
make -f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge micro_speech_bin
Jika build berhasil berfungsi, baris akhir output akan muncul seperti berikut:
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
Untuk memastikan biner berhasil dibuat, jalankan perintah berikut:
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"
Anda akan melihat Binary was successfully created
yang dicetak ke konsol. Jika Anda melihat Binary is missing
, berarti ada masalah dengan proses build yang akan memerlukan proses debug.
Menyiapkan biner
Biner harus ditandatangani dengan kunci kriptografis agar dapat di-deploy ke perangkat. Sekarang kita akan menjalankan beberapa perintah yang akan menandatangani biner sehingga dapat diunduh ke SparkFun Edge.
Masukkan perintah berikut untuk menyiapkan beberapa kunci kriptografis tiruan yang dapat digunakan untuk pengembangan:
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
Sekarang, jalankan perintah berikut untuk membuat biner yang ditandatangani:
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
Tindakan ini akan membuat file main_nonsecure_ota.bin
. Sekarang kita akan menjalankan perintah lain untuk membuat versi akhir file yang dapat digunakan untuk mem-flash perangkat dengan skrip bootloader yang akan kita gunakan pada langkah berikutnya:
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
Sekarang Anda seharusnya memiliki file bernama main_nonsecure_wire.bin
di direktori tempat Anda menjalankan perintah. Ini adalah file yang akan kita flash ke perangkat.
5. Bersiaplah untuk mem-flash biner
Apa itu flash?
SparkFun Edge menyimpan program yang sedang dijalankannya di memori flash 512 kilobita. Jika kita ingin board menjalankan program baru, kita harus mengirimkannya ke board, yang akan menyimpannya di flash memory, sehingga menimpa program yang sebelumnya disimpan.
Proses ini disebut “flashing”, dan kita akan menggunakannya untuk mengirim program ke board.
Memasang programmer ke board
Untuk mendownload program baru ke board, kami akan menggunakan programmer serial SparkFun USB-C Serial Basic. Perangkat ini memungkinkan komputer Anda berkomunikasi dengan mikrokontroler melalui USB.
Untuk memasang perangkat ini ke board, lakukan langkah-langkah berikut:
- Temukan header enam pin di sisi SparkFun Edge.
- Colokkan SparkFun USB-C Serial Basic ke pin ini, dan pastikan pin berlabel "BLK" dan "GRN" di setiap perangkat disusun dengan benar.
Memasang programmer ke komputer
Kami akan menghubungkan board ke komputer Anda melalui USB. Untuk memprogram board, kita perlu mengetahui nama yang diberikan komputer. Cara terbaik untuk melakukannya adalah dengan membuat daftar semua perangkat komputer sebelum dan sesudah memasangnya, dan memperhatikan untuk mengetahui perangkat mana yang baru.
Sebelum memasang perangkat melalui USB, jalankan perintah berikut:
If you are using Linux: ls /dev/tty* If you are using MacOS: ls /dev/cu*
Tindakan ini akan menghasilkan daftar perangkat yang terpasang, yang terlihat seperti berikut:
/dev/cu.Bluetooth-Incoming-Port /dev/cu.MALS /dev/cu.SOC
Sekarang, hubungkan programmer ke port USB komputer Anda. Masukkan kembali perintah berikut:
If you are using Linux: ls /dev/tty* If you are using MacOS: ls /dev/cu*
Anda akan melihat item tambahan di output, seperti pada contoh di bawah ini. Item baru Anda mungkin memiliki nama yang berbeda. Item baru ini adalah nama perangkat.
/dev/cu.Bluetooth-Incoming-Port /dev/cu.MALS /dev/cu.SOC /dev/cu.wchusbserial-1450
Pertama, kita akan membuat variabel lingkungan untuk mengidentifikasi nama perangkat:
export DEVICENAME=put your device name here
Selanjutnya, kita akan membuat variabel lingkungan untuk menentukan baud rate, yaitu kecepatan pengiriman data ke perangkat:
export BAUD_RATE=921600
6. Mem-flash biner
Menjalankan skrip untuk melakukan flash board
Untuk melakukan {i>flash board<i}, kita harus memasukkannya ke dalam {i>"bootloader"<i} khusus status yang mempersiapkannya untuk menerima biner baru. Kemudian kita akan menjalankan skrip untuk mengirim biner ke papan.
Mari kita pahami tombol-tombol berikut pada board:
Lakukan langkah-langkah berikut untuk mereset dan melakukan flash board:
- Pastikan board Anda terhubung ke programmer, dan seluruh penyiapan terhubung ke komputer Anda melalui USB.
- Mulai dengan menahan tombol bertuliskan
14
di board. Tetap tahan hingga Langkah 6. - Masih menahan tombol bertanda
14
, untuk mereset board ke status bootloader, klik tombol bertandaRST
untuk mereset board. - Tetap tahan tombol bertanda
14
, tempel perintah berikut ke terminal Anda dan tekan enter untuk menjalankannya (Demi kenyamanan, Anda dapat menempelkan perintah ini ke terminal Anda sebelum mulai menahan tombol, tetapi jangan tekan enter hingga Anda mencapai langkah ini)
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
- Masih menahan tombol bertanda
14
, Anda akan melihat sesuatu seperti berikut muncul di layar:
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...]
- Berhenti menahan tombol bertuliskan
14
di board setelah melihatSending Data Packet of length 8180
(tetapi tidak masalah jika Anda terus menahannya). Program ini akan terus mencetak baris pada terminal. Hasilnya akan terlihat seperti berikut:
[...lots more Sending Data Packet of length 8180...] Sending Data Packet of length 8180 Sending Data Packet of length 6440 Sending Reset Command. Done.
Jika Anda melihat Done
, berarti proses flash berhasil. Jika output program berakhir dengan error, periksa apakah Sending Reset Command
telah dicetak. Jika ya, proses flash kemungkinan berhasil meskipun terjadi error.
Di komputer Linux, Anda mungkin menemukan NoResponse Error
. Hal ini terjadi karena driver serial ch34x telah diinstal bersama driver serial yang ada, yang dapat diselesaikan sebagai berikut:
Langkah 1: Instal ulang versi library ch34x yang benar. Pastikan perangkat dicabut dari komputer selama pemasangan.
git clone https://github.com/juliagoda/CH341SER.git cd CH341SER/ make sudo insmod ch34x.ko sudo rmmod ch341
Langkah 2: Colokkan USB board, lalu jalankan:
dmesg | grep "ch34x"
Anda akan melihat pesan seperti ini:
[ 1299.444724] ch34x_attach+0x1af/0x280 [ch34x] [ 1299.445386] usb 2-13.1: ch34x converter now attached to ttyUSB0
Jika driver yang digunakan bukan "ch34x" (misalnya: ch341), coba nonaktifkan driver lain dengan menjalankan:
rmmod <non-ch34x driver name>
Cabut dan colokkan kembali perangkat dan pastikan driver yang digunakan adalah "ch34x".
7. Demo
Coba program ini
Setelah papan game berhasil di-flash, tekan tombol yang ditandai
RST
untuk memulai ulang board dan memulai program. Jika LED biru mulai berkedip, berarti lampu berkedip. Jika tidak, scroll ke bawah ke bagian "Bagaimana jika tidak berfungsi?" di bawah.
Model machine learning pada papan tulis ini dilatih untuk mengenali kata "ya" dan "{i>no<i}", dan untuk mendeteksi ada tidaknya ucapan. Sensor ini mengomunikasikan hasilnya dengan menyalakan LED berwarna. Tabel berikut menunjukkan arti setiap warna LED:
Hasil deteksi | Warna LED |
"Ya" | Kuning |
"Tidak" | Merah |
Ucapan tidak diketahui | Hijau |
Tidak ada ucapan yang terdeteksi | Tidak ada LED yang menyala |
Cobalah
Dekatkan papan ke mulut dan ucapkan "ya" beberapa kali. Anda akan melihat flash LED kuning. Jika tidak ada yang terjadi saat Anda mengatakan "ya", berikut beberapa hal yang bisa dicoba:
- Pegang papan sekitar 10" dari mulut Anda
- Hindari suara bising di latar belakang yang berlebihan
- Ulangi "ya" beberapa kali secara berturut-turut (coba ucapkan "ya ya ya")
Bagaimana jika tidak berhasil?
Berikut ini beberapa kemungkinan masalah dan cara men-debug-nya:
Masalah: Setelah berkedip, tidak ada LED yang menyala.
Solusi: Coba tekan tombol RST
, atau putuskan sambungan dan hubungkan kembali board dari programmer. Jika tidak ada yang berhasil, coba flash board lagi.
Masalah: LED biru menyala, tetapi sangat redup.
Solusi: Ganti baterai karena hampir habis. Atau, papan dapat diberi daya oleh komputer menggunakan programmer dan kabel.
8. Membaca output debug (opsional)
Tinjau bagian ini jika Anda mengalami masalah dan perlu men-debug kode secara mendetail. Untuk memahami apa yang terjadi dalam mikrokontroler saat kode Anda berjalan, Anda dapat mencetak informasi proses debug melalui koneksi serial board. Anda menggunakan komputer untuk terhubung ke {i>board <i}dan menampilkan data yang dikirim {i>board <i}tersebut.
Membuka koneksi serial
Secara default, kode contoh SparkFun Edge kami mencatat semua perintah lisan, beserta kepercayaan diri mereka. Untuk melihat output board, Anda dapat menjalankan perintah berikut:
screen ${DEVICENAME} 115200
Awalnya, Anda mungkin akan melihat output yang terlihat seperti berikut: (Ini hanya muncul jika board direset setelah terhubung, jika tidak, Anda mungkin mulai melihat informasi debug)
Apollo3 Burst Mode is Available Apollo3 operating in Burst Mode (96MHz)
Coba berikan beberapa perintah dengan mengatakan "ya" atau "tidak". Anda akan melihat informasi debug pencetakan papan untuk setiap perintah:
Heard yes (202) @65536ms
Dalam log di atas, yes
merujuk pada perintah. Angka 202
mengacu pada tingkat keyakinan saat perintah didengar (dengan nilai minimum 200). Terakhir, 65536ms
mengacu pada jumlah waktu yang telah berlalu sejak terakhir kali mikrokontroler direset.
Untuk berhenti menampilkan output debug, tekan Ctrl+A
, langsung diikuti dengan kunci K
, lalu tekan tombol Y
.
Menulis log debug
Anda dapat melihat kode yang mencatat informasi ini di file command_responder.cc yang baru saja Anda gunakan:
tensorflow/lite/micro/examples/micro_speech/sparkfun_edge/command_responder.cc
Untuk mencatat data, Anda dapat memanggil metode error_reporter->Report()
. Alat ini mendukung token printf
standar untuk interpolasi string, yang dapat Anda gunakan untuk menyertakan informasi penting dalam log:
error_reporter->Report("Heard %s (%d) @%dms", found_command, score, current_time);
Metode ini akan berguna saat Anda membuat perubahan sendiri pada kode di bagian berikutnya.
9. Memperluas kode (opsional)
Setelah mengetahui cara membangun dan mem-flash SparkFun Edge, Anda dapat mulai bermain-main dengan kode dan men-deploy-nya ke perangkat untuk melihat hasilnya.
Baca kodenya
Tempat yang baik untuk mulai membaca kode adalah file berikut, command_responder.cc.
tensorflow/lite/micro/examples/micro_speech/sparkfun_edge/command_responder.cc
Anda dapat melihat file tersebut di GitHub di sini.
Metode dalam file ini, RespondToCommand
, dipanggil saat perintah suara terdeteksi. Kode yang ada akan menyalakan LED yang berbeda, bergantung pada apakah terdengar "ya", "tidak", atau perintah yang tidak dikenal terdengar. Cuplikan berikut menunjukkan cara kerjanya:
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);
}
Argumen found_command
berisi nama perintah yang terdeteksi. Dengan memeriksa karakter pertama, rangkaian pernyataan if
ini menentukan LED mana yang akan menyala.
Metode RespondToCommand dipanggil dengan beberapa argumen:
void RespondToCommand(tflite::ErrorReporter* error_reporter,
int32_t current_time, const char* found_command,
uint8_t score, bool is_new_command) {
error_reporter
digunakan untuk mencatat informasi debug ke dalam log (info selengkapnya akan dijelaskan nanti).current_time
menunjukkan waktu saat perintah terdeteksi.found_command
memberi tahu kita perintah mana yang terdeteksi.score
menunjukkan seberapa yakin kita bahwa kita mendeteksi perintah.is_new_command
memberi tahu kami apakah ini pertama kalinya Anda mendengar perintah tersebut.
score
adalah bilangan bulat dari 0-255 yang menunjukkan probabilitas bahwa perintah terdeteksi. Kode contoh hanya menganggap perintah valid jika skornya lebih besar dari 200. Berdasarkan pengujian kami, perintah yang paling valid berada dalam kisaran 200-210.
Mengubah kode
Board SparkFun Edge memiliki empat LED. Saat ini, kita mengedipkan LED biru untuk menunjukkan bahwa pengenalan sedang terjadi. Anda dapat melihatnya di file 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);
}
Karena kita memiliki bank yang terdiri dari empat LED, mari kita modifikasi program untuk menggunakannya sebagai indikator visual score
dari perintah tertentu. Skor rendah akan pantas untuk satu LED yang menyala, dan skor tinggi akan menghasilkan beberapa lampu.
Untuk memastikan kita memiliki cara untuk mengetahui bahwa program
sedang berjalan, kita akan membuat flash LED merah terus-menerus, bukan biru. LED biru, hijau, dan kuning yang berdekatan akan digunakan untuk menunjukkan kekuatan score
terbaru kami. Dan untuk kesederhanaan, kita hanya akan menyalakan LED tersebut jika kata "ya" diucapkan. Jika ada kata lain yang terdeteksi, LED akan menyala.
Untuk melakukan perubahan ini, ganti semua kode di file command_responder.cc
Anda dengan cuplikan berikut:
#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);
}
}
}
}
Jika perintah baru terdeteksi, is_new_command
akan bernilai benar (true). Kita akan menghapus LED biru, hijau, dan kuning, lalu menyalakannya lagi bergantung pada nilai found_command
dan score
.
Membuat ulang dan mem-flash
Setelah membuat perubahan kode, uji dengan menjalankan semua langkah dari Membuat dan menyiapkan biner.
10. Langkah Berikutnya
Selamat, Anda telah berhasil membuat detektor ucapan pertama pada mikrokontroler!
Kami harap Anda menikmati pengantar singkat tentang pengembangan TensorFlow Lite untuk Microcontrollers ini. Gagasan deep learning tentang mikrokontroler adalah hal baru dan menarik, dan kami mendorong Anda untuk keluar dan bereksperimen.
Dokumen referensi
- Latih model Anda sendiri untuk memahami berbagai perintah, setelah Anda memiliki pengalaman bekerja dengan program dasar. Catatan: Pelatihan memerlukan waktu beberapa jam.
- Pelajari TensorFlow Lite untuk Microcontrollers lebih lanjut ( Situs, GitHub).
- Coba contoh lain dan coba jalankan di Edge SparkFun Edge, jika didukung.
- Lihat buku O'Reilly TinyML: Machine Learning with TensorFlow on Arduino and Ultra-Low Power Micro-Controllers, yang memperkenalkan machine learning pada perangkat kecil dan menjelaskan beberapa project seru. Codelab ini didasarkan pada Bab 7 dan 8 dalam buku.
Terima kasih, dan bersenang-senanglah membuat aplikasi!