- Požadované komponenty
- Kruhový diagram
- Vytvoření datové sady pro stroj na detekci kašle
- Školení modelu a vylepšení kódu
COVID19 je opravdu historická pandemie, která velmi špatně zasahuje celý svět a lidé staví spoustu nových zařízení, aby s ní bojovali. Postavili jsme také automatický dezinfekční stroj a termální pistoli pro bezkontaktní teplotní screening. Dnes postavíme ještě jedno zařízení, které nám pomůže v boji s koronaviry. Jedná se o systém detekce kašle, který dokáže rozlišit mezi hlukem a zvukem kašle a může pomoci najít podezřelého z Corony. K tomu použije techniky strojového učení.
V tomto tutoriálu budeme stavět systém detekce kašle pomocí Arduino 33 BLE Sense a Edge Impulse Studio. Dokáže rozlišit mezi normálním hlukem pozadí a kašláním ve zvuku v reálném čase. Edge Impulse Studio jsme použili k trénování datové sady vzorků kašlání a šumu na pozadí a vytvoření vysoce optimalizovaného modelu TInyML, který dokáže detekovat zvuk Cough v reálném čase.
Požadované komponenty
Hardware
- Arduino 33 BLE Sense
- VEDENÝ
- Propojovací dráty
Software
- Studio Edge Impulse
- Arduino IDE
Podrobili jsme podrobný návod k Arduino 33 BLE Sense.
Kruhový diagram
Schéma zapojení pro detekci kašle pomocí Arduino 33 BLE Sense je uvedeno níže. Fritzing part for Arduino 33 BLE was not available, so I used Arduino Nano as both have the same pin-out.
Kladný vodič LED je připojen k digitálnímu kolíku 4 snímače Arduino 33 BLE a záporný vodič je připojen k kolíku GND Arduino.
Vytvoření datové sady pro stroj na detekci kašle
Jak již bylo zmíněno dříve, pomocí Edge Impulse Studio trénujeme náš model detekce kašle. K tomu musíme shromáždit datovou sadu, která obsahuje vzorky dat, která bychom chtěli být schopni rozpoznat na našem Arduinu. Jelikož cílem je detekovat kašel, budete muset shromáždit některé vzorky tohoto a některé další vzorky pro hluk, aby bylo možné rozlišovat mezi kašlem a jinými zvuky.
Vytvoříme datovou sadu se dvěma třídami „kašel“ a „hluk“. Chcete-li vytvořit datovou sadu, vytvořte účet Edge Impulse, ověřte svůj účet a poté spusťte nový projekt. Ukázky můžete načíst pomocí mobilu, desky Arduino nebo můžete importovat datovou sadu do svého účtu Edge Impuls. Nejjednodušší způsob, jak načíst vzorky do svého účtu, je pomocí mobilního telefonu. K tomu musíte svůj mobil propojit s Edge Impulse.
Chcete-li připojit svůj mobilní telefon, klikněte na „ Zařízení “ a poté na „ Připojit nové zařízení“ .
Nyní v dalším okně klikněte na „ Použít mobilní telefon“ a zobrazí se QR kód. Naskenujte QR kód pomocí svého mobilního telefonu pomocí Google Lens nebo jiné aplikace pro skenování QR kódů.
Tím se váš telefon propojí se studiem Edge Impulse.
S telefonem připojeným k Edge Impulse Studio můžete nyní načíst své vzorky. Chcete-li načíst vzorky, klikněte na „ Sběr dat“ . Nyní na stránce Sběr dat zadejte název štítku, vyberte mikrofon jako senzor a zadejte délku vzorku. Kliknutím na „ Zahájit vzorkování“ zahájíte vzorkování 40sekundového vzorku. Místo toho, abyste se přinutili kašlat, můžete použít online vzorky kašle různých délek. Zaznamenejte celkem 10 až 12 vzorků kašle různých délek.
Po nahrání vzorků kašle nyní nastavte štítek na „šum“ a shromážděte dalších 10 až 12 vzorků šumu.
Tyto vzorky jsou pro trénink modulu, v dalších krocích budeme shromažďovat testovací data. Testovací data by měla představovat alespoň 30% tréninkových dat, proto shromážděte 3 vzorky „šumu“ a 4 až 5 vzorků „kašle“.
Místo shromažďování údajů můžete importovat naši datovou sadu do svého účtu Edge Impulse pomocí nástroje Edge Impulse CLI Uploader.
Chcete-li nainstalovat nástroj CLI Uploader, nejprve si stáhněte a nainstalujte Node.js do svého notebooku. Poté otevřete příkazový řádek a zadejte následující příkaz:
npm install -g edge-impuls-cli
Nyní si stáhněte datovou sadu (Dataset Link) a extrahujte soubor ve složce projektu. Otevřete příkazový řádek a přejděte do umístění datové sady a spusťte následující příkazy:
edge- impulse-uploader --clean edge-impulse-uploader --category training training / *. json edge-impulse-uploader --category training training / *. cbor edge-impulse-uploader --category testování testování / *. json edge-impulse-uploader - testování testování kategorie / *. cbor
Školení modelu a vylepšení kódu
Jakmile je datová sada připravena, vytvoříme nyní impuls pro data. K tomu přejděte na stránku „ Vytvořit impuls “.
Nyní na stránce „ Vytvořit impuls“ klikněte na „ Přidat blok zpracování“ . V dalším okně vyberte blok Audio (MFCC). Poté klikněte na „ Přidat blok učení“ a vyberte blok Neural Network (Keras). Poté klikněte na „ Uložit impuls“ .
V dalším kroku přejděte na stránku MFCC a poté klikněte na „ Generovat funkce“ . Bude generovat bloky MFCC pro všechna naše zvuková okna.
Poté přejděte na stránku „ Klasifikátor NN“ a klikněte na tři tečky v pravém horním rohu „ Nastavení neurální sítě“ a vyberte „ Přepnout do režimu Keras (expert)“ .
Nahraďte originál následujícím kódem a změňte „ Minimální spolehlivost“ na „0,70“. Poté klikněte na tlačítko „ Zahájit trénink“ . Začne trénovat váš model.
import tensorflow jako tf z 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 architektura 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 řídí rychlost učení opt = Adam (lr = 0,005, beta_1 = 0,9, beta_2 = 0,999) # trénovat model neuronové sítě. Soubor (ztráta = 'categorical_crossentropy', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, epochy = 9, validation_data = (X_test, Y_test), verbose = 2)podrobné = 2)podrobné = 2)
Po tréninku model ukáže tréninkový výkon. Pro mě byla přesnost 96,5% a ztráta 0,10, což je dobré pokračovat.
Nyní, když je náš model detekce kašle připraven, nasadíme tento model jako knihovnu Arduino. Před stažením modelu jako knihovny můžete výkon otestovat na stránce „ Živá klasifikace “.
Přejděte na stránku „ Nasazení “ a vyberte „ Knihovna Arduino“ . Nyní přejděte dolů a spusťte proces kliknutím na „Sestavit“ . Tím se pro váš projekt vytvoří knihovna Arduino.
Nyní přidejte knihovnu do svého Arduino IDE. Za tímto účelem otevřete Arduino IDE a poté klikněte na Skica> Zahrnout knihovnu> Knihovna Add.ZIP.
Poté načtěte příklad tak, že přejdete na Soubor> Příklady> Název vašeho projektu - Edge Impulse> nano_ble33_sense_microphone.
Provedeme několik změn v kódu, abychom mohli vydat výstražný zvuk, když Arduino detekuje kašel. K tomu je s Arduinem propojen bzučák a kdykoli detekuje kašel, LED třikrát zabliká.
Změny se provádějí ve funkcích void loop (), kde se tisknou hodnoty šumu a kašle. V původním kódu tiskne štítky i jejich hodnoty společně.
for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Uložíme hodnoty šumu i kašle do různých proměnných a porovnáme hodnoty šumu. Pokud hodnota šumu klesne pod 0,50, znamená to, že hodnota kašle je vyšší než 0,50 a vydá zvuk. Nahraďte původní kód for loop () tímto:
for (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 ("Detekován kašel"); poplach(); }}
Po provedení změn nahrajte kód do svého Arduina. Otevřete sériový monitor s přenosovou rychlostí 115200 baudů.
Takto lze postavit stroj na detekci kašle, není to příliš efektivní způsob, jak najít podezřelého z COVID19, ale v nějaké přeplněné oblasti to může dobře fungovat.
Kompletní pracovní video s knihovnou a kódem je uvedeno níže: