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

Deteksi Batuk dengan TinyML di Arduino

Komponen dan persediaan

Arduino Nano 33 BLE Sense
× 1

Aplikasi dan layanan online

Edge Impulse Studio

Tentang proyek ini

Ada kebutuhan besar akan solusi yang murah dan mudah diterapkan untuk COVID-19 dan deteksi dini terkait flu lainnya. Bersama dengan PBB, Hackster, Edge Impulse, dan banyak lainnya, kami baru-baru ini meluncurkan UN Covid Detect &Protect Challenge yang bertujuan untuk menciptakan solusi yang mudah diterapkan untuk pencegahan dan deteksi flu di negara berkembang. Dalam tutorial ini kami menunjukkan cara menggunakan pembelajaran mesin Edge Impulse pada Arduino Nano BLE Sense untuk mendeteksi adanya batuk secara real-time audio. Kami membangun 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 ini berlaku untuk banyak aplikasi pencocokan pola audio tersemat lainnya, misalnya perawatan lansia, keselamatan, dan pemantauan mesin. Proyek dan kumpulan data ini awalnya dimulai oleh Kartik Thakore untuk membantu upaya COVID-19.

Memulai

Tutorial ini memiliki persyaratan sebagai berikut:

  • Pemahaman dasar tentang pengembangan perangkat lunak dan Arduino
  • Arduino IDE atau CLI terinstal
  • Ponsel Android atau iOS
  • Arduino Nano BLE Sense atau papan Cortex-M4+ yang setara dengan mikrofon (opsional)

Kami akan menggunakan Edge Impulse, platform pengembangan online untuk pembelajaran mesin di perangkat edge. Buat akun gratis dengan mendaftar di sini. Masuk ke akun Anda, dan beri nama proyek baru Anda dengan mengklik judulnya. Kami menyebutnya "Tutorial Batuk Arduino".

Mengumpulkan kumpulan data

Langkah pertama dalam proyek pembelajaran mesin apa pun adalah mengumpulkan kumpulan data yang mewakili sampel data yang diketahui yang ingin kami cocokkan di perangkat Arduino kami. Untuk memulai, kami telah membuat kumpulan data kecil dengan audio 10 menit dalam dua kelas, "batuk" dan "kebisingan". Kami akan menunjukkan cara mengimpor dataset ini ke proyek Edge Impulse Anda, menambahkan sampel Anda sendiri atau bahkan memulai dataset Anda sendiri dari awal. Kumpulan data ini kecil dan memiliki jumlah sampel batuk dan kebisingan latar belakang yang terbatas. Dengan demikian dataset hanya sesuai untuk eksperimen, dan model yang dihasilkan dalam tutorial ini hanya mampu membedakan antara kebisingan latar belakang yang tenang dan sejumlah kecil batuk. Kami mendorong Anda untuk memperluas kumpulan data dengan jangkauan batuk yang lebih luas, kebisingan latar belakang, dan kelas lain seperti ucapan manusia untuk meningkatkan kinerja.

Catatan: Memaksa diri Anda untuk batuk sangat keras pada pita suara Anda, berhati-hatilah saat mengumpulkan data dan pengujian!

Pertama-tama unduh dataset 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 Pengunggah Edge Impulse CLI. Instal Edge Impulse CLI dengan mengikuti petunjuk Instalasi ini.

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

Jalankan:

