Pengenalan Ucapan AI dengan TensorFlow Lite untuk Microcontrollers dan SparkFun Edge

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.

bf256d403a1821af.gif

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.

1360b61fbfa33657.jpeg

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)

358ffdb9eb758b90.pngS

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.

aa4493835a2338c6.png

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:

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 atau python --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:

  1. 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)

25a6cc6b208e8a4e.pngS

  1. 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.

b140822f0019f92a.png

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:

  1. Temukan header enam pin di sisi SparkFun Edge.
  2. Colokkan SparkFun USB-C Serial Basic ke pin ini, dan pastikan pin berlabel "BLK" dan "GRN" di setiap perangkat disusun dengan benar.

b140822f0019f92a.png

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:

64c620570b9d2f83.pngS

Lakukan langkah-langkah berikut untuk mereset dan melakukan flash board:

  1. Pastikan board Anda terhubung ke programmer, dan seluruh penyiapan terhubung ke komputer Anda melalui USB.
  2. Mulai dengan menahan tombol bertuliskan 14 di board. Tetap tahan hingga Langkah 6.
  3. Masih menahan tombol bertanda 14, untuk mereset board ke status bootloader, klik tombol bertanda RST untuk mereset board.
  4. 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
  1. 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...]
  1. Berhenti menahan tombol bertuliskan 14 di board setelah melihat Sending 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.

bf256d403a1821af.gif

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

26699b18f2b199f.pngS

Terima kasih, dan bersenang-senanglah membuat aplikasi!