İçindekiler:
- Gereçler
- Adım 1: Devre Şeması
- Adım 2: Öksürük Tespit Makinesi için Veri Kümesi Oluşturma
- 3. Adım: Cep Telefonuna Bağlanın
- 4. Adım:
- Adım 5: Modeli Eğitmek ve Kodu Ayarlamak
- 6. Adım:
- 7. Adım: Kod
Video: Cep Boyu Öksürük Dedektörü: 7 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:16
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ı
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
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
Ş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:
Ö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:
DIY Cep Boyu DC Voltaj Ölçer: 5 Adım
DIY Cep Boyutunda DC Voltaj Ölçer: Bu talimatta, devre kontrolü için kendi başınıza piezo buzzer ile DIY cep boyutunda DC voltaj ölçerin nasıl yapıldığını göstereceğim. Tek ihtiyacınız olan temel elektronik bilgisi ve biraz zaman.Herhangi bir sorunuz veya probleminiz varsa
DIY Cep Boyu Hırsızlığa Karşı Alarm!: 3 Adım
Kendin Yap Cep Boyu Hırsızlığa Karşı Alarm !: Birisi eşyalarınızı sıkıştırıyor mu ve onun kim olduğunu bulamıyor musunuz?Birinin kim olduğunu bilmiyor musunuz?O zaman bu talimat, onları suçüstü yakalamanız içindir! Bu talimatta size cep boyutunda bir davetsiz misafir alarmının nasıl yapıldığını göstereceğim
Cep Boyu Robot Kol MeArm V0.4: 20 Adım (Resimlerle)
Cep Boyutunda Robot Kolu MeArm V0.4: MeArm, Cep Boyutunda bir Robot Koludur. Şubat 2014'te başlamış, Açık Donanım Olarak Açık Geliştirme projesi sayesinde bugünkü durumuna fevkalade hızlı bir yolculuk yapmış bir projedir. Sürüm 0.3, Instructables'ta öne çıktı
Cep Boyu Hidrojen/Oksijen Jeneratörü: 5 Adım
Cep Boyu Hidrojen/Oksijen Jeneratörü: Hidrojen ile oynamak çok eğlencelidir, ancak en verimli jeneratörler büyüktür. Küçük ve hidrojen üretebilecek bir şey yapmak istedim. Bu eğitim size cep boyutunda bir hidrojen/oksijen jeneratörünün nasıl yapıldığını gösterecektir. Maalesef öyle değil
Cep Boyu CO (karbon monoksit) Dedektörü: 5 Adım
Cep Boyu CO (karbon monoksit) Dedektörü: Adından da anlaşılacağı gibi, havadaki Karbonmonoksiti algılamak için kullanılan cep boyutunda bir CO dedektörüdür, amacımız bu cihazı taşınabilir ve cep boyutuna sığacak şekilde yapmaktı. Sanayileşmeden kaynaklanan hava kirliliği sorunu ev