$ edge-impulse-uploader --clean
$ edge-impulse-uploader --pelatihan pelatihan kategori/*
$ edge-impulse-uploader --pengujian pengujian kategori/*

Anda akan diminta memasukkan nama pengguna Edge Impulse, kata sandi, dan proyek tempat Anda ingin menambahkan kumpulan data. Sampel kumpulan data sekarang akan terlihat di Akuisisi data halaman. Dengan mengklik sampel, kita dapat melihat seperti apa sampel tersebut, dan mendengarkan audio dengan mengklik tombol putar di bawah setiap grafik.

Sampel data batuk dan kebisingan 10 menit sudah 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 langsung dari perangkat dari Akuisisi data halaman. Sampel audio dalam format WAV juga dapat diunggah menggunakan Edge Impulse CLI Uploader.

Cara termudah untuk memulai adalah dengan mengumpulkan data audio menggunakan ponsel Anda (tutorial lengkapnya di sini). Buka Perangkat halaman, dan klik tombol '+ Hubungkan perangkat baru' di kanan atas. Pilih 'Gunakan ponsel Anda'. Ini akan menghasilkan kode QR unik untuk membuka aplikasi web di browser ponsel Anda. Ambil gambar kode QR, dan pilih untuk membuka tautan.

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

Kami sekarang dapat mengumpulkan sampel data audio langsung dari ponsel dari Akuisisi data halaman Edge Impulse. Di bagian 'Rekam data baru', ketik label 'batuk' atau 'suara', pastikan 'Mikrofon' dipilih sebagai Sensor, dan klik 'Mulai pengambilan sampel'. Ponsel Anda sekarang akan mengumpulkan sampel audio, dan menambahkannya ke set data Anda.

Pengumpulan data audio 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 seperti dengan ponsel Anda di atas.

Menciptakan dorongan hati Anda

Selanjutnya kita akan memilih blok pemrosesan sinyal dan pembelajaran mesin, pada Buat impuls halaman. Impuls akan mulai kosong, dengan data mentah dan blok fitur Output. Biarkan pengaturan default ukuran Jendela 1000 ms dan peningkatan Jendela 500 ms. Ini berarti data audio kami akan diproses 1 s pada satu waktu, mulai setiap 0,5 s. Menggunakan jendela kecil menghemat memori pada perangkat yang disematkan, tetapi berarti kita memerlukan data sampel batuk tanpa jeda besar di antara batuk.

Klik 'Tambahkan blok pemrosesan' dan pilih Audio (MFCC) memblokir. Selanjutnya klik 'Tambahkan blok pembelajaran' dan pilih Jaringan Saraf (Keras) memblokir. Klik 'Simpan Impuls'. Blok audio akan mengekstrak spektogram untuk setiap jendela audio, dan blok jaringan saraf akan dilatih untuk mengklasifikasikan spektogram sebagai 'batuk' atau 'suara' berdasarkan dataset pelatihan kami. Impuls Anda yang dihasilkan akan terlihat seperti ini:

Selanjutnya kita akan menghasilkan fitur dari dataset pelatihan di MFCC halaman. Halaman ini menunjukkan seperti apa spektogram yang diekstraksi untuk setiap jendela 1 detik dari sampel kumpulan data mana pun. Kita dapat membiarkan parameter ke default.

Selanjutnya klik tombol ‘Hasilkan fitur’, yang kemudian memproses seluruh dataset pelatihan dengan blok pemrosesan ini. Ini menciptakan serangkaian fitur lengkap yang akan digunakan untuk melatih Jaringan Saraf Tiruan kita di langkah berikutnya. Tekan tombol 'Buat fitur' untuk memulai pemrosesan, ini akan memakan waktu beberapa menit untuk menyelesaikannya.

Sekarang kita dapat melanjutkan untuk menyiapkan dan melatih jaringan saraf kita di NN Classifier halaman. Jaringan saraf default bekerja dengan baik untuk suara terus menerus seperti air mengalir. Deteksi batuk lebih rumit, jadi kami akan mengonfigurasi jaringan yang lebih kaya menggunakan konvolusi 2D di seluruh spektogram setiap jendela. Konvolusi 2D memproses spektogram audio dengan cara yang mirip dengan klasifikasi gambar. Tekan pojok kanan atas bagian 'Pengaturan Jaringan Saraf', dan pilih 'Beralih ke mode Keras (ahli)'.

Ganti definisi 'Arsitektur jaringan saraf' dengan kode berikut dan atur pengaturan 'Peringkat kepercayaan minimum' ke '0,70'. Kemudian lanjutkan dengan mengklik tombol 'Mulai pelatihan'. Pelatihan akan memakan waktu beberapa detik.

import tensorflow sebagai tf
dari tensorflow.keras.models impor Berurutan
dari tensorflow.keras.layers impor Padat, InputLayer, Dropout, Flatten, Reshape, 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[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='sama', kernel_constraint=MaxNorm(3)))
model.add(AveragePooling2D(pool_size=2, padding='sama'))
model.add(Conv2D(5, kernel_size=5, activation='relu', padding='sama', kernel_constraint=MaxNorm(3 )))
model.add(AveragePooling2D(pool_size=2, padding='sama'))
model.add(Flatten())
model.add(Dense(classes, activation='softmax', nama='y_pred', kernel_co nstraint=MaxNorm(3)))
# ini mengontrol kecepatan pembelajaran
opt =Adam(lr=0.005, beta_1=0.9, beta_2=0.999)
# melatih jaringan saraf
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
model.fit(X_train, Y_train, batch_size=32, epochs=9, validasi_data=(X_test, Y_test) , verbose=2)

Halaman akan menampilkan performa pelatihan dan performa di perangkat, yang seharusnya seperti ini bergantung pada kumpulan data Anda:

Algoritme pendeteksi batuk Arduino kami sekarang siap untuk dicoba!

Pelatihan dan pengujian

Klasifikasi langsung Halaman memungkinkan kami untuk menguji algoritme baik dengan data pengujian yang ada yang disertakan dengan kumpulan data, atau dengan mengalirkan data audio dari ponsel atau perangkat Arduino Anda. Kita bisa mulai dengan tes sederhana dengan memilih salah satu sampel uji, dan menekan 'Muat sampel'. Ini akan mengklasifikasikan sampel uji dan menampilkan hasilnya:

Kami juga dapat menguji algoritme dengan data langsung. Mulailah dengan ponsel Anda dengan menyegarkan halaman browser di ponsel Anda yang kami buka sebelumnya. Kemudian pilih perangkat Anda di bagian 'Klasifikasikan data baru' dan tekan 'Mulai pengambilan sampel'. Anda juga dapat melakukan streaming sampel audio dari Nano BLE Sense saat terhubung ke proyek melalui daemon edge-impulse seperti pada langkah pengumpulan data.

Penerapan

Kami dapat dengan mudah menyebarkan algoritme deteksi batuk kami ke ponsel. Buka jendela browser di ponsel Anda dan segarkan, lalu tekan tombol 'Beralih ke mode klasifikasi'. Ini akan secara otomatis membuat proyek menjadi paket WebAssembly dan menjalankannya di ponsel Anda terus menerus (tidak perlu cloud setelah itu, bahkan masuk ke mode pesawat!)

Selanjutnya kita dapat menerapkan algoritme ke Nano BLE Sense dengan membuka Deployment halaman. Pilih 'Arduino Nano 33 BLE Sense' di bawah 'Build firmware' lalu klik 'Build'.

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.

Setelah Arduino di-flash, kita dapat membuka port serial ke perangkat saat dicolokkan ke USB pada 115.200 baud. Setelah port serial terbuka, tekan enter untuk mendapatkan prompt dan kemudian:

> AT+RUNIMPULSE
Setelan inferensi:
Interval:0,06 md.
Ukuran bingkai:16000
Panjang sampel:1000 md.
No. kelas:2
Memulai inferensi, tekan 'b' untuk memecahkan
Perekaman...
Perekaman selesai
Prediksi (DSP:495 md, Klasifikasi:84 md, Anomali :0 ms.):
batuk:0,01562
kebisingan:0,98438
Mulai menyimpulkan dalam 2 detik...
Merekam...
Perekaman selesai
Prediksi (DSP:495 md, Klasifikasi:84 md, Anomali:0 md):
batuk:0,01562
noise:0,98438
Memulai inferensi dalam 2 detik...
Perekaman...
Perekaman selesai
Prediksi (DSP:495 md, Klasifikasi:84 md, Anomali:0 md):
batuk:0,86719
kebisingan:0,13281
Memulai inferensi dalam 2 detik...
Perekaman...
Perekaman selesai
Prediksi (DSP:495 md, Klasifikasi:84 md, Anomali:0 md) :
batuk:0,01562
suara:0,98438

Pekerjaan di masa depan

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

  • Perpanjang dataset default dengan batuk dan suara latar Anda sendiri, ingatlah untuk melatih ulang secara berkala dan mengujinya. Anda dapat menyiapkan pengujian unit di bawah halaman Pengujian untuk memastikan bahwa model masih berfungsi saat diperpanjang.
  • Tambahkan kelas dan data baru untuk suara manusia yang tidak batuk, seperti ucapan latar belakang, menguap, dll.
  • Mulai dengan kumpulan data baru, kumpulkan sampel audio untuk mendeteksi sesuatu yang baru. Petunjuk:Anda hanya dapat mengunggah data kelas kebisingan dari kumpulan data ini untuk memulai!
  • Dari petunjuk ini, sebarkan ke Perpustakaan Arduino sebagai bagian dari Sketsa Arduino untuk menunjukkan deteksi batuk menggunakan LED atau tampilan
  • Manfaatkan sensor lain seperti akselerometer 3-sumbu Nano BLE Sense dengan mengikuti tutorial ini.

Proses manufaktur

  1. Pemantauan CO2 dengan Sensor K30
  2. Komunikasi Tunarungu dengan 1Sheeld/Arduino
  3. Kontrol Penerima Koin dengan Arduino
  4. Arduino dengan Bluetooth untuk Mengontrol LED!
  5. Sensor Sidik Jari Kapasitif dengan Arduino atau ESP8266
  6. Bermain Dengan Tampilan Berikutnya
  7. Lengan Robot Terkendali Nunchuk (dengan Arduino)
  8. Menentukan Kesehatan Tanaman dengan TinyML
  9. Sistem Pemantauan &Deteksi Kebakaran Hutan (dengan Peringatan SMS)
  10. Mengukur Radiasi Matahari dengan Arduino