- Komponen Diperlukan
- Rajah Litar
- Membuat Dataset untuk Mesin Pengesanan Batuk
- Melatih Model dan Mengambil Kod
COVID19 benar-benar merupakan wabak bersejarah yang mempengaruhi seluruh dunia dengan teruk dan orang ramai membina banyak peranti baru untuk melawannya. Kami juga telah membina mesin pembersihan automatik dan Thermal Gun untuk pemeriksaan suhu tanpa sentuh. Hari ini kita akan membina satu lagi peranti untuk membantu memerangi Coronavirus. Ini adalah sistem pengesanan batuk, yang dapat membezakan antara bunyi dan bunyi batuk dan dapat membantu mencari suspek Corona. Ia akan menggunakan teknik pembelajaran mesin untuk itu.
Dalam tutorial ini, kita akan membina sistem Pengesanan Batuk menggunakan Arduino 33 BLE Sense dan Edge Impulse Studio. Ia dapat membezakan antara bunyi latar belakang biasa dan batuk dalam audio masa nyata. Kami menggunakan Edge Impulse Studio untuk melatih kumpulan data contoh batuk dan kebisingan latar belakang dan membina model TInyML yang sangat dioptimumkan, yang dapat mengesan bunyi Batuk dalam masa nyata.
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 Pengesanan Batuk Menggunakan Arduino 33 BLE Sense diberikan di bawah. Bahagian fritzing untuk Arduino 33 BLE tidak tersedia, jadi saya menggunakan Arduino Nano kerana kedua-duanya mempunyai pin-out yang sama.
Pimpin positif LED disambungkan ke pin digital 4 Arduino 33 BLE sense dan Negative lead disambungkan ke pin GND Arduino.
Membuat Dataset untuk Mesin Pengesanan Batuk
Seperti disebutkan sebelumnya, kami menggunakan Edge Impulse Studio untuk melatih model pengesanan batuk kami. Untuk itu, kita harus mengumpulkan set data yang mempunyai sampel data yang ingin kita kenali di Arduino kami. Oleh kerana tujuannya adalah untuk mengesan batuk, anda perlu mengumpulkan beberapa sampel itu dan beberapa sampel lain untuk kebisingan, sehingga dapat membezakan antara Batuk dan Bunyi yang lain.
Kami akan membuat set data dengan dua kelas "batuk" dan "kebisingan". 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, anda harus menyambungkan telefon bimbit anda dengan Edge Impulse.
Untuk menyambungkan telefon bimbit anda, klik pada ' 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 menggunakan Google Lens atau aplikasi pengimbas kod QR yang lain.
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 Pemerolehan data, masukkan nama label, pilih mikrofon sebagai sensor, dan masukkan panjang sampel. Klik pada ' Start sampling' , untuk memulakan pengambilan sampel 40 Sec. Daripada memaksa diri untuk batuk, anda boleh menggunakan sampel batuk dalam talian dengan panjang yang berbeza. Catat sejumlah 10 hingga 12 sampel batuk dengan panjang yang berbeza.
Setelah memuat naik sampel batuk, sekarang tetapkan label ke 'noise' dan kumpulkan 10 hingga 12 sampel noise lagi.
Sampel ini adalah untuk Melatih modul, pada langkah seterusnya, kami akan mengumpulkan Data Ujian. Data ujian mestilah sekurang-kurangnya 30% dari data latihan, jadi kumpulkan 3 sampel 'noise' dan 4 hingga 5 sampel 'batuk'.
Daripada mengumpulkan data anda, anda boleh mengimport set data kami ke akaun Edge Impulse anda menggunakan Edge Impulse CLI Uploader.
Untuk memasang CLI Uploader, pertama, muat turun dan pasang Node.js pada komputer riba anda. Selepas itu buka command prompt dan masukkan arahan di bawah:
npm pasang -g edge-impulse-cli
Sekarang muat turun dataset (Dataset Link) dan ekstrak fail di folder projek anda. Buka command prompt dan arahkan ke lokasi set data dan jalankan arahan berikut:
edge-impulse-uploader --clean edge-impulse-uploader - latihan latihan kategori / *. json edge-impulse-uploader - latihan latihan kategori / *. cbor edge-impulse-uploader - pengujian ujian kategori / *. json edge-impulse-uploader - ujian ujian kategori / *. cbor
Melatih Model dan Mengambil Kod
Oleh kerana set data sudah siap, sekarang kita akan membuat dorongan untuk data. Untuk itu pergi ke halaman ' Buat impuls '.
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, ia akan menunjukkan prestasi latihan. Bagi saya, ketepatannya adalah 96.5% dan kerugian adalah 0.10 yang baik untuk diteruskan.
Sekarang kerana model pengesanan batuk 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 '.
Pergi ke halaman ' Deployment ' dan pilih ' Arduino Library' . Sekarang tatal ke bawah dan klik pada '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.
Kami akan membuat beberapa perubahan dalam kod sehingga kami dapat mengeluarkan suara amaran ketika Arduino mengesan batuk. Untuk itu, buzzer dihubungkan dengan Arduino dan setiap kali mengesan batuk, LED akan berkelip tiga kali.
Perubahan dilakukan dalam fungsi loop kosong () di mana ia mencetak nilai kebisingan dan batuk. Dalam kod asal, ia mencetak 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); }
Kami akan menyimpan kedua-dua nilai kebisingan dan batuk dalam pemboleh ubah yang berbeza dan membandingkan nilai kebisingan. Sekiranya nilai kebisingan berada di bawah 0.50 itu bermakna nilai batuk lebih dari 0.50 dan itu akan mengeluarkan bunyi. Gantikan kod asal untuk gelung () dengan ini:
untuk (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); Data terapung = hasil.klasifikasi.value; jika (Data <0.50) {Serial.print ("Batuk Dikesan"); penggera (); }}
Setelah membuat perubahan, muat naik kod ke Arduino anda. Buka monitor bersiri pada 115200 baud.
Jadi ini adalah bagaimana mesin pengesan batuk dapat dibina, ini bukan kaedah yang sangat berkesan untuk mencari mana-mana suspek COVID19 tetapi boleh berfungsi dengan baik di beberapa kawasan yang sesak.
Video kerja lengkap dengan perpustakaan dan kod diberikan di bawah: