- Componenti richiesti
- Schema elettrico
- Creazione del set di dati per la macchina per il rilevamento della tosse
- Addestrare il modello e modificare il codice
COVID19 è davvero una pandemia storica che colpisce molto gravemente il mondo intero e le persone stanno costruendo molti nuovi dispositivi per combatterla. Abbiamo inoltre realizzato una macchina per la sanificazione automatica e una pistola termica per lo screening della temperatura senza contatto. Oggi costruiremo un altro dispositivo per aiutare a combattere il Coronavirus. È un sistema di rilevamento della tosse, che può distinguere tra rumore e suono della tosse e può aiutare a trovare il sospetto Corona. Per questo utilizzerà tecniche di apprendimento automatico.
In questo tutorial, costruiremo un sistema di rilevamento della tosse utilizzando Arduino 33 BLE Sense e Edge Impulse Studio. Può distinguere tra il normale rumore di fondo e la tosse nell'audio in tempo reale. Abbiamo utilizzato Edge Impulse Studio per addestrare un set di dati di campioni di tosse e rumore di fondo e creare un modello TInyML altamente ottimizzato, in grado di rilevare un suono di tosse in tempo reale.
Componenti richiesti
Hardware
- Arduino 33 BLE Sense
- GUIDATO
- Cavi per ponticelli
Software
- Edge Impulse Studio
- IDE Arduino
Abbiamo coperto un tutorial dettagliato su Arduino 33 BLE Sense.
Schema elettrico
Di seguito è riportato lo schema del circuito per il rilevamento della tosse utilizzando Arduino 33 BLE Sense. La parte Fritzing per Arduino 33 BLE non era disponibile, quindi ho usato Arduino Nano poiché entrambi hanno lo stesso pin-out.
Il cavo positivo del LED è collegato al pin digitale 4 di Arduino 33 BLE sense e il cavo negativo è collegato al pin GND di Arduino.
Creazione del set di dati per la macchina per il rilevamento della tosse
Come accennato in precedenza, stiamo utilizzando Edge Impulse Studio per addestrare il nostro modello di rilevamento della tosse. Per questo, dobbiamo raccogliere un set di dati che abbia i campioni di dati che vorremmo essere in grado di riconoscere sul nostro Arduino. Poiché l'obiettivo è rilevare la tosse, dovrai raccogliere alcuni campioni di questo e altri campioni per il rumore, in modo che possa distinguere tra tosse e altri rumori.
Creeremo un set di dati con due classi "tosse" e "rumore". Per creare un set di dati, crea un account Edge Impulse, verifica il tuo account e quindi avvia un nuovo progetto. Puoi caricare i campioni utilizzando il tuo cellulare, la tua scheda Arduino oppure puoi importare un set di dati nel tuo account edge impulse. Il modo più semplice per caricare i campioni nel tuo account è utilizzare il tuo telefono cellulare. Per questo, devi connettere il tuo cellulare con Edge Impulse.
Per connettere il tuo telefono cellulare, fai clic su " Dispositivi " e quindi su " Collega un nuovo dispositivo" .
Ora nella finestra successiva, fai clic su " Usa il tuo telefono cellulare" e apparirà un codice QR. Scansiona il codice QR con il tuo telefono cellulare utilizzando Google Lens o un'altra app per la scansione di codici QR.
Questo collegherà il tuo telefono con Edge Impulse Studio.
Con il telefono connesso a Edge Impulse Studio, ora puoi caricare i tuoi campioni. Per caricare i campioni, fare clic su " Acquisizione dati" . Ora nella pagina Acquisizione dati, inserisci il nome dell'etichetta, seleziona il microfono come sensore e inserisci la lunghezza del campione. Fare clic su " Avvia campionamento" per avviare il campionamento di un campione di 40 secondi. Invece di costringerti a tossire, puoi utilizzare campioni di tosse online di diverse lunghezze. Registra un totale di 10-12 campioni di tosse di diverse lunghezze.
Dopo aver caricato i campioni di tosse, ora imposta l'etichetta su "rumore" e raccogli altri 10-12 campioni di rumore.
Questi esempi sono per l'addestramento del modulo, nei passaggi successivi raccoglieremo i dati del test. I dati del test dovrebbero essere almeno il 30% dei dati di allenamento, quindi raccogliere i 3 campioni di "rumore" e da 4 a 5 campioni di "tosse".
Invece di raccogliere i tuoi dati, puoi importare il nostro set di dati nel tuo account Edge Impulse utilizzando Edge Impulse CLI Uploader.
Per installare l'uploader della CLI, innanzitutto scarica e installa Node.js sul tuo laptop. Successivamente, apri il prompt dei comandi e inserisci il comando seguente:
npm install -g edge-impulse-cli
Ora scarica il dataset (Dataset Link) ed estrai il file nella cartella del tuo progetto. Apri il prompt dei comandi e vai alla posizione del set di dati ed esegui i seguenti comandi:
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
Addestrare il modello e modificare il codice
Poiché il set di dati è pronto, ora creeremo un impulso per i dati. Per questo vai alla pagina " Crea impulso ".
Nella pagina " Crea impulso" , fai clic su " Aggiungi un blocco di elaborazione" . Nella finestra successiva, seleziona il blocco Audio (MFCC). Successivamente, fai clic su " Aggiungi un blocco di apprendimento" e seleziona il blocco Rete neurale (Keras). Quindi fare clic su " Salva impulso" .
Nel passaggio successivo, vai alla pagina MFCC e quindi fai clic su " Genera funzioni" . Genererà blocchi MFCC per tutte le nostre finestre audio.
Dopodiché, vai alla pagina " NN Classifier" e fai clic sui tre punti nell'angolo in alto a destra delle " Impostazioni rete neurale" e seleziona " Passa alla modalità Keras (esperto)" .
Sostituisci l'originale con il codice seguente e modifica il " Livello di affidabilità minimo" in "0,70". Quindi fare clic sul pulsante " Avvia formazione" . Inizierà l'addestramento del tuo modello.
importa tensorflow come tf da tensorflow.keras.models importa Sequential da tensorflow.keras.layers importa Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D da tensorflow.keras.optimizer. import MaxNorm # model architecture 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, activation = '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))) # controlla il tasso di apprendimento opt = Adam (lr = 0.005, beta_1 = 0.9, beta_2 = 0.999) # addestra la rete neurale model.compile (loss = 'categorical_crossentropy', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, epochs = 9, validation_data = (X_test, Y_test), verbose = 2)verbose = 2)verbose = 2)
Dopo aver addestrato il modello, mostrerà le prestazioni dell'allenamento. Per me, l'accuratezza era del 96,5% e la perdita era 0,10, quindi è bene procedere.
Ora che il nostro modello di rilevamento della tosse è pronto, distribuiremo questo modello come libreria Arduino. Prima di scaricare il modello come libreria, puoi testare le prestazioni andando alla pagina " Classificazione in tempo reale ".
Vai alla pagina " Distribuzione " e seleziona " Libreria Arduino" . Ora scorri verso il basso e fai clic su "Build" per avviare il processo. Questo creerà una libreria Arduino per il tuo progetto.
Ora aggiungi la libreria nel tuo IDE Arduino. Per questo apri l'IDE di Arduino e quindi fai clic su Schizzo> Includi libreria> Aggiungi libreria ZIP.
Quindi, carica un esempio andando su File> Esempi> Il nome del tuo progetto - Edge Impulse> nano_ble33_sense_microphone.
Apporteremo alcune modifiche al codice in modo da poter emettere un suono di avviso quando Arduino rileva la tosse. Per questo, un cicalino è interfacciato con Arduino e ogni volta che rileva la tosse, il LED lampeggia tre volte.
Le modifiche vengono apportate nelle funzioni void loop () in cui stampa i valori di noise e cough. Nel codice originale, stampa insieme sia le etichette che i loro valori.
for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Salveremo i valori di rumore e tosse in diverse variabili e confronteremo i valori di rumore. Se il valore del rumore è inferiore a 0,50 significa che il valore della tosse è superiore a 0,50 e il suono verrà emesso. Sostituisci il codice originale for loop () con questo:
for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); float Data = result.classification.value; if (Dati <0,50) {Serial.print ("Rilevata tosse"); allarme(); }}
Dopo aver apportato le modifiche, carica il codice nel tuo Arduino. Aprire il monitor seriale a 115200 baud.
Quindi è così che può essere costruita una macchina per il rilevamento della tosse, non è un metodo molto efficace per trovare qualsiasi sospetto COVID19 ma può funzionare bene in alcune aree affollate.
Di seguito viene fornito un video funzionante completo con libreria e codice: