- Components necessaris
- Esquema de connexions
- Creació del conjunt de dades per a la màquina de detecció de tos
- Formació del model i ajustament del codi
COVID19 és realment una pandèmia històrica que afecta molt malament a tot el món i la gent està construint molts nous dispositius per lluitar-hi. També hem construït una màquina de sanejament automàtic i una pistola tèrmica per al cribratge de temperatura sense contacte. Avui construirem un dispositiu més per ajudar a lluitar contra el coronavirus. Es tracta d’un sistema de detecció de tos, que pot distingir entre soroll i so de tos i pot ajudar a trobar sospites de Corona. Utilitzarà tècniques d’aprenentatge automàtic per a això.
En aquest tutorial, crearem un sistema de detecció de tos mitjançant Arduino 33 BLE Sense i Edge Impulse Studio. Pot diferenciar entre el soroll de fons normal i la tos en àudio en temps real. Vam utilitzar Edge Impulse Studio per formar un conjunt de dades de mostres de tos i soroll de fons i vam crear un model TInyML altament optimitzat, que pugui detectar un so de tos en temps real.
Components necessaris
Maquinari
- Arduino 33 BLE Sense
- LED
- Jumper Wires
Programari
- Edge Impulse Studio
- IDE Arduino
Hem tractat un tutorial detallat sobre Arduino 33 BLE Sense.
Esquema de connexions
A continuació es mostra el diagrama de circuits per a la detecció de la tos mitjançant Arduino 33 BLE Sense. La peça Fritzing per a Arduino 33 BLE no estava disponible, així que vaig fer servir Arduino Nano, ja que tots dos tenen el mateix pin-out.

El cable positiu del LED està connectat al pin digital 4 d'Arduino 33 BLE sense i el cable negatiu està connectat al pin GND d'Arduino.

Creació del conjunt de dades per a la màquina de detecció de tos
Com es va esmentar anteriorment, utilitzem Edge Impulse Studio per formar el nostre model de detecció de tos. Per a això, hem de recopilar un conjunt de dades que conté les mostres de dades que ens agradaria poder reconèixer al nostre Arduino. Atès que l'objectiu és detectar la tos, haureu de recollir algunes mostres d'aquesta i algunes altres mostres per obtenir sorolls, de manera que pugui distingir entre la tos i altres sorolls.
Crearem un conjunt de dades amb dues classes "tos" i "soroll". Per crear un conjunt de dades, creeu un compte Edge Impulse, verifiqueu-lo i, a continuació, inicieu un projecte nou. Podeu carregar les mostres mitjançant el mòbil, la placa Arduino o podeu importar un conjunt de dades al vostre compte d’impulsos Edge. La manera més senzilla de carregar les mostres al vostre compte és mitjançant el telèfon mòbil. Per a això, heu de connectar el vostre mòbil amb Edge Impulse.
Per connectar el vostre telèfon mòbil, feu clic a " Dispositius " i, a continuació, feu clic a " Connecta un dispositiu nou" .

Ara, a la finestra següent, feu clic a " Utilitza el telèfon mòbil" i apareixerà un codi QR. Escaneja el codi QR amb el telèfon mòbil mitjançant Google Lens o una altra aplicació d’escaneig de codis QR.
Això connectarà el telèfon amb l’estudi Edge Impulse.

Amb el telèfon connectat a Edge Impulse Studio, ara podeu carregar les vostres mostres. Per carregar les mostres, feu clic a " Adquisició de dades" . Ara, a la pàgina d’adquisició de dades, introduïu el nom de l’etiqueta, seleccioneu el micròfon com a sensor i introduïu la longitud de la mostra. Feu clic a " Inicia el mostreig" per iniciar el mostreig d'una mostra de 40 segons. En lloc de forçar-vos a tossir, podeu utilitzar mostres de tos en línia de diferents longituds. Registre un total de 10 a 12 mostres de tos de diferents longituds.

Després de penjar les mostres de tos, configureu l'etiqueta com a "soroll" i recopileu altres 10 a 12 mostres de soroll.

Aquestes mostres són per a la formació del mòdul; en els passos següents, recollirem les dades de prova. Les dades de les proves haurien de ser com a mínim el 30% de les dades de formació, de manera que recopileu les 3 mostres de "soroll" i de 4 a 5 mostres de "tos".
En lloc de recopilar les vostres dades, podeu importar el nostre conjunt de dades al vostre compte Edge Impulse mitjançant el programa de càrrega CLI Edge Impulse.
Per instal·lar CLI Uploader, primer, descarregueu i instal·leu Node.js al vostre ordinador portàtil. Després, obriu el símbol del sistema i introduïu l'ordre següent:
npm instal·lar -g edge-impulse-cli
Ara baixeu el conjunt de dades (Enllaç de conjunt de dades) i extraieu el fitxer a la carpeta del projecte. Obriu el símbol del sistema i aneu a la ubicació del conjunt de dades i executeu les ordres següents:
edge-impulse-uploader --clean edge-impulse-uploader - formació en formació de categoria / *. json edge-impulse-uploader - formació en formació de categoria / *. cbor edge-impulse-uploader - proves de proves de categoria / *. json edge-impulse-uploader --category testing testing / *. cbor
Formació del model i ajustament del codi
Com que el conjunt de dades està a punt, ara crearem un impuls per a les dades. Per a això, aneu a la pàgina " Crea un impuls ".

Ara, a la pàgina " Crea impuls" , feu clic a " Afegeix un bloc de processament" . A la finestra següent, seleccioneu el bloc Àudio (MFCC). Després d'això, feu clic a " Afegeix un bloc d'aprenentatge" i seleccioneu el bloc Neural Network (Keras). A continuació, feu clic a " Desa l'impuls" .

Al pas següent, aneu a la pàgina MFCC i feu clic a " Genera funcions" . Generarà blocs MFCC per a totes les nostres finestres d’àudio.

Després, aneu a la pàgina "Classificador NN" i feu clic als tres punts de l'extrem superior dret de la " Configuració de la xarxa neuronal" i seleccioneu " Canvia al mode Keras (expert)" .

Substituïu l'original pel codi següent i canvieu la " Qualificació mínima de confiança" a "0,70". A continuació, feu clic al botó " Comença a entrenar ". Començarà a entrenar el vostre model.
importa tensorflow com tf des de tensorflow.keras.models importa Seqüencial de tensorflow.keras.layers importa Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D de tensorflow.keras.optimizers importa Adam de tensorflow.keras.constraints 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))) # això controla la velocitat d'aprenentatge opt = Adam (lr = 0,005; beta_1 = 0,9; beta_2 = 0,999) = 9, validació_dades = (X_test, Y_test), detallada = 2)detallat = 2)detallat = 2)
Després d'entrenar el model, mostrarà el rendiment de l'entrenament. Per a mi, la precisió va ser del 96,5% i la pèrdua del 0,10, cosa que és bo procedir.

Ara que el nostre model de detecció de la tos està a punt, el desplegarem com a biblioteca Arduino. Abans de descarregar el model com a biblioteca, podeu provar el rendiment anant a la pàgina " Classificació en directe ".
Aneu a la pàgina " Desplegament " i seleccioneu " Biblioteca Arduino" . Ara desplaceu-vos cap avall i feu clic a "Construeix" per iniciar el procés. Això crearà una biblioteca Arduino per al vostre projecte.

Ara afegiu la biblioteca al vostre IDE Arduino. Per a això, obriu l'IDE Arduino i feu clic a Sketch> Include Library> Add.ZIP library.
A continuació, carregueu un exemple anant a Fitxer> Exemples> Nom del vostre projecte: Edge Impulse> nano_ble33_sense_microphone.
Farem alguns canvis al codi perquè puguem fer sonar una alerta quan l’Arduino detecti la tos. Per a això, un brunzidor s’interface amb Arduino i, sempre que detecta la tos, el LED parpellejarà tres vegades.
Els canvis es fan a les funcions void loop () on s’imprimeixen els valors de soroll i tos. Al codi original, imprimeix les etiquetes i els seus valors junts.
per a (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Estalviarem tant els valors de soroll com de tos en diferents variables i compararem els valors de soroll. Si el valor del soroll és inferior a 0,50, significa que el valor de la tos és superior a 0,50 i produirà el so. Substituïu el codi original per loop () per aquest:
per a (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); Dades flotants = result.classification.value; if (Dades <0,50) {Serial.print ("Tos detectada"); alarm (); }}
Després de fer els canvis, pengeu el codi al vostre Arduino. Obriu el monitor sèrie a 115200 baud.

Per tant, és així com es pot construir una màquina de detecció de tos, no és un mètode molt eficaç per trobar cap sospitós de COVID19, però pot funcionar bé en una zona concorreguda.
A continuació es mostra un vídeo de treball complet amb biblioteca i codi:
