- Szükséges alkatrészek
- Kördiagramm
- Adatkészlet létrehozása köhögésérzékelő géphez
- A modell oktatása és a kód módosítása
A COVID19 valóban egy olyan történelmi járvány, amely nagyon rosszul érinti az egész világot, és az emberek rengeteg új eszközt építenek a harcra. Emellett építettünk egy automatikus fertőtlenítő gépet és hőpisztolyt az érintés nélküli hőmérséklet-szűréshez. Ma még egy eszközt építünk, amely elősegíti a Coronavirus elleni küzdelmet. Ez egy köhögés-felderítő rendszer, amely megkülönbözteti a zajt és a köhögés hangját, és segíthet megtalálni a Corona gyanúját. Ehhez gépi tanulási technikákat fog használni.
Ebben az oktatóanyagban köhögés-észlelő rendszert fogunk építeni az Arduino 33 BLE Sense és az Edge Impulse Studio segítségével. A valós idejű hangzás során meg tudja különböztetni a normál háttérzajt és a köhögést. Az Edge Impulse Studio segítségével felhasználtuk a köhögés és a háttérzaj mintáinak adatait, és felépítettünk egy nagyon optimalizált TInyML modellt, amely valós időben képes észlelni a köhögés hangját.
Szükséges alkatrészek
Hardver
- Arduino 33 BLE Sense
- VEZETTE
- Jumper huzalok
Szoftver
- Edge Impulse Studio
- Arduino IDE
Az Arduino 33 BLE Sense részletes bemutatóját ismertettük.
Kördiagramm
A köhögés észlelésének áramköri diagramja az Arduino 33 BLE Sense segítségével alább található. Az Arduino 33 BLE fájlhoz nem volt elérhető alkatrész, ezért Arduino Nano-t használtam, mivel mindkettőnek ugyanaz a kitűzése van.
A LED pozitív vezetéke az Arduino 33 BLE sense 4. digitális érintkezőjéhez, a negatív vezeték pedig az Arduino GND tűjéhez csatlakozik.
Adatkészlet létrehozása köhögésérzékelő géphez
Mint korábban említettük, az Edge Impulse Stúdiót használjuk a köhögés detektálási modellünk képzésére. Ehhez össze kell gyűjtenünk egy adatkészletet, amely tartalmazza azokat az adatmintákat, amelyeket szeretnénk felismerni az Arduino-nkon. Mivel a cél a köhögés észlelése, össze kell gyűjteni néhány mintát ebből, és néhány más mintát a zaj érdekében, hogy meg lehessen különböztetni a köhögést és más zajokat.
Létrehozunk egy adatsort, két osztályban: „köhögés” és „zaj”. Adatkészlet létrehozásához hozzon létre egy Edge Impulse fiókot, ellenőrizze a fiókját, majd indítson új projektet. Betöltheti a mintákat mobiljával, Arduino kártyájával, vagy importálhat egy adatkészletet az élimpulzus-fiókjába. A minták legegyszerűbb módja a mobiltelefon használata a számlájára. Ehhez csatlakoztatnia kell a mobilját az Edge Impulse-hez.
A mobiltelefon csatlakoztatásához kattintson az „ Eszközök ”, majd az „ Új eszköz csatlakoztatása ” elemre.
Most a következő ablakban kattintson a " Mobiltelefon használata " elemre, és megjelenik egy QR-kód. Olvassa be a QR-kódot mobiltelefonjával a Google Lens vagy más QR-kódolvasó alkalmazás segítségével.
Ez összeköti a telefont az Edge Impulse stúdióval.
Az Edge Impulse Studio-hoz csatlakoztatott telefonjával most betöltheti a mintáit. A minták betöltéséhez kattintson az ' Adatgyűjtés' gombra. Most az Adatgyűjtés oldalon írja be a címke nevét, válassza ki érzékelőnek a mikrofont, és adja meg a minta hosszát. Kattintson a „ Mintavétel megkezdése ” gombra a 40 másodperces mintavétel megkezdéséhez. Ahelyett, hogy köhögésre kényszerítené magát, használhat különböző hosszúságú online köhögésmintákat. Jegyezzen fel összesen 10–12 különböző hosszúságú köhögésmintát.
A köhögési minták feltöltése után állítsa a címkét „zajra”, és gyűjtsön további 10–12 zajmintát.
Ezek a minták a modul képzésére szolgálnak, a következő lépésekben összegyűjtjük a tesztadatokat. A vizsgálati adatoknak legalább az edzésadatok 30% -ának kell lenniük, ezért gyűjtsék össze a 3 „zaj” és 4–5 „köhögés” mintát.
Az adatgyűjtés helyett importálhatja az adatkészletünket az Edge Impulse fiókjába az Edge Impulse CLI feltöltő segítségével.
A CLI Uploader telepítéséhez először töltse le és telepítse a Node.js fájlt a laptopjára. Ezt követően nyissa meg a parancssort, és írja be az alábbi parancsot:
npm install -g edge-impulse-cli
Most töltse le az adatkészletet (Dataset Link), és vonja ki a fájlt a projekt mappájába. Nyissa meg a parancssort, keresse meg az adatkészlet helyét, és futtassa az alábbi parancsokat:
él-impulzus-feltöltő - tiszta él-impulzus-feltöltő - kategóriás képzési képzés / *. json él-impulzus-feltöltő - kategóriás edzés / *. cbor él-impulzus-feltöltő - kategória tesztelés / *. json edge-impulse-uploader - kategória tesztelése tesztelés / *. cbor
A modell oktatása és a kód módosítása
Mivel az adatkészlet készen áll, most létrehozunk egy impulzust az adatok számára. Ehhez lépjen az " Impulzus létrehozása " oldalra.
Most az „ Impulzus létrehozása” oldalon kattintson a „ Feldolgozási blokk hozzáadása ” elemre. A következő ablakban válassza ki az Audio (MFCC) blokkot. Ezután kattintson a " Tanulási blokk hozzáadása " elemre, és válassza ki a Neural Network (Keras) blokkot. Ezután kattintson az ' Impulzus mentése' gombra.
A következő lépésben lépjen az MFCC oldalra, majd kattintson a " Jellemzők létrehozása" gombra. MFCC-blokkokat generál az összes audio-ablakunkhoz.
Ezt követően lépjen az ' NN Classifier' oldalra, kattintson a ' Neural Network settings' jobb felső sarkában található három pontra, és válassza a ' Switch to Keras (expert) mode' menüpontot .
Cserélje az eredetit a következő kódra, és változtassa meg a „ Minimális megbízhatósági besorolás” értéket „0,70” -re. Ezután kattintson az ' Edzés megkezdése' gombra. Elkezdi a modell edzését.
tensorflow importálása tf formátumban a tensorflow.keras.modelsből import MaxNorm # modell architektúra modell = Szekvenciális () model.add (InputLayer (input_shape = (X_train.shape,), név = '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 = 'ugyanaz', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, kitöltés = 'ugyanaz')) model.add (Conv2D (5, kernel_size = 5, activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2,padding = 'ugyanaz')) model.add (Flatten ()) model.add (Sűrű (osztályok, aktiválás = 'softmax', név = 'y_pred', kernel_constraint = MaxNorm (3))) # ez vezérli a tanulási arány opciót = Adam (lr = 0,005, béta_1 = 0,9, béta_2 = 0,999) # képezze ki az ideghálózati modellt. Fordítson össze (veszteség = 'kategoriális_keresztrópia', optimalizáló = opt, metrika =) model.fit (X_train, Y_train, batch_size = 32, korszakok = 9, validációs_adatok = (X_teszt, Y_teszt), részletes = 2)részletesen = 2)részletesen = 2)
A modell kiképzése után megmutatja az edzés teljesítményét. Számomra a pontosság 96,5%, a veszteség pedig 0,10 volt, ami jó a továbblépéshez.
Most, hogy készen áll a köhögés detektálási modellünk, ezt a modellt Arduino könyvtárként telepítjük. Mielőtt a modellt könyvtárként töltené le, tesztelheti a teljesítményt az „ Élő osztályozás ” oldalon.
Menjen a " Telepítés " oldalra, és válassza az " Arduino Library" lehetőséget . Most görgessen lefelé, és kattintson a "Build" gombra a folyamat elindításához. Ez Arduino könyvtárat épít a projektjéhez.
Most adja hozzá a könyvtárat az Arduino IDE-be. Ehhez nyissa meg az Arduino IDE alkalmazást, majd kattintson a Vázlat> Könyvtár belefoglalása> Add.ZIP könyvtár elemre.
Ezután töltsön be egy példát a Fájl> Példák> A projekt neve - Edge Impulse> nano_ble33_sense_microphone menüpontra kattintva.
Néhány változtatást végrehajtunk a kódban, hogy figyelmeztető hangot adhassunk ki, amikor az Arduino köhögést észlel. Ehhez egy hangjelző kapcsolódik az Arduino-hoz, és amikor köhögést észlel, a LED háromszor villog.
A változtatásokat a void loop () függvények hajtják végre, ahol a zaj- és köhögési értékeket nyomtatja. Az eredeti kódban a címkéket és azok értékeit együtt nyomtatja.
for (méret_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", eredmény.osztályozás.címke, eredmény.osztályozás.érték); }
Menteni fogjuk mind a zaj, mind a köhögés értékeit különböző változókban, és összehasonlítjuk a zajértékeket. Ha a zaj értéke 0,50 alá esik, ez azt jelenti, hogy a köhögés értéke meghaladja a 0,50 értéket, és ez kiadja a hangot. Cserélje ki az eredeti for loop () kódot ezzel:
for (méret_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Soros nyomtatás (eredmény.osztályozás.érték); lebegő adat = eredmény.osztályozás.érték; if (Adatok <0,50) {Soros.nyomtatás ("Köhögést észleltek"); riasztás(); }}
A módosítások elvégzése után töltse fel a kódot az Arduino-ra. Nyissa meg a soros monitort 115200 baudon.
Tehát így lehet felépíteni egy köhögés-érzékelő gépet, ez nem túl hatékony módszer a COVID19 gyanúsítottainak megtalálásához, de jól működik néhány zsúfolt területen.
Az alábbiakban egy teljes működő videó található könyvtárral és kóddal: