Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Komponen dan Perlengkapan

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini
Arduino Nano 33 BLE Sense
× 1

Aplikasi dan Layanan Online

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini
Edge Impulse Studio

Tentang Proyek Ini

Ada kebutuhan besar akan solusi murah dan mudah diterapkan untuk deteksi dini COVID-19 dan flu lainnya. Bersama dengan PBB, Hackster, Edge Impulse dan banyak lainnya kami baru-baru ini meluncurkan UN Covid Detect & Protect Challenge yang bertujuan menciptakan solusi mudah diterapkan untuk pencegahan dan deteksi flu di negara berkembang. Dalam tutorial ini kita menunjukkan cara menggunakan machine learning Edge Impulse pada Arduino Nano BLE Sense untuk mendeteksi kehadiran batuk dalam audio real-time. Kami membuat kumpulan data sampel batuk dan kebisingan latar belakang, dan menerapkan model TinyML yang sangat dioptimalkan, untuk membangun sistem deteksi batuk yang berjalan secara real-time di bawah 20 kB RAM pada Nano BLE Sense. Pendekatan yang sama berlaku untuk banyak aplikasi cocok pola audio embedded lainnya, misalnya perawatan lansia, keamanan dan pemantauan mesin. Proyek dan kumpulan data ini awalnya dimulai oleh Kartik Thakore untuk membantu upaya COVID-19.

Memulai

Tutorial ini memiliki kebutuhan berikut:

Kami akan menggunakan Edge Impulse, platform pengembangan online untuk machine learning di perangkat edge. Buat akun gratis dengan mendaftar di sini. Masuk ke akun Anda, dan berikan nama proyek baru Anda dengan mengklik judul. Kami menyebutnya “Tutorial Batuk Arduino”.

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Mengumpulkan Kumpulan Data

Langkah pertama dalam setiap proyek machine learning adalah mengumpulkan kumpulan data yang mewakili sampel data yang diketahui yang ingin kita cocokkan di perangkat Arduino kami. Untuk memulai kami telah membuat kumpulan data kecil dengan 10 menit audio dalam dua kelas, “batuk” dan “kebisingan”. Kami akan menunjukkan cara mengimpor kumpulan data ini ke proyek Edge Impulse Anda, menambahkan sampel Anda sendiri atau bahkan memulai kumpulan data Anda sendiri dari awal. Kumpulan data ini kecil dan memiliki jumlah sampel batuk dan kebisingan latar belakang yang terbatas. Jadi kumpulan data ini hanya cocok untuk eksperimen, dan model yang dihasilkan dalam tutorial ini hanya dapat membedakan antara kebisingan latar belakang yang tenang dan rentang kecil batuk. Kami mendorong Anda untuk memperluas kumpulan data dengan rentang yang lebih luas dari batuk, kebisingan latar belakang dan kelas lain seperti ucapan manusia untuk meningkatkan kinerja.

Catatan: Memaksa diri untuk batuk sangat sulit pada tali vokal Anda, hati-hati saat mengumpulkan data dan menguji!

Pertama unduh kumpulan data batuk kami dan ekstrak file di PC Anda di lokasi pilihan Anda: https://cdn.edgeimpulse.com/datasets/cough.zip

Anda dapat mengimpor kumpulan data ini ke proyek Edge Impulse Anda menggunakan Edge Impulse CLI Uploader. Instal Edge Impulse CLI sesuai petunjuk Instalasi ini.

Buka terminal atau command prompt, dan navigasikan ke folder tempat Anda mengekstrak file.

Jalankan:

$ edge-impulse-uploader --clean
$ edge-impulse-uploader --category training training/*
$ edge-impulse-uploader --category testing testing/*

Anda akan diminta untuk nama pengguna Edge Impulse, kata sandi, dan proyek tempat Anda ingin menambahkan kumpulan data. Sampel kumpulan data sekarang akan terlihat di halaman Data acquisition. Dengan mengklik sebuah sampel, kita dapat melihat tampilan sampel, dan mendengarkan audio dengan mengklik tombol play di bawah setiap grafik.

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

10 menit sampel data batuk dan kebisingan cukup untuk memulai. Anda dapat secara opsional memperluas kumpulan data dengan sampel batuk dan kebisingan latar belakang Anda sendiri. Kami dapat mengumpulkan sampel data baru secara langsung dari perangkat dari halaman Data acquisition. Sampel audio dalam format WAV juga dapat diunggah menggunakan Edge Impulse CLI Uploader.

Cara termudah untuk memulai adalah mengumpulkan data audio menggunakan ponsel Anda (tutorial lengkap di sini). Pergi ke halaman Devices , dan klik tombol ‘+ Connect a new device’ di kanan atas. Pilih ‘Use your mobile phone’. Ini akan menghasilkan kode QR unik untuk membuka aplikasi web di browser ponsel Anda. Ambil gambar kode QR, dan pilih untuk membuka tautan.

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Aplikasi web akan terhubung dengan proyek Edge Impulse Anda, dan seharusnya terlihat seperti ini:

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Kami sekarang dapat mengumpulkan sampel data audio secara langsung dari ponsel dari halaman Data acquisition Edge Impulse. Di bagian ‘Record new data’, ketik label ‘cough’ atau ‘noise’, pastikan ‘Microphone’ dipilih sebagai Sensor, dan klik ‘Start sampling’. Ponsel Anda sekarang akan mengumpulkan sampel audio, dan menambahkannya ke kumpulan data Anda.

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Pengumpulan data audio secara langsung dari papan Nano BLE Sense juga didukung. Ikuti petunjuk ini untuk menginstal firmware dan daemon Edge Impulse. Setelah perangkat terhubung ke Edge Impulse, Anda dapat mengumpulkan sampel data sama seperti dengan ponsel Anda di atas.

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Membuat Impuls Anda

Selanjutnya kita akan memilih blok pemrosesan sinyal dan machine learning, di halaman Create impulse. Impuls akan mulai kosong, dengan blok data mentah dan fitur output. Biarkan pengaturan default ukuran jendela 1000 ms dan peningkatan jendela 500 ms. Ini berarti data audio kami akan diproses 1 detik pada satu waktu, memulai setiap 0,5 detik. Penggunaan jendela kecil menghemat memori pada perangkat embedded, tetapi berarti kita perlu contoh data batuk yang tidak ada jeda besar di antaranya.

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Klik ‘Add a processing block’ dan pilih blok Audio (MFCC). Selanjutnya klik ‘Add a learning block’ dan pilih blok Neural Network (Keras). Klik ‘Save Impulse’. Blok audio akan mengekstrak spektrogram untuk setiap jendela audio, dan blok jaringan syaraf akan dilatih untuk mengklasifikasi spektrogram sebagai ‘batuk’ atau ‘kebisingan’ berdasarkan kumpulan data pelatihan kami. Impuls yang dihasilkan akan terlihat seperti ini:

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Selanjutnya kita akan menghasilkan fitur dari kumpulan data pelatihan di halaman MFCC. Halaman ini menunjukkan tampilan spektrogram yang diekstrak untuk setiap jendela 1 detik dari setiap sampel kumpulan data. Kami dapat membiarkan parameter pada defaultnya.

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Selanjutnya klik tombol ‘Generate features’, yang kemudian memproses seluruh kumpulan data pelatihan dengan blok pemrosesan ini. Ini membuat kumpulan lengkap fitur yang akan digunakan untuk melatih Jaringan Syaraf kita di langkah selanjutnya. Tekan tombol ‘Generate features’ untuk memulai pemrosesan, ini akan memakan waktu beberapa menit untuk selesai.

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Kami sekarang dapat melanjutkan untuk menyiapkan dan melatih jaringan syaraf kita di halaman NN Classifier. Jaringan syaraf default bekerja baik untuk suara kontinu seperti air yang mengalir. Deteksi batuk lebih rumit, jadi kita akan mengonfigurasi jaringan yang lebih kaya menggunakan konvolusi 2D di seluruh spektrogram setiap jendela. Konvolusi 2D memproses spektrogram audio dengan cara yang mirip dengan klasifikasi gambar. Tekan sudut kanan atas bagian ‘Neural Network settings’, dan pilih ‘Switch to Keras (expert) mode’.

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Ganti definisi ‘Neural network architecture’ dengan kode berikut dan atur pengaturan ‘Minimum confidence rating’ menjadi ‘0.70’. Kemudian lanjutkan untuk mengklik tombol ‘Start training’. Pelatihan akan memakan waktu beberapa detik.

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.constraints import MaxNorm
# model architecture
model = Sequential()
model.add(InputLayer(input_shape=(X_train.shape[1], ), name='x_input'))
model.add(Reshape((int(X_train.shape[1] / 13), 13, 1), input_shape=(X_train.shape[1], )))
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(classes, activation='softmax', name='y_pred', kernel_constraint=MaxNorm(3)))
# this controls the learning rate
opt = Adam(lr=0.005, beta_1=0.9, beta_2=0.999)
# train the neural network
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
model.fit(X_train, Y_train, batch_size=32, epochs=9, validation_data=(X_test, Y_test), verbose=2)

Halaman akan menunjukkan kinerja pelatihan dan kinerja pada perangkat, yang seharusnya terlihat seperti ini tergantung pada kumpulan data Anda:

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Algoritma deteksi batuk Arduino kami sekarang siap dicoba!

Pelatihan dan Pengujian

Halaman Live classification memungkinkan kita untuk menguji algoritma baik dengan data pengujian yang sudah ada yang datang dengan kumpulan data, atau dengan streaming data audio dari ponsel atau perangkat Arduino Anda. Kami dapat memulai dengan tes sederhana dengan memilih salah satu sampel tes, dan menekan ‘Load sample’. Ini akan mengklasifikasi sampel tes dan menunjukkan hasilnya:

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Kami juga dapat menguji algoritma dengan data langsung. Mulai dengan ponsel Anda dengan menyegarkan halaman browser di ponsel yang kita buka sebelumnya. Kemudian pilih perangkat Anda di bagian ‘Classify new data’ dan tekan ‘Start sampling’. Anda juga dapat secara serupa streaming sampel audio dari Nano BLE Sense Anda saat terhubung ke proyek melalui edge-impulse-daemon seperti di langkah pengumpulan data.

Penerapan

Kami dapat dengan mudah menerapkan algoritma deteksi batuk kami ke ponsel. Pergi ke jendela browser di ponsel Anda dan segarkan, lalu tekan tombol ‘Switch to classification mode’. Ini akan secara otomatis membangun proyek menjadi paket WebAssembly dan menjalankannya di ponsel Anda secara terus-menerus (tidak perlu cloud setelah itu, bahkan pergi ke mode pesawat!)

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Selanjutnya kita dapat menerapkan algoritma ke Nano BLE Sense dengan pergi ke halaman Deployment. Pilih ‘Arduino Nano 33 BLE Sense’ di bawah ‘Build firmware’ dan kemudian klik ‘Build’.

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Ini akan membangun firmware lengkap untuk Nano BLE Sense termasuk algoritma terbaru Anda. Ikuti petunjuk di layar untuk mem-flash papan Arduino Anda dengan biner.

Mendeteksi Batuk dengan TinyML pada Arduino Nano untuk Deteksi Flu Dini

Setelah Arduino di-flash, kita dapat membuka port serial ke perangkat saat dihubungkan ke USB dengan baud 115, 200. Setelah port serial terbuka, tekan enter untuk mendapatkan prompt dan kemudian:

> AT+RUNIMPULSE
Inferencing settings:
Interval: 0.06 ms.
Frame size: 16000
Sample length: 1000 ms.
No. of classes: 2
Starting inferencing, press 'b' to break
Recording...
Recording done
Predictions (DSP: 495 ms., Classification: 84 ms., Anomaly: 0 ms.):
cough: 0.01562
noise: 0.98438
Starting inferencing in 2 seconds...
Recording...
Recording done
Predictions (DSP: 495 ms., Classification: 84 ms., Anomaly: 0 ms.):
cough: 0.01562
noise: 0.98438
Starting inferencing in 2 seconds...
Recording...
Recording done
Predictions (DSP: 495 ms., Classification: 84 ms., Anomaly: 0 ms.):
cough: 0.86719
noise: 0.13281
Starting inferencing in 2 seconds...
Recording...
Recording done
Predictions (DSP: 495 ms., Classification: 84 ms., Anomaly: 0 ms.):
cough: 0.01562
noise: 0.98438

Pekerjaan Masa Depan

Langit adalah batas dengan TinyML, sensor dan Edge Impulse pada Arduino, berikut adalah beberapa ide untuk pekerjaan lebih lanjut:

Proses manufaktur

  1. Sensor CO2 K30: Pemantauan Kualitas Udara Indoor dalam Waktu Nyata
  2. Memfasilitasi Komunikasi Tuna Netra Tuna Rungu Menggunakan 1Sheeld dan Arduino
  3. Bangun Tabung Pintar: Kendalikan Penerima Koin dengan Arduino Nano
  4. Kontrol LED melalui Bluetooth dengan Arduino – Panduan DIY Sederhana
  5. Mengintegrasikan Sensor Sidik Jari Kapasitif DFRobot dengan Arduino atau ESP8266
  6. Proyek HMI Nextion Interaktif Menggunakan Arduino Mega dan Sensor
  7. Kit Lengan Robot 6-DoF Berbasis Arduino dengan Pengendali Nunchuk
  8. Menilai Kesehatan Tanaman dengan TinyML: Panduan Praktis
  9. Sistem Pemantauan Kebakaran Hutan Real-Time dengan Peringatan SMS
  10. Pengukuran Radiasi Matahari Akurat dengan Arduino UNO dan Ethernet Shield