- Komponen Diperlukan
- Diagram Sirkuit
- Membuat Set Data untuk Pengenalan Ucapan Arduino
- Melatih Model
- Kode Arduino untuk Pengenalan Suara Arduino
Teknologi pengenalan ucapan sangat berguna dalam otomatisasi yang tidak hanya memberi Anda kendali handsfree atas perangkat tetapi juga menambahkan keamanan pada sistem. Selain membuat gadget yang dikendalikan suara, pengenalan ucapan juga memberikan bantuan yang signifikan kepada orang-orang yang menderita berbagai disabilitas.
Dalam proyek sebelumnya kami membangun Konverter Text to Speech (TTS) berbasis Arduino dan lampu yang dikendalikan suara. Sekarang dalam proyek ini, kita akan menggunakan pembelajaran mesin untuk melatih model pengenalan suara menggunakan Edge Impulse Studio dengan tiga perintah yaitu ' LIGHT ON' , ' LIGHT OFF', dan ' NOISE '. Edge Impulse adalah platform pembelajaran mesin online yang memungkinkan pengembang membuat solusi perangkat cerdas generasi berikutnya dengan Pembelajaran Mesin yang disematkan. Sebelumnya kami menggunakan Edge impulse studio untuk membedakan suara batuk dan suara bising.
Komponen Diperlukan
Perangkat keras
- Arduino 33 BLE Sense
- LED
- Kabel Jumper
Perangkat lunak
- Edge Impulse Studio
- IDE Arduino
Kami telah membahas tutorial rinci tentang Arduino 33 BLE Sense.
Diagram Sirkuit
Diagram Sirkuit untuk pengenalan suara ini menggunakan Arduino diberikan di bawah ini. Fritzing part untuk Arduino 33 BLE tidak tersedia, jadi saya menggunakan Arduino Nano karena keduanya memiliki pinout yang sama.
Kabel positif LED dihubungkan ke pin digital 5 dari Arduino 33 BLE sense dan kabel negatif terhubung ke pin GND Arduino.
Membuat Set Data untuk Pengenalan Ucapan Arduino
Di sini Edge Impulse Studio digunakan untuk melatih model Pengenalan Pidato kami. Melatih model di Edge Impulse Studio mirip dengan melatih model pembelajaran mesin di framework pembelajaran mesin lainnya. Untuk pelatihan, langkah pertama model pembelajaran mesin adalah mengumpulkan kumpulan data yang memiliki sampel data yang ingin kami kenali.
Karena tujuan kami adalah mengontrol LED dengan perintah suara kami, kami perlu mengumpulkan sampel suara untuk semua perintah dan kebisingan sehingga dapat membedakan antara perintah suara dan Suara lainnya.
Kami akan membuat dataset dengan tiga kelas " LED ON ", " LED OFF " dan " noise ". Untuk membuat set data, buat akun Edge Impulse, verifikasi akun Anda, lalu mulai proyek baru. Anda dapat memuat sampel dengan menggunakan ponsel Anda, papan Arduino Anda atau Anda dapat mengimpor set data ke akun impuls tepi Anda. Cara termudah untuk memuat sampel ke akun Anda adalah dengan menggunakan ponsel Anda. Untuk itu hubungkan ponsel dengan Edge Impulse.
Untuk menghubungkan ponsel, klik ' Perangkat ' dan kemudian klik ' Hubungkan Perangkat Baru' .
Sekarang di jendela berikutnya klik 'Gunakan Ponsel Anda' , dan kode QR akan muncul. Pindai kode QR dengan Ponsel Anda atau masukkan URL yang diberikan pada kode QR.
Ini akan menghubungkan ponsel Anda dengan studio Edge Impulse.
Dengan ponsel Anda terhubung dengan Edge Impulse Studio, Anda sekarang dapat memuat sampel Anda. Untuk memuat sampel, klik ' Akuisisi data' . Sekarang di halaman Akuisisi data masukkan nama label, pilih mikrofon sebagai sensor, dan masukkan panjang sampel. Klik ' Mulai pengambilan sampel' , perangkat Anda akan mengambil sampel 2 Detik. Rekam total 10 hingga 12 sampel suara dalam kondisi berbeda.
Setelah mengunggah sampel untuk kelas pertama sekarang atur perubahan label dan kumpulkan sampel untuk kelas ' lampu mati' dan 'kebisingan' .
Sampel-sampel ini untuk Pelatihan modul, pada langkah selanjutnya, kami akan mengumpulkan Data Tes. Data uji harus minimal 30% dari data pelatihan, jadi kumpulkan 4 sampel 'kebisingan' dan 4 hingga 5 sampel untuk 'lampu menyala' dan 'lampu mati'.
Melatih Model
Saat kumpulan data kami siap, sekarang kami dapat membuat impuls untuk data tersebut. Untuk itu pergi ke halaman ' Buat impuls '. Ubah pengaturan default dari ukuran Window 1000 ms menjadi 1200ms dan Window 500 ms meningkat menjadi 50ms. Ini berarti data kami akan diproses 1,2 detik pada satu waktu, mulai setiap 58ms.
Sekarang di halaman ' Buat impuls', klik ' Tambahkan blok pemrosesan' . Di jendela berikutnya pilih blok Audio (MFCC). Setelah itu klik ' Add a learning block' dan pilih blok Neural Network (Keras). Kemudian klik ' Save Impulse' .
Pada langkah selanjutnya pergi ke halaman MFCC dan kemudian klik 'Generate Features'. Ini akan menghasilkan blok MFCC untuk semua jendela audio kita.
Setelah itu masuk ke halaman ' NN Classifier' dan klik pada tiga titik di sudut kanan atas dari ' Neural Network settings' dan pilih ' Switch to Keras (expert) mode' .
Gantilah yang asli dengan kode berikut dan ubah ' Minimum confidence rating' menjadi ' 0.70' . Kemudian klik tombol ' Mulai pelatihan' . Ini akan mulai melatih model Anda.
impor tensorflow sebagai tf dari tensorflow.keras.models impor Sequential dari tensorflow.keras.layers impor Dense, InputLayer, Dropout, Ratakan, Bentuk kembali, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D dari tensorflow.keras.optimizers impor Adam dari tensorflow.keras.constraints impor MaxNorm # model arsitektur model = Sequential () model.add (InputLayer (input_shape = (X_train.shape,), nama = 'x_input')) model.add (Bentuk kembali ((int (X_train.shape / 13), 13, 1), input_shape = (X_train.shape,))) model.add (Conv2D (10, kernel_size = 5, activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, padding = 'same')) model.add (Conv2D (5, kernel_size = 5, activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2,padding = 'same')) model.add (Flatten ()) model.add (Dense (kelas, aktivasi = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # ini mengontrol opt kecepatan pembelajaran = Adam (lr = 0.005, beta_1 = 0.9, beta_2 = 0.999) # latih model jaringan saraf. Kompilasi (kerugian = 'kategorikal_crossentropy', pengoptimal = opt, metrik =) model.fit (X_train, Y_train, batch_size = 32, epochs = 9, validation_data = (X_test, Y_test), verbose = 2)verbose = 2)verbose = 2)
Setelah model pelatihan akan ditampilkan kinerja pelatihan. Bagi saya, akurasinya 81,1% dan kerugian 0,45 itu bukan kinerja yang ideal tetapi kami dapat melanjutkannya. Anda dapat meningkatkan performa model Anda dengan membuat kumpulan data yang luas.
Sekarang setelah model Pengenalan Ucapan kami siap, kami akan menerapkan model ini sebagai pustaka Arduino. Sebelum mengunduh model sebagai perpustakaan Anda dapat menguji kinerja dengan membuka halaman ' Klasifikasi Langsung' . Fitur klasifikasi Live memungkinkan Anda menguji model dengan data pengujian yang ada yang disertakan dengan kumpulan data atau dengan streaming data audio dari ponsel Anda.
Untuk menguji data dengan telepon Anda, pilih ' Alihkan ke Mode Klasifikasi' pada telepon Anda.
Sekarang untuk mendownload model sebagai Arduino Library, buka halaman ' Deployment ' dan pilih ' Arduino Library' . Sekarang gulir ke bawah dan klik ' Build ' untuk memulai proses. Ini akan membangun perpustakaan Arduino untuk proyek Anda.
Sekarang tambahkan perpustakaan di Arduino IDE Anda. Untuk itu buka Arduino IDE lalu klik Sketch> Include Library> Add.ZIP library
Kemudian, muat contoh dengan membuka File> Contoh> Nama proyek Anda - Edge Impulse> nano_ble33_sense_microphone
Kode Arduino untuk Pengenalan Suara Arduino
Di sini beberapa perubahan telah dilakukan untuk mengontrol LED dengan perintah suara.
Kami membuat beberapa perubahan di void loop () di mana ia mencetak kemungkinan perintah. Dalam kode asli, itu mencetak semua label dan nilainya bersama-sama.
untuk (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Untuk mengontrol LED kita harus menyimpan semua probabilitas perintah dalam tiga variabel berbeda sehingga kita dapat meletakkan pernyataan kondisional padanya. Jadi menurut kode baru jika probabilitas perintah ' light on' lebih dari 0,50 maka LED akan menyala dan jika probabilitas perintah ' light off' lebih dari 0,50 maka LED akan mati.
untuk (size_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {noise = result.classification.value; Serial.println ("Kebisingan:"); Serial.println (kebisingan); } untuk (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = result.classification.value; Serial.println ("Light Off:"); Serial.print (lightoff); } lighton = 1- (noise + lightoff); Serial.println ("Lampu ON:"); Serial cetak (lighton); if (lighton> 0,50) {digitalWrite (led, HIGH); } if (lightoff> 0,50) {digitalWrite (led, LOW); }
Setelah melakukan perubahan, unggah kode tersebut ke Arduino Anda. Buka monitor serial di 115200 baud.
Ini adalah bagaimana Anda dapat membangun pengenalan suara menggunakan Arduino dan memberikan perintah untuk mengoperasikan perangkat.
Video kerja lengkap dengan perpustakaan dan kode diberikan di bawah ini.