- Súčasti sú povinné
- Schéma zapojenia
- Vytvorenie množiny údajov pre prístroj na detekciu kašľa
- Školenie modelu a vyladenie kódu
COVID19 je skutočne historická pandémia, ktorá veľmi zle ovplyvňuje celý svet a ľudia stavajú veľa nových zariadení, aby s ňou bojovali. Postavili sme tiež automatický dezinfekčný stroj a termálnu pištoľ na bezkontaktné zisťovanie teploty. Dnes postavíme ďalšie zariadenie, ktoré bude pomáhať v boji s koronavírusmi. Jedná sa o systém detekcie kašľa, ktorý dokáže rozlíšiť medzi zvukom a zvukom kašľa a môže pomôcť nájsť podozrivého z Corony. Na to použije techniky strojového učenia.
V tomto tutoriáli sa chystáme vybudovať systém detekcie kašľa pomocou Arduino 33 BLE Sense a Edge Impulse Studio. Môže rozlišovať medzi normálnym šumom v pozadí a kašľom v zvuku v reálnom čase. Aplikáciu Edge Impulse Studio sme použili na školenie súboru údajov o vzorkách kašľa a šumu na pozadí a na vytvorenie vysoko optimalizovaného modelu TInyML, ktorý dokáže detekovať zvuk Cough v reálnom čase.
Súčasti sú povinné
Hardware
- Arduino 33 BLE Sense
- LED
- Prepojovacie drôty
Softvér
- Štúdio Edge Impulse
- Arduino IDE
Prebrali sme podrobný návod na tému Arduino 33 BLE Sense.
Schéma zapojenia
Schéma zapojenia pre detekciu kašľa pomocou Arduino 33 BLE Sense je uvedená nižšie. Fritzujúca časť pre Arduino 33 BLE nebola k dispozícii, takže som použil Arduino Nano, pretože obe majú rovnaký pin-out.
Kladný vodič LED je pripojený k digitálnemu kolíku 4 snímača Arduino 33 BLE a záporný vodič je pripojený k kolíku GND Arduino.
Vytvorenie množiny údajov pre prístroj na detekciu kašľa
Ako sme už spomenuli, na nácvik nášho modelu detekcie kašľa používame program Edge Impulse Studio. Na to musíme zhromaždiť množinu údajov, ktorá obsahuje vzorky údajov, ktoré by sme chceli na našom Arduine rozpoznať. Pretože cieľom je zistiť kašeľ, budete musieť zhromaždiť niektoré vzorky tohto a niektoré ďalšie vzorky na zistenie hluku, aby bolo možné rozlišovať medzi kašľom a inými šummi.
Vytvoríme dataset s dvoma triedami „kašeľ“ a „šum“. Ak chcete vytvoriť množinu údajov, vytvorte účet Edge Impulse, overte svoj účet a potom začnite nový projekt. Vzorky môžete načítať pomocou mobilu, dosky Arduino alebo môžete importovať množinu údajov do svojho účtu edge impuls. Najjednoduchší spôsob, ako načítať vzorky do svojho účtu, je pomocou mobilného telefónu. Na to musíte svoj mobil prepojiť s Edge Impulse.
Ak chcete pripojiť svoj mobilný telefón, kliknite na „ Zariadenia “ a potom na „ Pripojiť nové zariadenie“ .
Teraz v ďalšom okne kliknite na „ Použite mobilný telefón“ a zobrazí sa QR kód. Naskenujte QR kód pomocou svojho mobilného telefónu pomocou aplikácie Google Lens alebo inej aplikácie na skenovanie QR kódov.
Takto sa váš telefón prepojí so štúdiom Edge Impulse.
Keď je váš telefón pripojený k Edge Impulse Studio, môžete teraz načítať svoje vzorky. Na načítanie vzoriek kliknite na „ Zber údajov“ . Teraz na stránke Zber údajov zadajte názov štítku, vyberte mikrofón ako snímač a zadajte dĺžku vzorky. Kliknutím na „ Spustiť vzorkovanie“ spustíte vzorkovanie 40-sekundovej vzorky. Namiesto toho, aby ste sa nútili kašľať, môžete použiť online vzorky kašľa rôznej dĺžky. Zaznamenajte si spolu 10 až 12 vzoriek kašľa rôznej dĺžky.
Po nahraní vzoriek kašľa teraz nastavte štítok na „šum“ a zhromaždite ďalších 10 až 12 vzoriek šumu.
Tieto vzorky sú určené pre modul Training, v ďalších krokoch zhromaždíme údaje o teste. Údaje o teste by mali predstavovať najmenej 30% údajov o tréningu, preto zozbierajte 3 vzorky „šumu“ a 4 až 5 vzoriek „kašľa“.
Namiesto zhromažďovania údajov môžete importovať našu množinu údajov do svojho účtu Edge Impulse pomocou nástroja Edge Impulse CLI Uploader.
Ak chcete nainštalovať aplikáciu CLI Uploader, najskôr si stiahnite a nainštalujte súbor Node.js do svojho notebooku. Potom otvorte príkazový riadok a zadajte nasledujúci príkaz:
npm install -g edge-impuls-cli
Teraz si stiahnite dataset (Odkaz na dataset) a extrahujte súbor z priečinka projektu. Otvorte príkazový riadok, prejdite do umiestnenia množiny údajov a spustite nasledujúce príkazy:
edge-impulse-uploader --clean edge-impulse-uploader --kategória školenia / *. json edge-impulz-uploader --kategória školenia / *. cbor edge-impulz-uploader --kategória testovacieho testovania / *. json edge-impulse-uploader - testovanie kategórie testovania / *. cbor
Školenie modelu a vyladenie kódu
Keď je množina údajov pripravená, teraz vytvoríme impulz pre údaje. Prejdite na to na stránku „ Vytvoriť impulz “.
Teraz na stránke „ Vytvoriť impulz“ kliknite na „ Pridať blok spracovania“ . V ďalšom okne vyberte blok Audio (MFCC). Potom kliknite na „ Pridať blok učenia“ a vyberte blok Neural Network (Keras). Potom kliknite na „ Uložiť impulz“ .
V ďalšom kroku prejdite na stránku MFCC a potom kliknite na položku „ Generovať funkcie“ . Bude generovať bloky MFCC pre všetky naše zvukové okná.
Potom choďte na stránku „ NN Classifier“, kliknite na tri bodky v pravom hornom rohu „ Nastavenia neurónovej siete“ a vyberte „ Prepnúť do režimu Keras (expert)“ .
Nahraďte originál nasledujúcim kódom a zmeňte „ Minimálne hodnotenie spoľahlivosti“ na „0,70“. Potom kliknite na tlačidlo „ Začať trénovať“ . Začne trénovať váš model.
import tensorflow ako tf z tensorflow.keras.models import Sekvenčné z tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D from tensorflow.keras.optimizers import Adam from tensorflow.keras.constraints importovať MaxNorm # model architektúra model = 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 (pool_size = 2,padding = 'same')) model.add (Flatten ()) model.add (Dense (classes, activation = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # toto riadi rýchlosť učenia opt = Adam (lr = 0,005, beta_1 = 0,9, beta_2 = 0,999) # trénujte model neurónovej siete. Kompilácia (strata = 'categorical_crossentropy', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, epoch = 9, validation_data = (X_test, Y_test), verbose = 2)podrobné = 2)podrobné = 2)
Po precvičení modelu sa prejaví tréningový výkon. Pre mňa bola presnosť 96,5% a strata 0,10, čo je dobré pokračovať.
Keď je náš model detekcie kašľa pripravený, nasadíme ho ako knižnicu Arduino. Pred stiahnutím modelu ako knižnice môžete výkon otestovať na stránke „ Živá klasifikácia “.
Prejdite na stránku „ Nasadenie “ a vyberte možnosť „ Knižnica Arduino“ . Teraz posuňte zobrazenie nadol a kliknutím na tlačidlo „Vytvoriť“ spustite proces. Takto sa pre váš projekt vytvorí knižnica Arduino.
Teraz pridajte knižnicu do svojho Arduino IDE. Za týmto účelom otvorte Arduino IDE a potom kliknite na Skica> Zahrnúť knižnicu> Add.ZIP knižnica.
Potom načítajte príklad tak, že prejdete do časti Súbor> Príklady> Názov vášho projektu - Edge Impulse> nano_ble33_sense_microphone.
Urobíme niekoľko zmien v kóde, aby sme mohli vydať výstražný zvuk, keď Arduino zistí kašeľ. Preto je bzučiak prepojený s Arduinom a vždy, keď zistí kašeľ, LED trikrát zabliká.
Zmeny sa vykonávajú vo funkciách void loop (), kde sa tlačia hodnoty hluku a kašľa. V pôvodnom kóde tlačí súčasne štítky aj ich hodnoty.
pre (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Budeme ukladať hodnoty šumu aj kašľa do rôznych premenných a porovnávať hodnoty šumu. Ak hodnota šumu klesne pod 0,50, znamená to, že hodnota kašľa je vyššia ako 0,50 a vydá sa zvuk. Nahraďte pôvodný kód for loop () týmto:
pre (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); float Data = result.classification.value; if (Dáta <0,50) {Serial.print ("Zistený kašeľ"); alarm (); }}
Po vykonaní zmien nahrajte kód do svojho Arduina. Sériový monitor otvorte pri 115 200 baudoch.
Takto je možné zostaviť stroj na detekciu kašľa, nie je to veľmi efektívna metóda na vyhľadanie podozrivého z testu COVID19, ale v niektorých preplnených oblastiach to môže fungovať dobre.
Kompletné pracovné video s knižnicou a kódom je uvedené nižšie: