- Komponen Diperlukan
- Rajah Litar
- Membuat Dataset untuk Pengenalan Ucapan Arduino
- Melatih Model
- Kod Arduino untuk Pengecaman Suara Arduino
Teknologi pengecaman pertuturan sangat berguna dalam automasi yang bukan sahaja memberi anda kawalan bebas tangan ke atas peranti tetapi juga menambahkan keselamatan pada sistem. Selain membuat alat kawalan suara, pengecaman pertuturan juga memberikan pertolongan yang besar kepada orang yang menderita pelbagai kecacatan.
Dalam projek sebelumnya, kami membina Arduino berasaskan Text to Speech (TTS) Converter dan lampu kawalan suara. Sekarang dalam projek ini, kita akan menggunakan pembelajaran mesin untuk melatih model pengecaman pertuturan menggunakan Edge Impulse Studio dengan tiga arahan iaitu ' LIGHT ON' , ' LIGHT OFF', dan ' NOISE '. Edge Impulse adalah platform pembelajaran mesin dalam talian yang membolehkan pemaju membuat penyelesaian peranti pintar generasi seterusnya dengan Pembelajaran Mesin tertanam. Kami menggunakan Edge impulse studio sebelumnya untuk membezakan batuk dan bunyi bising.
Komponen Diperlukan
Perkakasan
- Arduino 33 BLE Sense
- LED
- Wayar Pelompat
Perisian
- Studio Edge Impulse
- Arduino IDE
Kami telah membahas tutorial terperinci mengenai Arduino 33 BLE Sense.
Rajah Litar
Diagram Litar untuk pengecaman suara ini menggunakan Arduino diberikan di bawah. Bahagian fritzing untuk Arduino 33 BLE tidak tersedia, jadi saya menggunakan Arduino Nano kerana kedua-duanya mempunyai pinout yang sama.
Pimpin positif LED disambungkan ke pin digital 5 Arduino 33 BLE sense dan Negative lead disambungkan ke pin GND Arduino.
Membuat Dataset untuk Pengenalan Ucapan Arduino
Di sini Edge Impulse Studio digunakan untuk melatih model Pengecaman Ucapan kami. Melatih model di Edge Impulse Studio adalah serupa dengan melatih model pembelajaran mesin pada kerangka pembelajaran mesin yang lain. Untuk latihan, langkah pertama model pembelajaran mesin adalah mengumpulkan kumpulan data yang mempunyai sampel data yang ingin kami kenali.
Oleh kerana tujuan kami adalah mengendalikan LED dengan arahan suara kami, kami perlu mengumpulkan sampel suara untuk semua perintah dan bunyi sehingga dapat membezakan antara perintah suara dan Bunyi yang lain.
Kami akan membuat set data dengan tiga kelas " LED ON ", " LED OFF " dan " noise ". Untuk membuat set data, buat akaun Edge Impulse, sahkan akaun anda dan kemudian mulakan projek baru. Anda boleh memuatkan sampel dengan menggunakan telefon bimbit, papan Arduino anda atau anda boleh mengimport set data ke dalam akaun impuls tepi anda. Cara termudah untuk memasukkan sampel ke dalam akaun anda adalah dengan menggunakan telefon bimbit anda. Untuk itu sambungkan telefon bimbit dengan Edge Impulse.
Untuk menyambungkan telefon bimbit, klik ' Peranti ' dan kemudian klik ' Sambungkan Peranti Baru' .
Sekarang di tetingkap seterusnya klik pada 'Gunakan Telefon Bimbit Anda' , dan kod QR akan muncul. Imbas kod QR dengan Telefon bimbit anda atau masukkan URL yang diberikan pada kod QR.
Ini akan menghubungkan telefon anda dengan studio Edge Impulse.
Dengan telefon anda disambungkan dengan Edge Impulse Studio, kini anda boleh memuatkan sampel anda. Untuk memuatkan sampel klik pada ' Pemerolehan data' . Sekarang di halaman Perolehan data masukkan nama label, pilih mikrofon sebagai sensor, dan masukkan panjang sampel. Klik pada ' Start sampling' , peranti anda akan menangkap sampel 2 Sec. Rakam sejumlah 10 hingga 12 sampel suara dalam keadaan yang berbeza.
Setelah memuat naik sampel untuk kelas pertama sekarang tetapkan label perubahan dan kumpulkan sampel untuk kelas ' light off' dan 'noise' .
Sampel ini adalah untuk Melatih modul, pada langkah seterusnya, kami akan mengumpulkan Data Ujian. Data ujian mestilah sekurang-kurangnya 30% daripada data latihan, jadi kumpulkan 4 sampel 'noise' dan 4 hingga 5 sampel untuk 'light on' dan 'light off'.
Melatih Model
Oleh kerana dataset kami sudah siap, sekarang kami dapat membuat dorongan untuk data tersebut. Untuk itu pergi ke halaman ' Buat impuls '. Ubah tetapan lalai ukuran Window 1000 ms menjadi 1200ms dan kenaikan Window 500 ms menjadi 50ms. Ini bermaksud data kami akan diproses 1.2 s pada satu masa, bermula setiap 58ms.
Sekarang di halaman ' Buat impuls' klik pada ' Tambah blok pemprosesan' . Di tetingkap seterusnya pilih blok Audio (MFCC). Selepas itu klik pada ' Tambah blok pembelajaran' dan pilih blok Rangkaian Neural (Keras). Kemudian klik pada ' Save Impulse' .
Pada langkah seterusnya pergi ke halaman MFCC dan kemudian klik pada 'Generate Features'. Ia akan menghasilkan blok MFCC untuk semua tetingkap audio kami.
Selepas itu pergi ke halaman ' NN Classifier' dan klik pada tiga titik di sudut kanan atas ' Tetapan Rangkaian Neural' dan pilih ' Tukar ke mod Keras (pakar)' .
Ganti yang asli dengan kod berikut dan ubah ' Peringkat keyakinan minimum' menjadi ' 0.70' . Kemudian klik pada butang ' Mula latihan' . Ia akan mula melatih model anda.
import tensorflow sebagai tf dari tensorflow.keras.models import Sequential dari tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D dari tensorflow.keras.optimflowers import dari tensorflow.keras.optimizers import MaxNorm # model model seni bina = Sequential () model.add (InputLayer (input_shape = (X_train.shape,), name = 'x_input')) model.add (Reshape ((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 (ukuran_ kolam = 2,padding = 'same')) model.add (Flatten ()) model.add (Dense (class, activation = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # ini mengawal kadar pembelajaran memilih = Adam (lr = 0.005, beta_1 = 0.9, beta_2 = 0.999) # latih model neural network.compile (loss ='ategorical_crossentropy ', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, zaman) = 9, validasi_data = (X_test, Y_test), verbose = 2)kata kerja = 2)kata kerja = 2)
Setelah melatih model itu akan menunjukkan prestasi latihan. Bagi saya, ketepatannya adalah 81.1% dan kerugian adalah 0.45 yang bukan prestasi yang ideal tetapi kita boleh meneruskannya. Anda boleh meningkatkan prestasi model anda dengan membuat set data yang luas.
Sekarang kerana model Pengenalan Ucapan kami sudah siap, kami akan menggunakan model ini sebagai perpustakaan Arduino. Sebelum memuat turun model sebagai perpustakaan, anda boleh menguji prestasinya dengan pergi ke halaman 'Klasifikasi Langsung' . Ciri klasifikasi Langsung membolehkan anda menguji model baik dengan data pengujian yang ada yang disertakan dengan set data atau dengan mengalirkan data audio dari telefon bimbit anda.
Untuk menguji data dengan telefon anda, pilih ' Beralih ke Mod Klasifikasi' di telefon anda.
Sekarang untuk memuat turun model sebagai Perpustakaan Arduino, pergi ke halaman ' Penyebaran ' dan pilih ' Perpustakaan Arduino' . Sekarang tatal ke bawah dan klik ' Build ' untuk memulakan prosesnya. Ini akan membina perpustakaan Arduino untuk projek anda.
Sekarang tambahkan perpustakaan di Arduino IDE anda. Untuk itu buka Arduino IDE dan kemudian klik pada Sketch> Include Library> Add.ZIP library
Kemudian, muatkan contoh dengan pergi ke Fail> Contoh> Nama projek anda - Edge Impulse> nano_ble33_sense_microphone
Kod Arduino untuk Pengecaman Suara Arduino
Di sini beberapa perubahan telah dilakukan untuk mengawal LED dengan perintah suara.
Kami membuat beberapa perubahan pada gelung void () di mana ia mencetak kebarangkalian perintah. Dalam kod asal, ia 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 mengawal LED kita harus menyimpan semua kebarangkalian perintah dalam tiga pemboleh ubah yang berbeza sehingga kita dapat meletakkan pernyataan bersyarat padanya. Jadi mengikut kod baru jika kebarangkalian perintah ' menyala' lebih dari 0.50 maka ia akan menyalakan LED dan jika kebarangkalian perintah ' lampu mati' lebih dari 0.50 daripada ia akan mematikan LED.
untuk (size_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {noise = result.classification.value; Serial.println ("Kebisingan:"); Serial.println (bunyi); } untuk (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = result.classification.value; Serial.println ("Cahaya Mati:"); Serial.print (lightoff); } lighton = 1- (noise + lightoff); Serial.println ("Cahaya AKTIF:"); Serial.print (lighton); jika (lighton> 0.50) {digitalWrite (dipimpin, TINGGI); } jika (lightoff> 0.50) {digitalWrite (dipimpin, RENDAH); }
Setelah membuat perubahan, muat naik kod ke Arduino anda. Buka monitor bersiri pada 115200 baud.
Ini adalah bagaimana anda dapat membina pengecaman pertuturan menggunakan Arduino dan memberi arahan untuk mengendalikan peranti.
Video kerja lengkap dengan perpustakaan dan kod diberikan di bawah.