Tentang proyek ini
Premis
Pembelajaran mesin di edge sangat berguna untuk membuat perangkat yang dapat menyelesaikan tugas "cerdas" dengan pemrograman dan diagram alur logis yang jauh lebih sedikit dibandingkan dengan kode tradisional. Itu sebabnya saya ingin memasukkan deteksi kata kunci mutakhir yang dapat mengenali kata-kata tertentu dan kemudian melakukan tugas berdasarkan apa yang dikatakan.
Perangkat Keras
Proyek ini hanya memiliki satu komponen:Arduino Nano 33 BLE Sense. Keajaiban yang sebenarnya terjadi dalam model pembelajaran mesin. Arduino Nano 33 BLE Sense penuh dengan sensor, termasuk mikrofon, IMU 9-sumbu, sensor lingkungan, dan sensor isyarat/kedekatan/warna/cahaya sekitar (APDS-9960). Mikrokontroler di dalamnya adalah nRF52840 yang berjalan pada 64MHz dan berisi memori flash 1MB dan RAM 256KB. Proyek ini juga menggunakan LED RGB onboard untuk menampilkan warna saat ini.
Menyiapkan Impuls Tepi
Saya mulai dengan membuat proyek baru di Edge Impulse dan kemudian menginstal alat Edge Impulse CLI. Untuk instruksi lebih lanjut tentang cara melakukannya, kunjungi halaman instruksi instalasi. Ini memungkinkan Arduino Nano berkomunikasi dengan layanan cloud untuk menerima perintah dan mengirim data sensor secara otomatis. Saya mengunduh firmware Edge Impulse terbaru dan mem-flash-nya ke papan dengan mengklik dua kali tombol reset untuk membuatnya masuk ke mode bootloader. Kemudian saya menjalankan flash_windows.bat
untuk mentransfernya.
Di atas command prompt saya menjalankan edge-impulse-daemon
dan mengikuti wizard untuk mengaturnya. Sekarang Nano muncul di daftar perangkat proyek, yang memungkinkan sampel diambil dan diunggah sebagai bagian dari set data pelatihan/pengujian.
Mengumpulkan Sampel
Melatih model pembelajaran mesin membutuhkan data, dan cukup banyak. Saya ingin memiliki mode berikut untuk strip LED RGB:
- Aktif
- Nonaktif
- Merah
- Hijau
- Biru
Saya mendapat sekitar 1 menit suara untuk setiap mode di mana saya berulang kali mengucapkan kata pada interval 1-2 detik dan membaginya.
Tetapi memiliki sampel ini saja tidak cukup, karena kebisingan latar belakang dan kata-kata lain akan memberikan pembacaan yang salah. Untungnya, Edge Impulse sudah menyediakan set data bawaan untuk kebisingan dan kata-kata 'tidak dikenal', jadi saya menggunakan alat "Unggah Data yang Ada" untuk mengunggah file audio ini ke dalam data pelatihan.
Akhirnya, saya menyeimbangkan kembali dataset agar masing-masing memiliki pembagian 80-20 yang direkomendasikan untuk data pelatihan dan pengujian.
Melatih Model
Sekarang dipersenjatai dengan satu jam data pelatihan dan banyak label, sudah waktunya untuk melatih seorang model. Impuls yang saya rancang mengambil audio sebagai data deret waktu dengan ukuran jendela 1 detik dan peningkatan jendela 500 ms. Kemudian melewati blok MFCC ke blok jaringan saraf Keras.
Blok MFCC memungkinkan Anda untuk mengonfigurasi bagaimana audio akan diproses, bersama dengan spektogram yang menunjukkan frekuensi secara visual.
Saya meninggalkan pengaturan jaringan saraf sebagai sebagian besar default, tetapi membuat beberapa modifikasi juga. Pertama, saya mengubah ambang batas kepercayaan minimum dari 0,80 menjadi 0,70, dan menambahkan sedikit augmentasi data dalam bentuk pita waktu noise dan masking tambahan. Ini membantu NN untuk menghindari model yang terlalu pas, karena memiliki data yang lebih beragam untuk dikerjakan.
Menerapkan pada Arduino Nano 33 BLE Sense
Arduino Nano 33 BLE Sense bertindak sebagai mikrofon yang selalu aktif yang terus-menerus mengambil sampel audio dan mendeteksi jika salah satu kata kunci telah diucapkan. Setelah ditemukan, kata kunci diubah menjadi indeks yang digunakan untuk memecahkan kode warna yang diinginkan. Untuk kata kunci on atau off, LED diatur ke hitam atau abu-abu muda.
Saya mengunduh model sebagai pustaka dan menambahkannya ke Arduino IDE, lalu mengkompilasi dan mem-flash kode ke Nano.
Kode
- Deteksi Kata Kunci RGBLED
RGBLEDDeteksi Kata KunciC/C++
/* Contoh Edge Impulse Arduino * Hak Cipta (c) 2020 EdgeImpulse Inc. * * Dengan ini izin diberikan, gratis, kepada siapa pun yang mendapatkan salinan * perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk menangani * dalam Perangkat Lunak tanpa batasan, termasuk namun tidak terbatas pada hak * untuk menggunakan, menyalin, memodifikasi, menggabungkan, menerbitkan, mendistribusikan, mensublisensikan, dan/atau menjual * salinan Perangkat Lunak, dan untuk mengizinkan orang-orang yang memiliki Perangkat Lunak * disediakan untuk melakukannya, tunduk pada ketentuan berikut:* * Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus disertakan dalam * semua salinan atau sebagian besar Perangkat Lunak. * * PERANGKAT LUNAK INI DISEDIAKAN "SEBAGAIMANA ADANYA", TANPA JAMINAN APA PUN, TERSURAT MAUPUN * TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN DIPERDAGANGKAN, * KESESUAIAN UNTUK TUJUAN TERTENTU DAN TANPA PELANGGARAN. DALAM KONDISI APAPUN * PENULIS ATAU PEMEGANG HAK CIPTA TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN ATAU TANGGUNG JAWAB * LAINNYA, BAIK DALAM TINDAKAN KONTRAK, KERUGIAN ATAU LAINNYA, YANG TIMBUL DARI, * DARI ATAU SEHUBUNGAN DENGAN PERANGKAT LUNAK ATAU LAINNYA DEALINGS DI * PERANGKAT LUNAK. */// Jika memori target Anda terbatas, hapus makro ini untuk menghemat 10K RAM#define EIDSP_QUANTIZE_FILTERBANK 0/** * Tentukan jumlah irisan per model jendela. Misalnya. jendela model 1000 ms * dengan irisan per jendela model disetel ke 4. Menghasilkan ukuran irisan 250 ms. * Untuk info lebih lanjut:https://docs.edgeimpulse.com/docs/continuous-audio-sampling */#define EI_CLASSIFIER_SLICES_PER_MODEL_WINDOW 3/* Termasuk ------------------- --------------------------------------------- */#include #include #include