- Komponen Diperlukan
- Diagram Sirkuit
- Membuat Set Data untuk Mesin Deteksi Batuk
- Melatih Model dan Mengubah Kode
COVID19 benar-benar merupakan pandemi bersejarah yang mempengaruhi seluruh dunia dengan sangat buruk dan orang-orang membangun banyak perangkat baru untuk melawannya. Kami juga telah membangun mesin sanitasi otomatis dan Thermal Gun untuk penyaringan suhu tanpa kontak. Hari ini kami akan membangun satu perangkat lagi untuk membantu memerangi virus Corona. Ini adalah sistem deteksi batuk, yang dapat membedakan antara suara bising dan suara batuk dan dapat membantu menemukan tersangka Corona. Ini akan menggunakan teknik pembelajaran mesin untuk itu.
Dalam tutorial ini, kita akan membangun sistem Deteksi Batuk menggunakan Arduino 33 BLE Sense dan Edge Impulse Studio. Itu dapat membedakan antara kebisingan latar belakang normal dan batuk dalam audio waktu nyata. Kami menggunakan Edge Impulse Studio untuk melatih kumpulan data sampel batuk dan kebisingan latar belakang dan membangun model TInyML yang sangat dioptimalkan, yang dapat mendeteksi suara Batuk secara real-time.
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 Deteksi Batuk Menggunakan Arduino 33 BLE Sense diberikan di bawah ini. Fritzing part untuk Arduino 33 BLE tidak tersedia, jadi saya menggunakan Arduino Nano karena keduanya memiliki pin-out yang sama.
Kabel LED positif dihubungkan ke pin 4 digital dari sensor Arduino 33 BLE dan kabel negatif dihubungkan ke pin GND dari Arduino.
Membuat Set Data untuk Mesin Deteksi Batuk
Seperti yang disebutkan sebelumnya, kami menggunakan Edge Impulse Studio untuk melatih model deteksi batuk kami. Untuk itu, kami harus mengumpulkan dataset yang memiliki sampel data yang ingin kami kenali di Arduino kami. Karena tujuannya adalah untuk mendeteksi batuk, Anda perlu mengumpulkan beberapa sampel dan beberapa sampel lain untuk mengetahui kebisingan, sehingga dapat membedakan antara Batuk dan Suara lainnya.
Kami akan membuat dataset dengan dua kelas "batuk" dan "kebisingan". 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, Anda harus menghubungkan ponsel Anda dengan Edge Impulse.
Untuk menghubungkan ponsel Anda, 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 menggunakan Google Lens atau aplikasi pemindai kode QR lainnya.
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' , untuk mulai mengambil sampel sampel 40 Detik. Alih-alih memaksakan diri untuk batuk, Anda dapat menggunakan sampel batuk daring dengan panjang berbeda. Catat total 10 sampai 12 sampel batuk dengan panjang yang berbeda.
Setelah mengunggah sampel batuk, sekarang atur label ke 'noise' dan kumpulkan 10 hingga 12 sampel noise lagi.
Sampel-sampel ini untuk Pelatihan modul, pada langkah selanjutnya, kami akan mengumpulkan Data Tes. Data pengujian harus minimal 30% dari data pelatihan, jadi kumpulkan 3 sampel 'kebisingan' dan 4 hingga 5 sampel 'batuk'.
Alih-alih mengumpulkan data Anda, Anda dapat mengimpor kumpulan data kami ke akun Edge Impulse Anda menggunakan Pengunggah CLI Edge Impulse.
Untuk menginstal CLI Uploader, pertama, unduh dan instal Node.js di laptop Anda. Setelah itu buka command prompt dan masukkan perintah di bawah ini:
npm install -g edge-impulse-cli
Sekarang unduh dataset (Dataset Link) dan ekstrak file di folder proyek Anda. Buka command prompt dan arahkan ke lokasi dataset dan jalankan perintah di bawah ini:
edge-impulse-uploader --clean edge-impulse-uploader --category training training / *. json edge-impulse-uploader --category training training / *. cbor edge-impulse-uploader --category testing testing / *. json edge-impulse-uploader --kategori pengujian pengujian / *. cbor
Melatih Model dan Mengubah Kode
Saat dataset sudah siap, sekarang kita akan membuat impuls untuk data. Untuk itu, buka halaman ' Buat impuls '.
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 melatih model, maka akan ditampilkan kinerja pelatihan. Bagi saya, akurasinya 96,5% dan kerugian 0,10 yang bagus untuk dilanjutkan.
Sekarang model deteksi batuk kami siap, kami akan menerapkan model ini sebagai pustaka Arduino. Sebelum mengunduh model sebagai perpustakaan, Anda dapat menguji kinerja dengan membuka halaman ' Klasifikasi Langsung '.
Pergi ke 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.
Kami akan membuat beberapa perubahan pada kode sehingga kami dapat membuat suara peringatan ketika Arduino mendeteksi batuk. Untuk itu, sebuah bel dihubungkan dengan Arduino dan setiap kali mendeteksi batuk, LED akan berkedip tiga kali.
Perubahan tersebut dibuat dalam fungsi void loop () di mana ia mencetak nilai kebisingan dan batuk. Dalam kode asli, itu 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 nilai kebisingan dan batuk di variabel yang berbeda dan membandingkan nilai kebisingan. Jika nilai kebisingan dibawah 0,50 berarti nilai batuk lebih dari 0,50 dan akan berbunyi. Ganti kode for loop () yang asli dengan ini:
untuk (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); float Data = result.classification.value; if (Data <0,50) {Serial.print ("Batuk Terdeteksi"); alarm(); }}
Setelah melakukan perubahan, unggah kode tersebut ke Arduino Anda. Buka monitor serial di 115200 baud.
Jadi beginilah cara membuat mesin pendeteksi batuk, ini bukan metode yang sangat efektif untuk menemukan tersangka COVID19, tetapi dapat bekerja dengan baik di area yang ramai.
Video kerja lengkap dengan perpustakaan dan kode diberikan di bawah ini: