- Componente necesare
- Diagrama circuitului
- Crearea setului de date pentru aparatul de detectare a tusei
- Instruirea modelului și modificarea codului
COVID19 este într-adevăr o pandemie istorică care afectează întreaga lume foarte rău și oamenii construiesc o mulțime de dispozitive noi pentru a lupta cu ea. De asemenea, am construit o mașină de igienizare automată și un pistol termic pentru screeningul temperaturii fără contact. Astăzi vom construi încă un dispozitiv pentru a ajuta la lupta cu Coronavirus. Este un sistem de detectare a tusei, care poate distinge între zgomot și sunetul tusei și poate ajuta la găsirea suspectului Corona. Va folosi tehnici de învățare automată pentru asta.
În acest tutorial, vom construi un sistem de detectare a tusei folosind Arduino 33 BLE Sense și Edge Impulse Studio. Poate diferenția între zgomotul normal de fundal și tusea în timp real. Am folosit Edge Impulse Studio pentru a instrui un set de date de tuse și probe de zgomot de fundal și pentru a construi un model TInyML extrem de optimizat, care poate detecta un sunet de tuse în timp real.
Componente necesare
Hardware
- Arduino 33 BLE Sense
- LED
- Sârme jumper
Software
- Edge Impulse Studio
- IDE Arduino
Am acoperit un tutorial detaliat despre Arduino 33 BLE Sense.
Diagrama circuitului
Diagrama circuitului pentru detectarea tusei folosind Arduino 33 BLE Sense este prezentată mai jos. Partea Fritzing pentru Arduino 33 BLE nu era disponibilă, așa că am folosit Arduino Nano deoarece ambele au același pin-out.
Conductorul pozitiv al LED-ului este conectat la pinul digital 4 al Arduino 33 BLE sense iar cablul negativ este conectat la pinul GND al Arduino.
Crearea setului de date pentru aparatul de detectare a tusei
După cum sa menționat mai devreme, folosim Edge Impulse Studio pentru a ne antrena modelul de detectare a tusei. Pentru aceasta, trebuie să colectăm un set de date care conține eșantioane de date pe care am dori să le putem recunoaște pe Arduino. Deoarece scopul este detectarea tusei, va trebui să colectați câteva mostre din aceasta și alte probe pentru zgomot, astfel încât să poată distinge între tuse și alte zgomote.
Vom crea un set de date cu două clase „tuse” și „zgomot”. Pentru a crea un set de date, creați un cont Edge Impulse, verificați-vă contul și apoi începeți un nou proiect. Puteți încărca eșantioanele folosind telefonul mobil, placa Arduino sau puteți importa un set de date în contul dvs. impuls de margine. Cel mai simplu mod de a încărca probele în contul dvs. este prin utilizarea telefonului mobil. Pentru asta, trebuie să vă conectați telefonul mobil cu Edge Impulse.
Pentru a vă conecta telefonul mobil, faceți clic pe „ Dispozitive ”, apoi faceți clic pe „ Conectați un dispozitiv nou” .
Acum, în fereastra următoare, faceți clic pe „ Utilizați telefonul mobil” și va apărea un cod QR. Scanați codul QR cu telefonul mobil folosind Google Lens sau altă aplicație de scanare a codului QR.
Acest lucru vă va conecta telefonul la studioul Edge Impulse.
Cu telefonul conectat la Edge Impulse Studio, puteți încărca acum mostrele. Pentru a încărca mostrele, faceți clic pe „ Achiziție date” . Acum, pe pagina de achiziție de date, introduceți numele etichetei, selectați microfonul ca senzor și introduceți lungimea eșantionului. Faceți clic pe „ Începe eșantionarea” , pentru a începe eșantionarea unui eșantion de 40 sec. În loc să te forțezi să tuși, poți folosi probe de tuse online de diferite lungimi. Înregistrați în total 10 până la 12 probe de tuse de diferite lungimi.
După încărcarea probelor de tuse, setați acum eticheta la „zgomot” și colectați alte 10 până la 12 probe de zgomot.
Aceste mostre sunt destinate instruirii modulului, în următorii pași, vom colecta datele de testare. Datele de testare trebuie să fie cel puțin 30% din datele de antrenament, deci colectați cele 3 mostre de „zgomot” și 4 până la 5 mostre de „tuse”.
În loc să vă colectați datele, puteți importa setul nostru de date în contul dvs. Edge Impulse folosind Edge Impulse CLI Uploader.
Pentru a instala CLI Uploader, mai întâi, descărcați și instalați Node.js pe laptop. După aceea deschideți promptul de comandă și introduceți comanda de mai jos:
npm instalează -g edge-impuls-cli
Acum descărcați setul de date (Link set de date) și extrageți fișierul din folderul proiectului. Deschideți promptul de comandă și navigați la locația setului de date și rulați comenzile de mai jos:
edge-impuls-uploader --curățare edge-impuls-uploader - instruire de formare a categoriilor / *. json edge-impuls-uploader - instruire de formare a categoriilor / *. cbor edge-impuls-uploader - testare a testelor de categorie / *. json edge-impuls-uploader --category testing testing / *. cbor
Instruirea modelului și modificarea codului
Deoarece setul de date este gata, acum vom crea un impuls pentru date. Pentru aceasta, accesați pagina „ Creați impuls ”.
Acum, pe pagina „ Creați impuls” , faceți clic pe „ Adăugați un bloc de procesare” . În fereastra următoare, selectați blocul Audio (MFCC). După aceea, faceți clic pe „ Adăugați un bloc de învățare” și selectați blocul Neural Network (Keras). Apoi faceți clic pe „ Salvați impulsul” .
În pasul următor, accesați pagina MFCC și apoi faceți clic pe „ Generați caracteristici” . Acesta va genera blocuri MFCC pentru toate ferestrele noastre audio.
După aceea, accesați pagina „ Clasificator NN” și faceți clic pe cele trei puncte din colțul din dreapta sus al „ Setărilor rețelei neuronale” și selectați „ Comutare la modul Keras (expert)” .
Înlocuiți originalul cu următorul cod și schimbați „ Evaluarea minimă de încredere” la „0,70”. Apoi faceți clic pe butonul „ Începeți antrenamentul” . Va începe să vă pregătiți modelul.
import tensorflow ca tf din tensorflow.keras.models import Secvențial din tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D din tensorflow.keras.optimizers import Adam din 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))) # aceasta controlează rata de învățare opt = Adam (lr = 0,005; beta_1 = 0,9; beta_2 = 0,999) = 9, validare_date = (X_test, Y_test), detaliat = 2)detaliat = 2)detaliat = 2)
După antrenamentul modelului, acesta va arăta performanța antrenamentului. Pentru mine, precizia a fost de 96,5%, iar pierderea a fost de 0,10, ceea ce este bine să procedăm.
Acum, deoarece modelul nostru de detectare a tusei este gata, vom implementa acest model ca bibliotecă Arduino. Înainte de a descărca modelul ca bibliotecă, puteți testa performanța accesând pagina „ Clasificare live ”.
Accesați pagina „ Deployment ” și selectați „ Arduino Library” . Acum derulați în jos și faceți clic pe „Construiți” pentru a începe procesul. Aceasta va crea o bibliotecă Arduino pentru proiectul dvs.
Acum adăugați biblioteca în IDE-ul dvs. Arduino. Pentru aceasta deschideți IDE-ul Arduino și apoi faceți clic pe Sketch> Include Library> Add.ZIP library.
Apoi, încărcați un exemplu accesând Fișier> Exemple> Numele proiectului dvs. - Edge Impulse> nano_ble33_sense_microphone.
Vom face câteva modificări în cod, astfel încât să putem emite un sunet de alertă atunci când Arduino detectează tuse. Pentru aceasta, un buzzer este interfațat cu Arduino și ori de câte ori detectează tuse, LED-ul va clipi de trei ori.
Modificările sunt efectuate în funcțiile void loop () în care se imprimă valorile de zgomot și tuse. În codul original, imprimă atât etichetele, cât și valorile lor împreună.
for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Vom salva atât valorile zgomotului, cât și valorile tusei în diferite variabile și vom compara valorile zgomotului. Dacă valoarea zgomotului scade sub 0,50, înseamnă că valoarea tusei este mai mare de 0,50 și va emite sunetul. Înlocuiți codul original pentru loop () cu acesta:
for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); date plutitoare = result.classification.value; if (Date <0,50) {Serial.print ("Tuse detectată"); alarma(); }}
După efectuarea modificărilor, încărcați codul în Arduino. Deschideți monitorul serial la 115200 baud.
Deci, astfel se poate construi o mașină de detectare a tusei, nu este o metodă foarte eficientă pentru a găsi vreun suspect COVID19, dar poate funcționa frumos într-o zonă aglomerată.
Un videoclip complet de lucru cu bibliotecă și cod este prezentat mai jos: