Inhoudsopgave:
- Benodigdheden
- Stap 1: Schakelschema
- Stap 2: De dataset voor hoestdetectiemachine maken
- Stap 3: Maak verbinding met mobiele telefoon
- Stap 4:
- Stap 5: Het model trainen en de code aanpassen
- Stap 6:
- Stap 7: Coderen
Video: Hoestdetector in zakformaat - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
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 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
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
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:
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:
Luidspreker in zakformaat: 3 stappen
Zakformaat luidspreker: neem hem overal mee naartoe! Muziek die onderweg is! Hallo iedereen in deze instructable (wat mijn eerste is) Ik ga je laten zien hoe ik deze zakformaat luidspreker heb gemaakt
Muziekspeler in zakformaat: 7 stappen
Zakformaat muziekspeler: Hallo, ik ben Cameron, dit is mijn 6e instructable! In deze laat ik je zien hoe je een doe-het-zelf muziekspeler maakt, ik hoop dat je ervan geniet
Waterpomp in zakformaat: 7 stappen
Waterpomp in zakformaat: in dagelijkse situaties is het beschikbare water vaak verontreinigd, ongezond of zelfs giftig. Daarom is het vaak nodig om drinkwater van lagere niveaus naar hogere niveaus te transporteren waar het kan worden gebruikt. Een waterpomp is vaak een haalbare optie
Zakformaat voeding: 5 stappen (met afbeeldingen)
Zakformaat voeding: hier is een geminiaturiseerde instelbare voeding, u kunt de output aanpassen van 1,2V tot 16,8V (DC)
Powerbank in zakformaat: 4 stappen (met afbeeldingen)
Powerbank in zakformaat: een powerbank is een draagbaar apparaat dat stroom kan leveren via de ingebouwde batterijen via een USB-poort. Ze worden meestal opgeladen met een USB-voeding. Vanwege het algemene doel winnen powerbanks ook aan populariteit als merk- en promotionele