Obsah:

Kapesní detektor kašle: 7 kroků
Kapesní detektor kašle: 7 kroků

Video: Kapesní detektor kašle: 7 kroků

Video: Kapesní detektor kašle: 7 kroků
Video: Zmlátil Jsem STEJKA! 2024, Listopad
Anonim
Kapesní detektor kašle
Kapesní detektor kašle

COVID19 je opravdu historická pandemie, která velmi špatně zasahuje celý svět a lidé staví spoustu nových zařízení, aby s ním mohli bojovat. Postavili jsme také automatický dezinfekční stroj a termální pistoli pro bezkontaktní teplotní screening. Dnes postavíme ještě jedno zařízení, které pomůže v boji s koronavirem. Jedná se o systém detekce kašle, který dokáže rozlišit hluk a zvuk kašle a může pomoci najít podezřelého z Corony. K tomu bude využívat techniky strojového učení.

V tomto tutoriálu se chystáme vybudovat systém pro detekci kašle pomocí Arduino 33 BLE Sense a Edge Impulse Studio. Ve zvuku v reálném čase dokáže rozlišovat mezi běžným šumem na pozadí a kašlem. Edge Impulse Studio jsme použili k trénování datové sady vzorků kašle a šumu na pozadí a vybudování vysoce optimalizovaného modelu TInyML, který dokáže detekovat zvuk kašle v reálném čase.

Zásoby

Hardware

  • Arduino 33 BLE Sense
  • LED propojka
  • Dráty

Software

  • Edge Impulse Studio
  • Arduino IDE

Krok 1: Schéma zapojení

Kruhový diagram
Kruhový diagram
Kruhový diagram
Kruhový diagram

Schéma zapojení pro detekci kašle pomocí Arduino 33 BLE Sense je uvedeno výše. Fritzovací část pro Arduino 33 BLE nebyla k dispozici, takže jsem použil Arduino Nano, protože oba mají stejný pin-out.

Kladný vodič LED je připojen k digitálnímu pinu 4 Arduino 33 BLE sense a záporný vodič je připojen ke kolíku GND Arduina.

Krok 2: Vytvoření datové sady pro stroj pro detekci kašle

Vytvoření datové sady pro stroj pro detekci kašle
Vytvoření datové sady pro stroj pro detekci kašle

Jak již bylo zmíněno dříve, k trénování našeho modelu detekce kašle používáme Edge Impulse Studio. K tomu musíme shromáždit datovou sadu, která obsahuje vzorky dat, které bychom chtěli na našem Arduinu rozpoznat. Vzhledem k tomu, že cílem je detekovat kašel, budete muset shromáždit několik jeho vzorků a další vzorky na 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í mobilního telefonu, desky Arduino nebo můžete importovat datovou sadu do svého účtu Edge Impuls. Nejjednodušší způsob načtení vzorků na váš účet 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í“.

Krok 3: Připojte se k mobilnímu telefonu

Připojte se k mobilnímu telefonu
Připojte se k mobilnímu telefonu

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í s Edge Impulse studio.

S telefonem propojeným s Edge Impulse Studio můžete nyní načíst své vzorky. Chcete -li načíst vzorky, klikněte na „Získávání dat“. Nyní na stránce Získávání dat zadejte název štítku, vyberte mikrofon jako senzor a zadejte délku vzorku. Kliknutím na „Spustit vzorkování“zahájíte vzorkování 40sekundového vzorku. Místo toho, abyste se ke kašli nutili, můžete použít online vzorky kašle různé délky. Zaznamenejte celkem 10 až 12 vzorků kašle různé délky.

Krok 4:

obraz
obraz
obraz
obraz

Po nahrání vzorků kašle nyní nastavte štítek na „šum“a nasbírejte dalších 10 až 12 vzorků hluku.

Tyto vzorky jsou pro školení modulu, v dalších krocích budeme shromažďovat testovací data. Testovací data by měla tvořit alespoň 30% tréninkových dat, shromážděte tedy 3 vzorky „hluku“a 4 až 5 vzorků „kašle“. Namísto shromažďování dat můžete importovat naši datovou sadu do svého účtu Edge Impulse pomocí Edge Impulse CLI Uploader. Chcete -li nainstalovat CLI Uploader, nejprve si stáhněte a nainstalujte Node.js do svého notebooku. Poté otevřete příkazový řádek a zadejte níže uvedený příkaz:

npm install -g edge-impulse-cli

Nyní si stáhněte datovou sadu (Dataset Link) a rozbalte soubor do složky projektu. Otevřete příkazový řádek, přejděte do umístění datové sady a spusťte následující příkazy:

edge-impulse-uploader --cleanedge-impulse-uploader-školení školení kategorie/*. json

edge-impulse-uploader-školení školení kategorie/*. cbor

edge-impulse-uploader-testování testování kategorie/*. json edge-impulse-uploader-testování testování kategorie/*. cbor

Krok 5: Trénování modelu a vyladění kódu

Jakmile je datová sada připravena, vytvoříme impuls pro data. Chcete -li to provést, 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 okna zvuku.

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.

importovat tensorflow jako tffrom 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.conas MaxNorm # model architektury 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 (Husté (třídy, aktivace = 'softmax', název = '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énujte model neuronové sítě. Hromada (ztráta = 'categoryorical_crossentropy', optimalizátor = opt, metrics = ['přesnost']) model.fit (X_train, Y_train, batch_size = 32, epochs = 9, validation_data = (X_test, Y_test), podrobný = 2)

Krok 6:

Po natrénování modelu předvede 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 si můžete vyzkoušet výkon na stránce „Klasická klasifikace“. Přejděte na stránku „Nasazení“a vyberte „Knihovna Arduino“. Nyní přejděte dolů a kliknutím na „Sestavit“spusťte proces. Tím pro váš projekt vytvoříte knihovnu Arduino.

Nyní přidejte knihovnu do svého Arduino IDE. K tomu otevřete Arduino IDE a poté klikněte na Sketch> Include Library> Add. ZIP library. Poté načtěte příklad v části Soubor> Příklady> Název vašeho projektu - Edge Impulse> nano_ble33_sense_microphone. Provedeme některé změny v kódu, abychom mohli vydat výstražný zvuk, když Arduino detekuje kašel. Za tímto účelem je bzučák propojen s Arduino 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 hluku a kašle. V původním kódu je tisk štítků a jejich hodnot dohromady. pro (velikost_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf (" %s: %.5f / n", result.classification [ix].label, result.classification [ix].value); } Uložíme hodnoty hluku a kašle do různých proměnných a porovnáme hodnoty hluku. Pokud hodnota hluku klesne pod 0,50, znamená to, že hodnota kašle je větší 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 [ix].value); float Data = result.classification [ix].value; if (Data <0,50) {Serial.print ("Kašel detekován"); poplach(); }} Po provedení změn nahrajte kód do svého Arduina. Otevřete sériový monitor na 115200 baudů.

Takhle lze postavit stroj pro detekci kašle, není to příliš účinná metoda k nalezení jakéhokoli podezřelého z COVID19, ale může fungovat pěkně v nějaké přeplněné oblasti.

Krok 7: Kód

Prosím, najděte připojený soubor, A pokud se vám to líbilo, nezapomeňte mi dát hlas v níže uvedené soutěži.

Doporučuje: