Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Hoestdetectie met TinyML op Arduino

Componenten en benodigdheden

Arduino Nano 33 BLE Sense
× 1

Apps en online services

Edge Impulse Studio

Over dit project

Er is een enorme behoefte aan goedkope, eenvoudig inzetbare oplossingen voor COVID-19 en andere griepgerelateerde vroege detectie. Samen met de VN, Hackster, Edge Impulse en vele anderen hebben we onlangs de UN Covid Detect &Protect Challenge gelanceerd met als doel eenvoudig inzetbare oplossingen te creëren voor de preventie en detectie van griep in ontwikkelingslanden. In deze tutorial laten we zien hoe je Edge Impulse machine learning kunt gebruiken op een Arduino Nano BLE Sense om de aanwezigheid van hoesten in realtime audio te detecteren. We hebben een dataset van hoest- en achtergrondgeluidsmonsters gebouwd en een sterk geoptimaliseerd TInyML-model toegepast om een ​​hoestdetectiesysteem te bouwen dat in realtime werkt in minder dan 20 kB RAM op de Nano BLE Sense. Dezelfde benadering is van toepassing op veel andere embedded audio-patroonafstemmingstoepassingen, bijvoorbeeld ouderenzorg, veiligheid en machinebewaking. Dit project en deze dataset zijn oorspronkelijk gestart door Kartik Thakore om te helpen bij de COVID-19-inspanningen.

Aan de slag

Deze tutorial heeft de volgende vereisten:

  • Basiskennis van softwareontwikkeling en Arduino
  • Geïnstalleerde Arduino IDE of CLI
  • Android- of iOS-mobiele telefoon
  • Arduino Nano BLE Sense of gelijkwaardig Cortex-M4+ bord met een microfoon (optioneel)

We zullen Edge Impulse gebruiken, een online ontwikkelplatform voor machine learning op edge-apparaten. Maak een gratis account aan door je hier aan te melden. Log in op uw account en geef uw nieuwe project een naam door op de titel te klikken. We noemen de onze de "Arduino-hoest-tutorial".

De dataset verzamelen

De eerste stap in elk machine learning-project is het verzamelen van een dataset die bekende voorbeelden van gegevens vertegenwoordigt die we zouden willen kunnen matchen op ons Arduino-apparaat. Om te beginnen hebben we een kleine dataset gemaakt met 10 minuten audio in twee klassen, "hoest" en "ruis". We laten zien hoe u deze dataset in uw Edge Impulse-project kunt importeren, uw eigen voorbeelden kunt toevoegen of zelfs uw eigen dataset helemaal opnieuw kunt beginnen. Deze dataset is klein en heeft een beperkt aantal hoest- en zachte achtergrondgeluidsmonsters. De dataset is dus alleen geschikt voor experimenten en het model dat in deze zelfstudie wordt geproduceerd, kan alleen onderscheid maken tussen zacht achtergrondgeluid en een klein aantal hoestbuien. We raden u aan de dataset uit te breiden met een breder scala aan hoesten, achtergrondgeluid en andere klassen zoals menselijke spraak om de prestaties te verbeteren.

Opmerking: Jezelf dwingen te hoesten is erg belastend voor je stembanden, wees voorzichtig bij het verzamelen van gegevens en testen!

Download eerst onze hoestdataset en pak het bestand uit op uw pc op een locatie naar keuze:https://cdn.edgeimpulse.com/datasets/cough.zip

U kunt deze dataset importeren in uw Edge Impulse-project met behulp van de Edge Impulse CLI Uploader. Installeer de Edge Impulse CLI volgens deze installatie-instructies.

Open een terminal of opdrachtprompt en navigeer naar de map waarin u het bestand hebt uitgepakt.

Uitvoeren:

$ edge-impulse-uploader --clean
$ edge-impulse-uploader --category training training/*
$ edge-impulse-uploader --category testen testen/*

U wordt gevraagd om uw Edge Impulse-gebruikersnaam, wachtwoord en het project waaraan u de dataset wilt toevoegen. De dataset-voorbeelden zijn nu zichtbaar op de Data-acquisitie bladzijde. Door op een voorbeeld te klikken, kunnen we zien hoe het voorbeeld eruitziet en het geluid horen door op de afspeelknop onder elke grafiek te klikken.

10 minuten hoest- en geluidsgegevensmonsters zijn voldoende om aan de slag te gaan. U kunt de dataset optioneel uitbreiden met uw eigen hoest- en achtergrondgeluidsmonsters. We kunnen nieuwe gegevensmonsters rechtstreeks van apparaten verzamelen via de Data-acquisitie bladzijde. Audiosamples in WAV-formaat kunnen ook worden geüpload met de Edge Impulse CLI Uploader.

De eenvoudigste manier om aan de slag te gaan, is door audiogegevens te verzamelen met uw mobiele telefoon (volledige tutorial hier). Ga naar de Apparaten en klik rechtsboven op de knop ‘+ Verbind een nieuw apparaat’. Selecteer 'Uw mobiele telefoon gebruiken'. Dit levert een unieke QR-code op om een ​​webtoepassing in uw telefoonbrowser te openen. Maak een foto van de QR-code en selecteer om de link te openen.

De webtoepassing maakt verbinding met uw Edge Impulse-project en ziet er als volgt uit:

We kunnen nu audiogegevensmonsters rechtstreeks van de telefoon verzamelen via de Data-acquisitie pagina van Edge Impulse. Typ in het gedeelte 'Nieuwe gegevens opnemen' een label van 'hoest' of 'ruis', zorg ervoor dat 'Microfoon' is geselecteerd als de sensor en klik op 'Start meten'. Je telefoon verzamelt nu een audiovoorbeeld en voegt dit toe aan je dataset.

Het rechtstreeks verzamelen van audiogegevens van het Nano BLE Sense-bord wordt ook ondersteund. Volg deze instructies om de Edge Impulse-firmware en daemon te installeren. Zodra het apparaat is verbonden met Edge Impulse, kunt u gegevensmonsters verzamelen, net als met uw mobiele telefoon hierboven.

Je impuls creëren

Vervolgens selecteren we signaalverwerkings- en machine learning-blokken op de Creëer impuls bladzijde. De impuls begint blanco, met Ruwe gegevens en Uitvoerfunctieblokken. Laat de standaardinstellingen van een venstergrootte van 1000 ms en een venstervergroting van 500 ms. Dit betekent dat onze audiogegevens met 1 s per keer worden verwerkt, beginnend met elke 0,5 s. Het gebruik van een klein venster bespaart geheugen op het ingebouwde apparaat, maar betekent dat we voorbeelden van hoestgegevens nodig hebben zonder grote pauzes tussen hoesten.

Klik op 'Een verwerkingsblok toevoegen' en selecteer de Audio (MFCC) blok. Klik vervolgens op 'Een leerblok toevoegen' en selecteer het Neural Network (Keras) blok. Klik op ‘Opslaan Impuls’. Het audioblok zal een spectrogram extraheren voor elk audiovenster en het neurale netwerkblok zal worden getraind om het spectrogram te classificeren als een 'hoest' of 'ruis' op basis van onze trainingsdataset. Uw resulterende impuls ziet er als volgt uit:

Vervolgens zullen we functies genereren uit de trainingsdataset op de MFCC bladzijde. Deze pagina laat zien hoe het geëxtraheerde spectrogram eruitziet voor elk venster van 1 seconde van een van de dataset-samples. We kunnen de parameters op hun standaardwaarden laten.

Klik vervolgens op de knop ‘Functies genereren’, die vervolgens met dit verwerkingsblok de hele trainingsdataset verwerkt. Dit creëert de complete set functies die zullen worden gebruikt om ons neurale netwerk in de volgende stap te trainen. Druk op de knop 'Functies genereren' om de verwerking te starten, dit duurt een paar minuten.

We kunnen nu doorgaan met het opzetten en trainen van ons neurale netwerk op de NN Classifier bladzijde. Het standaard neurale netwerk werkt goed voor continue geluiden zoals stromend water. Hoestdetectie is ingewikkelder, dus we zullen een rijker netwerk configureren met behulp van 2D-convolutie over het spectrogram van elk venster. 2D-convolutie verwerkt het audiospectrogram op een vergelijkbare manier als beeldclassificatie. Druk op de rechterbovenhoek van het gedeelte 'Neurale netwerkinstellingen' en selecteer 'Overschakelen naar Keras (expert)-modus'.

Vervang de definitie van 'Neurale netwerkarchitectuur' door de volgende code en stel de instelling 'Minimum betrouwbaarheidsclassificatie' in op '0.70'. Klik vervolgens op de knop ‘Start training’. De training duurt een paar seconden.

importeer tensorflow als tf
van tensorflow.keras.models importeer Sequential
van tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D
van tensorflow.keras.optimizers importeer Adam
van tensorflow.keras.constraints import MaxNorm
# modelarchitectuur
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_co nstraint=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)

De pagina toont de trainingsprestaties en de prestaties op het apparaat, die er ongeveer zo uit zouden moeten zien, afhankelijk van uw dataset:

Ons Arduino hoestdetectie-algoritme is nu klaar om uit te proberen!

Trainen en testen

De Live classificatie pagina stelt ons in staat om het algoritme te testen met de bestaande testgegevens die bij de dataset zijn geleverd, of door audiogegevens vanaf uw mobiele telefoon of Arduino-apparaat te streamen. We kunnen beginnen met een eenvoudige test door een van de testmonsters te kiezen en op 'Load sample' te drukken. Dit zal het testmonster classificeren en de resultaten tonen:

We kunnen het algoritme ook testen met live data. Begin met uw mobiele telefoon door de browserpagina op uw telefoon te vernieuwen die we eerder hebben geopend. Selecteer vervolgens uw apparaat in het gedeelte 'Nieuwe gegevens classificeren' en druk op 'Start sampling'. U kunt op dezelfde manier audiosamples streamen vanaf uw Nano BLE Sense wanneer u verbonden bent met het project via de edge-impulse-daemon zoals in de stap voor het verzamelen van gegevens.

Implementatie

We kunnen ons hoestdetectie-algoritme eenvoudig implementeren op de mobiele telefoon. Ga naar het browservenster op je telefoon en ververs en druk vervolgens op de knop 'Overschakelen naar classificatiemodus'. Hiermee wordt het project automatisch in een WebAssembly-pakket gebouwd en continu op uw telefoon uitgevoerd (daarna geen cloud nodig, zelfs naar vliegtuigmodus!)

Vervolgens kunnen we het algoritme implementeren op de Nano BLE Sense door naar de Deployment . te gaan bladzijde. Selecteer de 'Arduino Nano 33 BLE Sense' onder 'Firmware bouwen' en klik vervolgens op 'Build'.

Hiermee wordt een complete firmware voor de Nano BLE Sense gebouwd, inclusief uw nieuwste algoritme. Volg de instructies op het scherm om je Arduino-bord te flashen met het binaire bestand.

Zodra de Arduino is geflitst, kunnen we een seriële poort naar het apparaat openen terwijl het is aangesloten op USB met 115, 200 baud. Zodra de seriële poort open is, drukt u op enter om een ​​prompt te krijgen en dan:

> AT+RUNIMPULSE
Inferentie-instellingen:
Interval:0,06 ms.
Framegrootte:16000
Monsterlengte:1000 ms.
Nr. aantal klassen:2
Start deductie, druk op 'b' om te breken
Opname...
Opname klaar
Voorspellingen (DSP:495 ms., Classificatie:84 ms., Anomalie :0 ms.):
hoesten:0,01562
ruis:0,98438
Inferentie starten over 2 seconden...
Opname...
Opname klaar
Voorspellingen (DSP:495 ms., Classificatie:84 ms., Anomalie:0 ms.):
hoesten:0,01562
ruis:0,98438
Inferentie starten in 2 seconden...
Opname...
Opname klaar
Voorspellingen (DSP:495 ms., Classificatie:84 ms., Anomalie:0 ms.):
hoesten:0,86719
ruis:0,13281
Inferentie starten in 2 seconden...
Opname...
Opname klaar
Voorspellingen (DSP:495 ms., Classificatie:84 ms., Anomalie:0 ms.) :
hoesten:0,01562
ruis:0,98438

Toekomstig werk

The sky is the limit met TinyML, sensoren en Edge Impulse op Arduino, hier zijn enkele ideeën voor verder werk:

  • Breid de standaard dataset uit met je eigen hoest- en achtergrondgeluiden, vergeet niet om regelmatig opnieuw te trainen en te testen. U kunt eenheidstests instellen op de pagina Testen om er zeker van te zijn dat het model nog steeds werkt als het wordt uitgebreid.
  • Voeg een nieuwe klasse en gegevens toe voor menselijke geluiden die niet hoesten, zoals achtergrondspraak, geeuwen, enz.
  • Begin met een nieuwe dataset en verzamel audiosamples om iets nieuws te ontdekken. Hint:je kunt alleen de ruisklassegegevens uit deze dataset uploaden om aan de slag te gaan!
  • Uit deze instructies implementeren in de Arduino-bibliotheek als onderdeel van een Arduino-schets om hoestdetectie weer te geven met behulp van de LED of een display
  • Maak gebruik van andere sensoren zoals de 3-assige accelerometer van de Nano BLE Sense door deze tutorial te volgen.

Productieproces

  1. CO2-monitoring met K30-sensor
  2. Doofblinde communicatie met 1Sheeld/Arduino
  3. Bedien muntvangers met Arduino
  4. Arduino met Bluetooth om een ​​LED te bedienen!
  5. Capacitieve vingerafdruksensor met een Arduino of ESP8266
  6. Spelen met Nextion Display
  7. Nunchuk-gestuurde robotarm (met Arduino)
  8. De gezondheid van planten bepalen met TinyML
  9. Bosbrandbewakings- en detectiesysteem (met sms-waarschuwingen)
  10. Zonnestraling meten met Arduino
  11. Mini-radar met Arduino