- Componenten vereist
- Schakelschema
- De gegevensset voor hoestdetectiemachine maken
- Het model trainen en de code aanpassen
COVID19 is echt een historische pandemie die de hele wereld ernstig treft en mensen bouwen veel nieuwe apparaten om ermee te vechten. We hebben ook een automatische ontsmettingsmachine en een thermisch pistool gebouwd voor contactloze temperatuurmeting. Vandaag zullen we nog een apparaat bouwen om te helpen vechten met Coronavirus. Het is een hoestdetectiesysteem, dat onderscheid kan maken tussen geluid en hoestgeluid en kan helpen bij het vinden van Corona-verdachte. Daarvoor zal het machine learning-technieken gebruiken.
In deze tutorial gaan we een hoestdetectiesysteem bouwen met Arduino 33 BLE Sense en Edge Impulse Studio. Het kan in realtime audio onderscheid maken tussen normaal achtergrondgeluid en hoesten. We hebben Edge Impulse Studio gebruikt om een dataset van hoest- en achtergrondruismonsters te trainen en een sterk geoptimaliseerd TInyML-model te bouwen, dat een hoestgeluid in realtime kan detecteren.
Componenten vereist
Hardware
- Arduino 33 BLE Sense
- LED
- Doorverbindingsdraden
Software
- Edge Impulse Studio
- Arduino IDE
We hebben een gedetailleerde tutorial over Arduino 33 BLE Sense behandeld.
Schakelschema
Het schakelschema voor hoestdetectie met Arduino 33 BLE Sense wordt hieronder gegeven. Fritzing-onderdeel voor Arduino 33 BLE was niet beschikbaar, dus ik heb Arduino Nano gebruikt omdat beide dezelfde pin-out hebben.
De positieve kabel van de LED is verbonden met digitale pin 4 van Arduino 33 BLE sense en de negatieve kabel is verbonden met de GND-pin van Arduino.
De gegevensset voor hoestdetectiemachine maken
Zoals eerder vermeld, gebruiken we Edge Impulse Studio om ons hoestdetectiemodel te trainen. Daarvoor moeten we een dataset verzamelen met de gegevensmonsters die we graag zouden willen kunnen herkennen op onze Arduino. Omdat het doel is om de hoest te detecteren, moet u enkele voorbeelden daarvan en enkele andere monsters voor ruis verzamelen, zodat het onderscheid kan maken tussen hoest en andere geluiden.
We zullen een dataset maken met twee klassen “hoest” en “lawaai”. Om een dataset aan te maken, maakt u een Edge Impulse-account aan, verifieert u uw account en start u een nieuw project. Je kunt de samples laden met je mobiel, je Arduino-bord of je kunt een dataset importeren in je edge impulse-account. De eenvoudigste manier om de samples in uw account te laden, is door uw mobiele telefoon te gebruiken. Daarvoor moet je je mobiel verbinden met Edge Impulse.
Om uw mobiele telefoon te verbinden, klikt u op ' Apparaten ' en vervolgens op ' Een nieuw apparaat verbinden' .
Klik nu in het volgende venster op ' Gebruik je mobiele telefoon' en er verschijnt een QR-code. Scan de QR-code met uw mobiele telefoon met Google Lens of een andere QR-codescanner-app.
Hiermee wordt uw telefoon verbonden met Edge Impulse Studio.
Met uw telefoon verbonden met Edge Impulse Studio, kunt u nu uw samples laden. Om de samples te laden, klikt u op ' Data-acquisitie' . Voer nu op de pagina Data-acquisitie de labelnaam in, selecteer de microfoon als sensor en voer de monsterlengte in. Klik op ' Start sampling' om een sample van 40 seconden te nemen. In plaats van jezelf te dwingen te hoesten, kun je online hoestmonsters van verschillende lengtes gebruiken. Registreer in totaal 10 tot 12 hoestmonsters van verschillende lengtes.
Na het uploaden van de hoestmonsters, zet u nu het label op 'ruis' en verzamelt u nog eens 10 tot 12 ruismonsters.
Deze voorbeelden zijn voor het trainen van de module, in de volgende stappen verzamelen we de testgegevens. Testgegevens moeten ten minste 30% van de trainingsgegevens zijn, dus verzamel de 3 monsters 'ruis' en 4 tot 5 monsters 'hoest'.
In plaats van uw gegevens te verzamelen, kunt u onze gegevensset in uw Edge Impulse-account importeren met behulp van de Edge Impulse CLI Uploader.
Om de CLI Uploader te installeren, download en installeer je eerst Node.js op je laptop. Open daarna de opdrachtprompt en voer de onderstaande opdracht in:
npm install -g edge-impulse-cli
Download nu de dataset (Dataset Link) en pak het bestand uit in uw projectmap. Open de opdrachtprompt en navigeer naar de locatie van de dataset en voer de onderstaande opdrachten uit:
edge-impulse-uploader --clean edge-impulse-uploader --category training training / *. json edge-impulse-uploader --category training training / *. cbor edge-impulse-uploader --category testing testing / *. json edge-impulse-uploader --category testing testing / *. cbor
Het model trainen en de code aanpassen
Nu de dataset klaar is, gaan we nu een impuls voor data creëren. Ga daarvoor naar de pagina ' Impuls creëren '.
Klik nu op de pagina ' Impuls aanmaken' op ' Verwerkingsblok toevoegen' . Selecteer in het volgende venster het blok Audio (MFCC). Klik daarna op ' Leerblok toevoegen' en selecteer het blok Neural Network (Keras). Klik vervolgens op ' Impuls opslaan' .
Ga in de volgende stap naar de MFCC-pagina en klik vervolgens op ' Generate Features' . Het zal MFCC-blokken genereren voor al onze vensters met audio.
Ga daarna naar de ' NN Classifier'- pagina en klik op de drie stippen in de rechterbovenhoek van de' Neural Network-instellingen ' en selecteer' Switch to Keras (expert) mode ' .
Vervang het origineel door de volgende code en verander de ' Minimale betrouwbaarheidsclassificatie' in '0,70'. Klik vervolgens op de knop ' Start training' . Het zal uw model gaan trainen.
importeer tensorflow als tf uit tensorflow.keras.models import Sequential uit tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D uit tensorflow.keras.optimizers importeer Adamas.keras.optimizers import Adamas uit tensorflow.keras.optimizers. import MaxNorm # modelarchitectuur 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, activering = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, padding = 'same')) model.add (Conv2D (5, kernel_size = 5, activering = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2,padding = 'same')) model.add (Flatten ()) model.add (Dense (klassen, activering = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # dit regelt de leersnelheid opt = Adam (lr = 0.005, beta_1 = 0.9, beta_2 = 0.999) # train het neurale netwerkmodel. Stapel (loss = 'categorical_crossentropy', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, tijdperken = 9, validation_data = (X_test, Y_test), uitgebreid = 2)uitgebreid = 2)uitgebreid = 2)
Nadat het model is getraind, worden de trainingsprestaties weergegeven. Voor mij was de nauwkeurigheid 96,5% en het verlies was 0,10, dat is goed om door te gaan.
Nu ons hoestdetectiemodel klaar is, zullen we dit model inzetten als Arduino-bibliotheek. Voordat u het model als bibliotheek downloadt, kunt u de prestaties testen door naar de pagina ' Live classificatie ' te gaan.
Ga naar de pagina ' Implementatie ' en selecteer ' Arduino-bibliotheek' . Scroll nu naar beneden en klik op 'Build' om het proces te starten. Hiermee wordt een Arduino-bibliotheek voor uw project gebouwd.
Voeg nu de bibliotheek toe aan uw Arduino IDE. Open daarvoor de Arduino IDE en klik vervolgens op Sketch> Inclusief bibliotheek> Add.ZIP-bibliotheek.
Laad vervolgens een voorbeeld door naar Bestand> Voorbeelden> Uw projectnaam - Edge Impulse> nano_ble33_sense_microphone te gaan.
We zullen enkele wijzigingen in de code aanbrengen, zodat we een waarschuwingsgeluid kunnen maken wanneer de Arduino hoest detecteert. Daarvoor is een zoemer gekoppeld aan Arduino en wanneer het hoest detecteert, knippert de LED drie keer.
De wijzigingen worden aangebracht in void loop () -functies waar het de ruis- en hoestwaarden afdrukt. In de originele code drukt het zowel de labels als hun waarden samen af.
voor (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
We gaan zowel de ruis- als hoestwaarden opslaan in verschillende variabelen en de ruiswaarden vergelijken. Als de ruiswaarde onder de 0,50 komt, betekent dit dat de hoestwaarde meer is dan 0,50 en het zal het geluid maken. Vervang de originele for loop () -code door deze:
voor (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 ("Hoest gedetecteerd"); alarm(); }}
Nadat u de wijzigingen heeft aangebracht, uploadt u de code naar uw Arduino. Open de seriële monitor op 115200 baud.
Dus dit is hoe een hoest detectie machine kan worden gebouwd, het is niet een zeer effectieve methode om elke COVID19 verdachte vinden, maar het kan goed werken in sommige drukke omgeving.
Een complete werkvideo met bibliotheek en code wordt hieronder gegeven: