İçindekiler:

Cep Boyu Öksürük Dedektörü: 7 Adım
Cep Boyu Öksürük Dedektörü: 7 Adım

Video: Cep Boyu Öksürük Dedektörü: 7 Adım

Video: Cep Boyu Öksürük Dedektörü: 7 Adım
Video: Adım at para kazan hîlesi ( Arapların taktiği 😅 ) 2024, Kasım
Anonim
Cep Boyu Öksürük Dedektörü
Cep Boyu Öksürük Dedektörü

COVID19 gerçekten tüm dünyayı çok kötü etkileyen tarihi bir salgın ve insanlar onunla savaşmak için birçok yeni cihaz inşa ediyor. Ayrıca Temassız sıcaklık taraması için otomatik bir sanitizasyon makinesi ve Termal Tabanca kurduk. Bugün Coronavirus ile savaşmaya yardımcı olacak bir cihaz daha inşa edeceğiz. Gürültü ile öksürük sesini ayırt edebilen ve Corona şüphelisinin bulunmasına yardımcı olabilen bir öksürük algılama sistemidir. Bunun için makine öğrenimi tekniklerini kullanacak.

Bu eğitimde Arduino 33 BLE Sense ve Edge Impulse Studio kullanarak bir Öksürük Algılama sistemi oluşturacağız. Gerçek zamanlı seste normal arka plan gürültüsü ile öksürüğü ayırt edebilir. Öksürük ve arka plan gürültü örneklerinden oluşan bir veri kümesini eğitmek ve bir Öksürük sesini gerçek zamanlı olarak algılayabilen yüksek düzeyde optimize edilmiş bir TInyML modeli oluşturmak için Edge Impulse Studio'yu kullandık.

Gereçler

Donanım

  • Arduino 33 BLE Sense
  • LEDJumper
  • teller

Yazılım

  • Edge Impulse Studio
  • Arduino IDE'si

Adım 1: Devre Şeması

Devre şeması
Devre şeması
Devre şeması
Devre şeması

Arduino 33 BLE Sense Kullanılarak Öksürük Tespiti için Devre Şeması yukarıda verilmiştir. Arduino 33 BLE için fritzing parçası mevcut değildi, bu yüzden her ikisi de aynı pin çıkışına sahip olduğu için Arduino Nano'yu kullandım.

LED'in Pozitif ucu, Arduino 33 BLE sense'nin dijital pin 4'üne ve Negatif uç, Arduino'nun GND pinine bağlanır.

Adım 2: Öksürük Tespit Makinesi için Veri Kümesi Oluşturma

Öksürük Tespit Makinesi için Veri Kümesi Oluşturma
Öksürük Tespit Makinesi için Veri Kümesi Oluşturma

Daha önce de belirtildiği gibi, öksürük algılama modelimizi eğitmek için Edge Impulse Studio kullanıyoruz. Bunun için Arduino'muzda tanımak istediğimiz veri örneklerine sahip bir veri seti toplamamız gerekiyor. Amaç öksürüğü tespit etmek olduğundan, Öksürük ve diğer Gürültüleri ayırt edebilmesi için bunun bazı örneklerini ve gürültü için bazı diğer örnekleri toplamanız gerekir. “Öksürük” ve “gürültü” olmak üzere iki sınıflı bir veri seti oluşturacağız. Bir veri kümesi oluşturmak için bir Edge Impulse hesabı oluşturun, hesabınızı doğrulayın ve ardından yeni bir proje başlatın. Cep telefonunuzu, Arduino kartınızı kullanarak örnekleri yükleyebilir veya bir veri setini Edge impuls hesabınıza aktarabilirsiniz. Örnekleri hesabınıza yüklemenin en kolay yolu cep telefonunuzu kullanmaktır. Bunun için cep telefonunuzu Edge Impulse ile bağlamanız gerekir. Cep telefonunuzu bağlamak için, "Cihazlar"a ve ardından "Yeni Bir Cihaz Bağla"ya tıklayın.

3. Adım: Cep Telefonuna Bağlanın

Cep Telefonuna Bağlan
Cep Telefonuna Bağlan

Şimdi bir sonraki pencerede 'Cep Telefonunuzu Kullanın' seçeneğine tıklayın, bir QR kodu görünecektir. Google Lens veya diğer QR kod tarayıcı uygulamasını kullanarak QR kodunu Cep Telefonunuzla tarayın.

Bu, telefonunuzu Edge Impulse stüdyosuna bağlayacaktır.

Telefonunuz Edge Impulse Studio ile bağlıyken, artık örneklerinizi yükleyebilirsiniz. Örnekleri yüklemek için "Veri toplama"ya tıklayın. Şimdi Veri toplama sayfasında etiket adını girin, mikrofonu sensör olarak seçin ve örnek uzunluğunu girin. 40 Saniyelik bir numuneyi örneklemeye başlamak için "Örneklemeyi başlat"a tıklayın. Kendinizi öksürmeye zorlamak yerine, farklı uzunluklardaki çevrimiçi öksürük örneklerini kullanabilirsiniz. Farklı uzunluklarda toplam 10 ila 12 öksürük örneği kaydedin.

4. Adım:

resim
resim
resim
resim

Öksürük örneklerini yükledikten sonra, şimdi etiketi "gürültü" olarak ayarlayın ve 10 ila 12 gürültü örneği daha toplayın.

Bu örnekler modülün Eğitimi içindir, sonraki adımlarda Test Verilerini toplayacağız. Test verileri, eğitim verilerinin en az %30'u olmalıdır, bu nedenle 3 'gürültü' örneği ve 4 ila 5 'öksürük' örneği toplayın. Verilerinizi toplamak yerine, Edge'i kullanarak veri setimizi Edge Impulse hesabınıza aktarabilirsiniz. Dürtü CLI Yükleyici. CLI Uploader'ı kurmak için önce Node.js'yi indirip dizüstü bilgisayarınıza kurun. Bundan sonra komut istemini açın ve aşağıdaki komutu girin:

npm install -g edge-impulse-cli

Şimdi veri kümesini (Veri Kümesi Bağlantısı) indirin ve dosyayı proje klasörünüze çıkarın. Komut istemini açın ve veri kümesi konumuna gidin ve aşağıdaki komutları çalıştırın:

edge-impulse-uploader --cleanedge-impulse-uploader --category training training/*.json

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

edge-impulse-uploader --kategori testi testi/*.json edge-impulse-uploader --category testi testi/*.cbor

Adım 5: Modeli Eğitmek ve Kodu Ayarlamak

Veri seti hazır olduğuna göre şimdi veri için bir dürtü yaratacağız. Bunun için "Dürtü oluştur" sayfasına gidin.

Şimdi 'Dürtü oluştur' sayfasında, 'İşleme bloğu ekle'yi tıklayın. Bir sonraki pencerede Ses (MFCC) bloğunu seçin. Bundan sonra 'Öğrenme bloğu ekle'yi tıklayın ve Sinir Ağı (Keras) bloğunu seçin. Ardından 'Dürtüyü Kaydet'e tıklayın.

Bir sonraki adımda, MFCC sayfasına gidin ve ardından 'Özellikler Oluştur'a tıklayın. Tüm ses pencerelerimiz için MFCC blokları oluşturacaktır.

Bundan sonra 'NN Sınıflandırıcı' sayfasına gidin ve 'Sinir Ağı ayarları'nın sağ üst köşesindeki üç noktaya tıklayın ve 'Keras (uzman) moduna geç' seçeneğini seçin.

Orijinali aşağıdaki kodla değiştirin ve "Minimum güven derecesini" "0,70" olarak değiştirin. Ardından 'Eğitime başla' düğmesine tıklayın. Modelinizi eğitmeye başlayacaktır.

tensorflow.keras.models'den tf olarak içe aktar MaxNorm # model mimarisi modeli = 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, 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))) # bu öğrenme oranını kontrol eder opt = Adam(lr=0.005, beta_ 1=0.9, beta_2=0.999) # sinir ağını eğit model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['doğruluk']) model.fit(X_train, Y_train, batch_size=32, epochs=9, validation_data=(X_test, Y_test), ayrıntılı=2)

6. Adım:

Modeli eğittikten sonra, eğitim performansını gösterecektir. Benim için doğruluk %96,5 ve kayıp 0,10 idi, bu da ilerlemek için iyi.

Artık öksürük algılama modelimiz hazır olduğuna göre bu modeli Arduino kütüphanesi olarak dağıtacağız. Modeli kitaplık olarak indirmeden önce 'Canlı Sınıflandırma' sayfasına giderek performansını test edebilirsiniz. "Dağıtım" sayfasına gidin ve "Arduino Kütüphanesi"ni seçin. Şimdi aşağı kaydırın ve işlemi başlatmak için 'Oluştur'a tıklayın. Bu, projeniz için bir Arduino kütüphanesi oluşturacaktır.

Şimdi kütüphaneyi Arduino IDE'nize ekleyin. Bunun için Arduino IDE'yi açın ve ardından Sketch > Include Library > Add. ZIP library'ye tıklayın. Ardından Dosya > Örnekler > Proje adınız - Edge Impulse > nano_ble33_sense_microphone'a giderek bir örnek yükleyin. Arduino öksürük algıladığında uyarı sesi çıkarabilmemiz için kodda bazı değişiklikler yapacağız. Bunun için Arduino ile bir buzzer arabirimi kurulur ve öksürük algıladığında LED üç kez yanıp söner. Değişiklikler, gürültü ve öksürük değerlerini yazdırdığı void loop() işlevlerinde yapılır. Orijinal kodda hem etiketleri hem de değerlerini birlikte yazdırıyor. for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) { ei_printf(" %s: %.5f\n", sonuç.sınıflandırma[ix].label, sonuç.sınıflandırma[ix].değer); }Gürültü ve öksürük değerlerini farklı değişkenlere kaydedip gürültü değerlerini karşılaştıracağız. Gürültü değeri 0,50'nin altına düşerse öksürük 0,50'den fazladır ve ses çıkarır. Orijinal for loop() kodunu şununla değiştirin: for (size_t ix = 1; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) { Serial.print(result.classification[ix].value); float Veri = sonuç.sınıflandırma[ix].değer; if (Veri < 0,50){ Serial.print("Öksürük Algılandı"); alarm(); } }Değişiklikleri yaptıktan sonra kodu Arduino'nuza yükleyin. 115200 baud'da seri monitörü açın.

Öksürük tespit makinesi bu şekilde yapılabilir, herhangi bir COVID19 şüphelisini bulmak için çok etkili bir yöntem değildir, ancak bazı kalabalık alanlarda iyi çalışabilir.

7. Adım: Kod

Lütfen ek dosyayı bulun, Ve eğer beğendiyseniz aşağıdaki yarışmada bana oy vermeyi unutmayın.

Önerilen: