Inhoudsopgave:

Hoestdetector in zakformaat - Ajarnpa
Hoestdetector in zakformaat - Ajarnpa

Video: Hoestdetector in zakformaat - Ajarnpa

Video: Hoestdetector in zakformaat - Ajarnpa
Video: Host Based Intrusion Detection Systems | CBT Nuggets 2024, November
Anonim
Hoestdetector in zakformaat
Hoestdetector in zakformaat

COVID19 is echt een historische pandemie die de hele wereld zwaar treft en mensen bouwen veel nieuwe apparaten om ermee te vechten. We hebben ook een automatische ontsmettingsmachine en een thermisch pistool gebouwd voor contactloze temperatuurscreening. Vandaag bouwen we nog een apparaat om te helpen vechten met het Coronavirus. Het is een hoestdetectiesysteem, dat onderscheid kan maken tussen geluid en hoestgeluid en kan helpen bij het opsporen van een Corona-verdachte. Het zal daarvoor machine learning-technieken gebruiken.

In deze tutorial gaan we een hoestdetectiesysteem bouwen met Arduino 33 BLE Sense en Edge Impulse Studio. Het kan onderscheid maken tussen normaal achtergrondgeluid en hoesten in realtime audio. We hebben Edge Impulse Studio gebruikt om een dataset van hoest- en achtergrondgeluidsmonsters te trainen en een sterk geoptimaliseerd TInyML-model te bouwen, dat een hoestgeluid in realtime kan detecteren.

Benodigdheden

Hardware

  • Arduino 33 BLE Sense
  • LEDJumper
  • Draden

Software

  • Edge Impulse Studio
  • Arduino IDE

Stap 1: Schakelschema

Schakelschema
Schakelschema
Schakelschema
Schakelschema

Schakelschema voor hoestdetectie met behulp van Arduino 33 BLE Sense wordt hierboven gegeven. Fritzing-onderdeel voor Arduino 33 BLE was niet beschikbaar, dus ik gebruikte Arduino Nano omdat beide dezelfde pin-out hebben.

De positieve kabel van LED is verbonden met digitale pin 4 van Arduino 33 BLE sense en negatieve kabel is verbonden met de GND-pin van Arduino.

Stap 2: De dataset voor hoestdetectiemachine maken

De gegevensset voor hoestdetectiemachine maken
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 voorbeelden van gegevens die we graag zouden willen herkennen op onze Arduino. Aangezien het doel is om de hoest te detecteren, moet u enkele voorbeelden van die 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 "ruis". Om een dataset aan te maken, maakt u een Edge Impulse-account aan, verifieert u uw account en start u een nieuw project. U kunt de voorbeelden laden met uw mobiel, uw Arduino-bord of u kunt een dataset importeren in uw edge-impulse-account. De eenvoudigste manier om de monsters 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'.

Stap 3: Maak verbinding met mobiele telefoon

Verbinding maken met mobiele telefoon
Verbinding maken met mobiele telefoon

Klik nu in het volgende venster op ‘Use your Mobile Phone’ en er verschijnt een QR-code. Scan de QR-code met uw mobiele telefoon met Google Lens of een andere QR-codescanner-app.

Hierdoor wordt je telefoon verbonden met Edge Impulse studio.

Met uw telefoon verbonden met Edge Impulse Studio, kunt u nu uw samples laden. Om de monsters 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 samplelengte in. Klik op 'Start sampling' om een monster van 40 seconden te nemen. In plaats van jezelf te dwingen te hoesten, kun je online hoestmonsters van verschillende lengtes gebruiken. Noteer in totaal 10 tot 12 hoestmonsters van verschillende lengtes.

Stap 4:

Afbeelding
Afbeelding
Afbeelding
Afbeelding

Nadat u de hoestmonsters heeft geüpload, stelt u het label nu in op 'ruis' en verzamelt u nog eens 10 tot 12 geluidsmonsters.

Deze voorbeelden zijn voor het trainen van de module, in de volgende stappen zullen we de testgegevens verzamelen. Testgegevens moeten ten minste 30% van de trainingsgegevens zijn, dus verzamel de 3 voorbeelden van 'ruis' en 4 tot 5 voorbeelden van 'hoesten'. In plaats van uw gegevens te verzamelen, kunt u onze dataset in uw Edge Impulse-account importeren met behulp van de Edge Impuls CLI-uploader. Om de CLI Uploader te installeren, downloadt en installeert u eerst Node.js op uw 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 --cleanedge-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

Stap 5: 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 aanmaken’.

Klik nu op de pagina ‘Impuls aanmaken’ op ‘Een verwerkingsblok toevoegen’. Selecteer in het volgende venster het blok Audio (MFCC). Klik daarna op ‘Een leerblok toevoegen’ en selecteer het blok Neural Network (Keras). Klik dan op ‘Bewaar Impuls’.

Ga in de volgende stap naar de MFCC-pagina en klik vervolgens op ‘Functies genereren’. Het genereert MFCC-blokken voor al onze audiovensters.

Ga daarna naar de pagina ‘NN Classifier’ en klik op de drie stippen in de rechterbovenhoek van de ‘Neural Network settings’ en selecteer ‘Switch to Keras (expert) mode’.

Vervang het origineel door de volgende code en wijzig de 'Minimum betrouwbaarheidsclassificatie' in '0.70'. Klik dan op de knop ‘Start training’. Het zal beginnen met het trainen van je model.

importeer tensorflow als tffrom tensorflow.keras.models importeer Sequential van tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D van tensorflow.keras.optimizerstrains import Adam van tensorflow. MaxNorm # model architectuur 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, activatie='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))) # dit regelt de leersnelheid opt = Adam(lr=0.005, beta_ 1=0.9, beta_2=0.999) # train het neurale netwerk model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy']) model.fit(X_train, Y_train, batch_size=32, epochs=9, validation_data=(X_test, Y_test), uitgebreid=2)

Stap 6:

Na het trainen van het model zal het de trainingsprestaties laten zien. Voor mij was de nauwkeurigheid 96,5% en het verlies was 0,10, dat is goed om door te gaan.

Nu ons hoestdetectiemodel gereed 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 'Deployment' en selecteer 'Arduino Library'. 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 > Include Library > 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 hij 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. for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) { ei_printf(" %s: %.5f\n", result.classification[ix].label, resultaat.classification[ix].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 dan 0,50 is en het geluid zal maken. Vervang de originele for loop() code door deze: for (size_t ix = 1; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) { Serial.print(result.classification[ix].value); float Data = resultaat.classificatie[ix].waarde; if (Gegevens < 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 hoestdetectiemachine kan worden gebouwd, het is geen erg effectieve methode om een COVID19-verdachte te vinden, maar het kan goed werken in een druk gebied.

Stap 7: Coderen

Gelieve het bijgevoegde bestand te vinden, En als je het leuk vond, vergeet dan niet om op mij te stemmen in de onderstaande wedstrijd.

Aanbevolen: