Spisu treści:

Kieszonkowy wykrywacz kaszlu: 7 kroków
Kieszonkowy wykrywacz kaszlu: 7 kroków

Wideo: Kieszonkowy wykrywacz kaszlu: 7 kroków

Wideo: Kieszonkowy wykrywacz kaszlu: 7 kroków
Wideo: Kieszonkowy wykrywacz podstępów 2024, Listopad
Anonim
Kieszonkowy wykrywacz kaszlu
Kieszonkowy wykrywacz kaszlu

COVID19 to tak naprawdę historyczna pandemia, która bardzo mocno dotyka cały świat i ludzie budują wiele nowych urządzeń, aby z nią walczyć. Zbudowaliśmy również automatyczną maszynę do dezynfekcji i pistolet termiczny do bezdotykowego badania temperatury. Dziś zbudujemy jeszcze jedno urządzenie, które pomoże w walce z koronawirusem. Jest to system wykrywania kaszlu, który potrafi odróżnić hałas od kaszlu i może pomóc w znalezieniu podejrzanego o koronę. Wykorzysta do tego techniki uczenia maszynowego.

W tym samouczku zbudujemy system wykrywania kaszlu przy użyciu Arduino 33 BLE Sense i Edge Impulse Studio. Potrafi odróżnić normalny hałas w tle od kaszlu w dźwięku w czasie rzeczywistym. Wykorzystaliśmy Edge Impulse Studio do przeszkolenia zestawu danych próbek kaszlu i szumu tła oraz zbudowania wysoce zoptymalizowanego modelu TInyML, który może wykrywać dźwięk kaszlu w czasie rzeczywistym.

Kieszonkowe dzieci

Sprzęt komputerowy

  • Arduino 33 BLE Sense
  • LEDZworka
  • Przewody

Oprogramowanie

  • Edge Impuls Studio
  • IDE Arduino

Krok 1: Schemat obwodu

Schemat obwodu
Schemat obwodu
Schemat obwodu
Schemat obwodu

Schemat obwodu do wykrywania kaszlu za pomocą Arduino 33 BLE Sense podano powyżej. Część Fritzing dla Arduino 33 BLE nie była dostępna, więc użyłem Arduino Nano, ponieważ oba mają takie same piny.

Dodatni przewód diody LED jest podłączony do cyfrowego styku 4 czujnika Arduino 33 BLE, a ujemny przewód jest podłączony do styku GND Arduino.

Krok 2: Tworzenie zestawu danych dla urządzenia do wykrywania kaszlu

Tworzenie zestawu danych dla urządzenia do wykrywania kaszlu
Tworzenie zestawu danych dla urządzenia do wykrywania kaszlu

Jak wspomniano wcześniej, używamy Edge Impulse Studio do trenowania naszego modelu wykrywania kaszlu. W tym celu musimy zebrać zestaw danych zawierający próbki danych, które chcielibyśmy rozpoznać na naszym Arduino. Ponieważ celem jest wykrycie kaszlu, musisz zebrać kilka próbek tego i kilka innych próbek hałasu, aby mógł odróżnić kaszel od innych dźwięków. Stworzymy zbiór danych z dwiema klasami „kaszel” i „hałas”. Aby utworzyć zestaw danych, utwórz konto Edge Impulse, zweryfikuj swoje konto, a następnie rozpocznij nowy projekt. Próbki można załadować za pomocą telefonu komórkowego, płytki Arduino lub zaimportować zestaw danych na konto Edge Impuls. Najłatwiejszym sposobem załadowania próbek na konto jest użycie telefonu komórkowego. W tym celu musisz połączyć swój telefon z Edge Impulse. Aby podłączyć telefon komórkowy, kliknij „Urządzenia”, a następnie „Podłącz nowe urządzenie”.

Krok 3: Połącz się z telefonem komórkowym

Połącz z telefonem komórkowym
Połącz z telefonem komórkowym

Teraz w następnym oknie kliknij „Użyj telefonu komórkowego”, a pojawi się kod QR. Zeskanuj kod QR telefonem komórkowym za pomocą Google Lens lub innej aplikacji do skanowania kodów QR.

To połączy Twój telefon ze studiem Edge Impulse.

Po połączeniu telefonu z Edge Impulse Studio możesz teraz załadować swoje próbki. Aby załadować próbki, kliknij „Akwizycja danych”. Teraz na stronie akwizycji danych wprowadź nazwę etykiety, wybierz mikrofon jako czujnik i wprowadź długość próbki. Kliknij „Rozpocznij próbkowanie”, aby rozpocząć próbkowanie 40-sekundowej próbki. Zamiast zmuszać się do kaszlu, możesz skorzystać z internetowych próbek kaszlu o różnej długości. Zapisz w sumie od 10 do 12 próbek kaszlu o różnej długości.

Krok 4:

Obraz
Obraz
Obraz
Obraz

Po przesłaniu próbek kaszlu ustaw teraz etykietę na „szum” i zbierz kolejne 10 do 12 próbek hałasu.

Te próbki służą do Treningu modułu, w kolejnych krokach zbierzemy dane testowe. Dane testowe powinny stanowić co najmniej 30% danych treningowych, więc zbierz 3 próbki „hałasu” i 4 do 5 próbek „kaszel”. Zamiast zbierać dane, możesz zaimportować nasz zestaw danych do swojego konta Edge Impulse za pomocą Edge Impulsowy program do przesyłania CLI. Aby zainstalować program CLI Uploader, najpierw pobierz i zainstaluj Node.js na swoim laptopie. Następnie otwórz wiersz polecenia i wprowadź poniższe polecenie:

npm install -g edge-impulse-cli

Teraz pobierz zestaw danych (łącze zestawu danych) i wyodrębnij plik w folderze projektu. Otwórz wiersz polecenia i przejdź do lokalizacji zestawu danych i uruchom poniższe polecenia:

edge-impulse-uploader --cleanedge-impulse-uploader --kategoria szkolenia szkolenia/*.json

edge-impulse-uploader --category training training/*.cbor

edge-impulse-uploader --category testing testing/*.json edge-impulse-uploader --category testing testing/*.cbor

Krok 5: Szkolenie modelu i poprawianie kodu

Ponieważ zbiór danych jest gotowy, teraz stworzymy impuls dla danych. W tym celu przejdź do strony „Utwórz impuls”.

Teraz na stronie „Utwórz impuls” kliknij „Dodaj blok przetwarzania”. W następnym oknie wybierz blok Audio (MFCC). Następnie kliknij „Dodaj blok nauki” i wybierz blok Sieć neuronowa (Keras). Następnie kliknij „Zapisz impuls”.

W następnym kroku przejdź do strony MFCC, a następnie kliknij „Generuj funkcje”. Wygeneruje bloki MFCC dla wszystkich naszych okien audio.

Następnie przejdź do strony „NN Classifier” i kliknij trzy kropki w prawym górnym rogu „Ustawienia sieci neuronowej” i wybierz „Przełącz na tryb Keras (ekspert)”.

Zastąp oryginał następującym kodem i zmień „Minimalny stopień ufności” na „0,70”. Następnie kliknij przycisk „Rozpocznij szkolenie”. Rozpocznie trenowanie twojego modelu.

import tensorflow jako tfz tensorflow.keras.models import Sequential z tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D z tensorflow.keras.optimizersconflow import Adams MaxNorm # model architektury 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, aktywacja='relu', padding='same', kernel_constraint=MaxNorm(3)))) model.add(AveragePooling2D(pool_size=2, padding='ta sama')) model.add(Conv2D(5, kernel_size=5, aktywacja='relu', padding='ta sama', kernel_constraint=MaxNorm(3))) model.add(AveragePooling2D(pool_size=2, padding='same')) model.add(Flatten()) model.add(Dense(klasy, aktywacja='softmax', name='y_pred', kernel_constraint=MaxNorm (3))) # kontroluje współczynnik uczenia opt = Adam(lr=0,005, beta_ 1=0.9, beta_2=0.999) # trenuj sieć neuronową 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), pełny=2)

Krok 6:

Po wytrenowaniu modelu pokaże on wydajność uczenia. Dla mnie dokładność wynosiła 96,5%, a strata 0,10, więc dobrze jest kontynuować.

Teraz, gdy nasz model wykrywania kaszlu jest gotowy, wdrożymy ten model jako bibliotekę Arduino. Przed pobraniem modelu jako biblioteki możesz przetestować wydajność, przechodząc do strony „Klasyfikacja na żywo”. Przejdź do strony „Wdrożenie” i wybierz „Biblioteka Arduino”. Teraz przewiń w dół i kliknij „Buduj”, aby rozpocząć proces. To zbuduje bibliotekę Arduino dla twojego projektu.

Teraz dodaj bibliotekę w swoim Arduino IDE. W tym celu otwórz Arduino IDE, a następnie kliknij Szkic> Dołącz bibliotekę> Biblioteka Add. ZIP. Następnie załaduj przykład, przechodząc do Plik > Przykłady > Nazwa Twojego projektu - Edge Impulse > nano_ble33_sense_microphone. Wprowadzimy pewne zmiany w kodzie, aby móc wydać dźwięk ostrzegawczy, gdy Arduino wykryje kaszel. W tym celu brzęczyk jest połączony z Arduino i za każdym razem, gdy wykryje kaszel, dioda LED zamiga trzy razy. Zmiany są wprowadzane w funkcjach void loop(), w których wypisuje wartości hałasu i kaszlu. W oryginalnym kodzie drukuje razem zarówno etykiety, jak i ich wartości. for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) { ei_printf(" %s: %.5f\n", wynik.klasyfikacja[ix].etykieta, wynik.klasyfikacja[ix].wartość); } Zamierzamy zapisać wartości hałasu i kaszlu w różnych zmiennych i porównać wartości hałasu. Jeśli wartość hałasu spadnie poniżej 0,50, oznacza to, że wartość kaszlu jest większa niż 0,50 i wyda dźwięk. Zastąp oryginalny kod for loop() następującym: for (size_t ix = 1; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) { Serial.print(result.classification[ix].value); float Dane = wynik.klasyfikacja[ix].wartość; if (Dane < 0.50){ Serial.print("Wykryto kaszel"); alarm(); } } Po wprowadzeniu zmian wgraj kod do swojego Arduino. Otwórz monitor szeregowy z prędkością 115200 bodów.

Tak więc można zbudować maszynę do wykrywania kaszlu, nie jest to bardzo skuteczna metoda na znalezienie podejrzanego o COVID19, ale może działać dobrze w zatłoczonym miejscu.

Krok 7: Kod

Proszę znaleźć załączony plik, A jeśli Ci się spodobało, nie zapomnij zagłosować na mnie w poniższym konkursie.

Zalecana: