Tentang proyek ini
Ikhtisar
Ide di balik proyek ini adalah untuk membuat klasifikasi bahasa, menggunakan jaringan saraf/pembelajaran dalam yang diimplementasikan dalam mikrokontroler. Perangkat akan mengidentifikasi satu kata untuk bahasa Italia, Inggris, dan Prancis. Kata-kata yang harus dikenali adalah "si " untuk orang Italia, "oui " untuk Prancis, dan "ya " untuk bahasa Inggris. Perangkat mendengarkan terus menerus dan setelah salah satu dari 3 kata dikenali, perangkat akan menampilkan bendera bahasa terkait.
Proyek ini didasarkan pada dua komponen utama mikrokontroler Arduino Nano 33 BLE Sense dan platform pengembangan Edge Impulse Studio.
Implementasi proyek mengikuti langkah-langkah berikut:
- Mengambil sampel/membuat kumpulan data
- Desain model
- Melatih model
- Menguji model
- Sesuaikan untuk perangkat keras
- Penerapan model dan penyesuaiannya
- Bangun perangkat terakhir (perangkat keras di sekitar model).
Pengambilan Sampel/Membuat Kumpulan Data
Dataset terdiri dari rekaman 3 kata (oui, si, yes) secara global yang berlangsung sekitar 30 menit (10 menit untuk setiap kata).
Untuk setiap kata dibuat file suara terus menerus, dimana kata yang sama diulang terus menerus, kemudian menggunakan aplikasi Audacity file tersebut dipecah menjadi beberapa file masing-masing berdurasi satu detik. Setiap file berisi contoh kata.
File-file ini kemudian diunggah ke edge impuls dan diberi label sesuai dengan kata.
Selain file-file ini, satu set file rekaman berdurasi 1 detik telah diunggah dan diberi label sebagai kebisingan latar belakang.
Secara global, data Pelatihan terdiri dari 33 menit (10 menit untuk setiap kata dan 3 menit untuk kebisingan latar belakang)
Desain modelnya
Model tersebut diimplementasikan dengan memanfaatkan platform impuls tepi, di mana sebagian besar algoritme yang diperlukan yang sudah didefinisikan telah diimplementasi.
Langkah pertama untuk membuat model adalah mengubah suara menjadi deret waktu. Kemudian deret waktu dipartisi dengan ukuran jendela waktu yang telah ditentukan.
(Transformasi pertama ini ditunjukkan pada sisi merah dari gambar di bawah).
Langkah kedua adalah menggunakan teknik pemrosesan sinyal, dalam hal ini MFCC (Mel Frequency Cepstral Coefficients), untuk mengekstrak fitur dari deret waktu yang paling mencirikan masing-masing dari 4 kelas (3 kata + latar belakang).
Di bawah ini adalah contoh transformasi MFCC dan koefisiennya.
Konvolusi deret waktu dan koefisien digunakan untuk memberi makan jaringan saraf. Terakhir, output dari jaringan saraf memberikan kemungkinan kepemilikan untuk setiap kelas.
Di bawah ini ikhtisar implementasi jaringan saraf dan kinerja klasifikasinya.
Pelatihan - Sesuaikan untuk Arduino Nano 33 BLE Sense
Untuk pelatihan dan penyesuaian model akhir, opsi baru tersedia di Edge Impulse Studio yang disebut "EON Tuner ". Memungkinkan untuk memilih arsitektur yang optimal untuk aplikasi pembelajaran mesin yang disematkan.
Ini menjalankan banyak contoh model yang mungkin secara paralel, setiap contoh dengan konfigurasi berbeda (teknik digital sinyal berbeda dan arsitektur jaringan saraf berbeda).
Opsi ini hanya memerlukan beberapa informasi untuk dijalankan:
- "Target " yang mewakili jenis model (dalam hal ini "Penemuan Kata Kunci ")
- Perangkat keras tempat aplikasi berjalan (dalam hal ini "Arduino Nano 33 BLE Sense (Cortex-M4F 64MHz) ".
Untuk setiap instance, ini memberikan beberapa metrik kinerja klasifikasi, waktu yang diperlukan untuk komputasi, jumlah ram, dan ruang sistem file yang digunakan pada sistem file mikrokontroler.
Untuk proyek ini kami memilih 5 contoh terbaik untuk akurasi klasifikasi dan dari mereka dipilih yang tercepat.
Pengujian
Pengujian dilakukan dengan mengumpulkan satu set file perekam baru dan memeriksa kualitas klasifikasi.
Setelah itu memverifikasi bahwa klasifikasi itu akurat. Kami pindah ke langkah implementasi berikutnya, penerapan terakhir.
Penerapan
Penerapannya berkat studio edge-impulse cukup mudah.
Itu dipilih opsi perpustakaan Arduino dari opsi penyebaran. Itu memberikan file model arduino C standar, yang dapat disesuaikan untuk kebutuhan kita.
Setelah bangunan ditutup oleh edge-impulse, file zip dibuat dan diunduh di mesin lokal, dan file tersebut hanya perlu diimpor ke Arduino Ide untuk penyesuaian akhir.
Kode
Kode tersedia di tautan. Kode ini didasarkan pada kode yang diunduh dari edge-impulse dengan beberapa penyesuaian, tercantum di bawah ini.
1. Itu menambahkan perpustakaan Adafruit_PWMServoDriver.h untuk menggerakkan servo yang terpasang pada flag.
2. Itu didefinisikan sebagai fungsi servos_selector untuk mengoordinasikan servos sesuai dengan hasil klasifikasi.
void servos_selector(int iter){
time_now =millis();
delta=time_now - time_was;
if (delta> 2000){
time_was=time_now;
switch (iter) {
case 0:
pwm.setPWM(0, 0, 350);
delay(500);
pwm.setPWM( 0, 0, 200);
pwm.setPWM(1, 0, 200);
pwm.setPWM(2, 0, 200);
break;
kasus 1:
pwm.setPWM(1, 0, 350);
Serial.println("2222");
delay(500);
pwm.setPWM(0, 0, 200 );
pwm.setPWM(1, 0, 200);
pwm.setPWM(2, 0, 200);
break;
kasus 2:
pwm .setPWM(2, 0, 350);
Serial.println("333");
delay(500);
pwm.setPWM(0, 0, 200);
pwm.setPWM(1, 0, 200);
pwm.setPWM(2, 0, 200);
break;
}
}
}
3. Terakhir, ditambahkan kondisi IF yang memanggil servos_select fungsi berdasarkan "result.classification " objek.
for (size_t ix =0; ix ei_printf(" %s:%.5f\n", result.classification[ix].label,
result.classification[ix].value);
}
#if EI_CLASSIFIER_HAS_ANOMALY ==1
ei_printf(" skor anomali:%.3f\n", result.anomaly);
#endif
print_results =0;
}
if (result.classification[1].value> 0.80){
servos_selector(0);
}
else if (result.classification[2].value> 0.80){
servos_selector(1);
}
else if (result.classification[3].value> 0.80){
servos_selector(2);
}
}
Sirkuit Listrik
Rangkaian listrik ini didasarkan pada mikrokontroler Arduino Nano 33 BLE Sense mikrokontroler dan menggunakan PCA9685 untuk menggerakkan 3 servos.
Beban kerja PCA9685 didukung oleh baterai eksternal 9v.
Itu saja.
Kode
kode
https://github.com/EnzoCalogero/Tensorflow_Lite_embeded/tree/main/nano_sense_EdgeImpulse/language_detection/nano_ble33_sense_microphone_continuous Suku cadang dan penutup khusus
Skema
languagedetection_9RxXhRX5sj.fzz