Mündəricat:
- Təchizat
- Addım 1: Dövrə Şeması
- Addım 2: Öskürək Algılama Maşını üçün Məlumat Toplusu Yaratmaq
- Addım 3: Mobil telefona qoşulun
- Addım 4:
- Addım 5: Modeli öyrətmək və Kodu Tweaking
- Addım 6:
- Addım 7: Kod
Video: Cib Ölçülü Öskürək Detektoru: 7 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:43
COVID19 həqiqətən də bütün dünyanı çox pis təsir edən tarixi bir pandemiyadır və insanlar bununla mübarizə aparmaq üçün bir çox yeni cihaz qurur. Əlaqəsiz temperatur taraması üçün avtomatik bir dezinfeksiya maşını və Termal Tabanca da qurduq. Bu gün koronavirusla mübarizə aparmaq üçün daha bir cihaz quracağıq. Səs və öskürək səsini ayırd edə bilən və Corona şübhəlisinin tapılmasına kömək edə bilən öskürək aşkarlama sistemidir. Bunun üçün maşın öyrənmə üsullarından istifadə edəcək.
Bu təlimatda Arduino 33 BLE Sense və Edge Impulse Studio istifadə edərək Öskürək Algılama sistemi quracağıq. Normal fon səs-küyü ilə öskürək arasında real vaxtdakı səs fərqləndirə bilər. Edge Impulse Studio-dan öskürək və arxa səs-küy nümunələri toplusunu öyrətmək və real vaxtda öskürək səsini aşkar edə biləcək yüksək dərəcədə optimallaşdırılmış TInyML modeli qurmaq üçün istifadə etdik.
Təchizat
Avadanlıq
- Arduino 33 BLE Sense
- LEDJumper
- Tellər
Proqram təminatı
- Edge Impulse Studiyası
- Arduino IDE
Addım 1: Dövrə Şeması
Arduino 33 BLE Sense istifadə edərək öskürəyin aşkarlanması üçün dövrə diaqramı yuxarıda verilmişdir. Arduino 33 BLE üçün dondurucu hissə mövcud deyildi, buna görə də Arduino Nano'dan istifadə etdim, çünki hər ikisi eyni çıxışı var.
LED -in pozitiv qurğusu Arduino 33 BLE hissəsinin rəqəmsal pininə 4, Mənfi aparat isə Arduinonun GND pininə bağlıdır.
Addım 2: Öskürək Algılama Maşını üçün Məlumat Toplusu Yaratmaq
Daha əvvəl də qeyd edildiyi kimi, öskürək aşkarlama modelimizi öyrətmək üçün Edge Impulse Studio -dan istifadə edirik. Bunun üçün Arduino -da tanımaq istədiyimiz məlumat nümunələrinə malik bir məlumat toplamaq məcburiyyətindəyik. Məqsəd öskürəyi aşkar etmək olduğundan, öskürək və digər səsləri ayırd edə bilmək üçün bunun nümunələrini və bəzi digər nümunələri səs -küy üçün toplamalısınız. "Öskürək" və "səs -küy" iki sinifdən ibarət bir verilənlər bazası yaradacağıq. Bir verilənlər bazası yaratmaq üçün bir Edge Impulse hesabı yaradın, hesabınızı doğrulayın və sonra yeni bir layihəyə başlayın. Nümunələri mobil telefonunuzdan, Arduino lövhənizdən istifadə edərək yükləyə bilərsiniz və ya bir məlumat dəstini kənar impuls hesabınıza idxal edə bilərsiniz. Nümunələri hesabınıza yükləməyin ən asan yolu cib telefonunuzdan istifadə etməkdir. Bunun üçün cib telefonunuzu Edge Impulse ilə bağlamalısınız. Cib telefonunuzu bağlamaq üçün "Cihazlar" ı və sonra "Yeni Bir Cihaz Bağlayın" düyməsini basın.
Addım 3: Mobil telefona qoşulun
İndi növbəti pəncərədə 'Cib Telefonunuzdan İstifadə et' düyməsini basın və bir QR kodu görünəcək. Google Lens və ya digər QR kodu skaner tətbiqindən istifadə edərək QR kodunu Cib Telefonunuzla tarayın.
Bu telefonunuzu Edge Impulse studiyası ilə birləşdirəcək.
Telefonunuzu Edge Impulse Studio ilə əlaqələndirərək artıq nümunələrinizi yükləyə bilərsiniz. Nümunələri yükləmək üçün "Məlumat əldə etmə" düyməsini basın. İndi Məlumat əldə etmə səhifəsində etiket adını daxil edin, mikrofonu sensor olaraq seçin və nümunə uzunluğunu daxil edin. 40 Saniyəlik bir nümunə götürməyə başlamaq üçün 'Nümunə götürməyə başla' düyməsini basın. Özünüzü öskürməyə məcbur etmək əvəzinə, müxtəlif uzunluqdakı onlayn öskürək nümunələrindən istifadə edə bilərsiniz. Müxtəlif uzunluqdakı cəmi 10-12 öskürək nümunəsi yazın.
Addım 4:
Öskürək nümunələrini yüklədikdən sonra etiketi 'səs -küy' olaraq təyin edin və başqa 10-12 səs nümunəsi toplayın.
Bu nümunələr modulun öyrədilməsi üçündür, növbəti addımlarda Test məlumatlarını toplayacağıq. Test məlumatları təlim məlumatlarının ən azı 30% -ni təşkil etməlidir, buna görə də 3 "səs -küy" və 4 -dən 5 -ə qədər "öskürək" nümunələrini toplayın. Məlumatlarınızı toplamaq əvəzinə Edge istifadə edərək məlumat bazamızı Edge Impulse hesabınıza idxal edə bilərsiniz. Impuls CLI yükləyicisi. CLI Yükləyicisini qurmaq üçün əvvəlcə Node.js faylını dizüstü kompüterinizə yükləyin və quraşdırın. Bundan sonra əmr satırını açın və aşağıdakı əmri daxil edin:
npm quraşdırma -g edge-impulse-cli
İndi verilənlər bazasını (Dataset Link) yükləyin və faylı layihə qovluğunuzdan çıxarın. Əmr əmrini açın və verilənlər bazasının yerləşdiyi yerə gedin və aşağıdakı əmrləri yerinə yetirin:
edge-impulse-uploader --cleanedge-impulse-uploader-kateqoriya təhsili təhsili/*. json
edge-impulse-uploader-kateqoriya təhsili təhsili/*. cbor
edge-impulse-uploader-kateqoriya test sınaqları/*. json edge-impulse-uploader-kateqoriya test sınaqları/*. cbor
Addım 5: Modeli öyrətmək və Kodu Tweaking
Veri dəsti hazır olduğu üçün indi məlumatlar üçün bir təkan yaradacağıq. Bunun üçün 'İmpuls yarat' səhifəsinə keçin.
İndi 'İmpuls yarat' səhifəsində 'İşləmə bloku əlavə et' düyməsini basın. Növbəti pəncərədə Audio (MFCC) blokunu seçin. Bundan sonra 'Öyrənmə bloku əlavə et' düyməsini basın və Sinir Şəbəkəsi (Keras) blokunu seçin. Sonra 'İmpulsu Saxla' düyməsini basın.
Növbəti addımda MFCC səhifəsinə keçin və sonra 'Xüsusiyyətlər Yarat' düyməsini basın. Bütün səs pəncərələrimiz üçün MFCC blokları yaradacaq.
Bundan sonra 'NN təsnifatçısı' səhifəsinə gedin və 'Sinir Şəbəkəsi parametrləri' nin sağ üst küncündəki üç nöqtəni vurun və 'Keras (mütəxəssis) rejiminə keçin' seçin.
Orijinalı aşağıdakı kodla əvəz edin və "Minimum güvən reytinqi" ni "0.70" olaraq dəyişdirin. Sonra 'Təlimə başla' düyməsini basın. Modelinizi öyrətməyə başlayacaq.
tensorflow.keras.models kimi tensorflow idxal edin tensorflow.keras.layers -dən ardıcıl idxal Yoğun, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D -dən tensorflow.keras.optimizstrain idxal MaxNorm # model memarlıq 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 = 'eyni')) model.add (Conv2D (5, kernel_size = 5, activation = 'relu', padding = 'eyni', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, padding = 'eyni')) model.add (Flatten ()) model.add (Yoğun (siniflər, aktivasiya = 'softmax', ad = 'y_pred', kernel_constraint = MaxNorm) (3))) # bu, öyrənmə sürətini idarə edir opt = Adam (lr = 0.005, beta_ 1 = 0.9, beta_2 = 0.999) # sinir şəbəkəsi modelini hazırlayın, validation_data = (X_test, Y_test), ətraflı = 2)
Addım 6:
Modeli öyrətdikdən sonra təlim performansını göstərəcək. Mənim üçün dəqiqlik 96.5% və itki 0.10 idi, davam etmək yaxşıdır.
Öskürək aşkarlama modelimiz hazır olduğu üçün bu modeli Arduino kitabxanası olaraq yerləşdirəcəyik. Modeli kitabxana olaraq yükləməzdən əvvəl 'Canlı təsnifat' səhifəsinə gedərək performansı yoxlaya bilərsiniz. 'Dağıtım' səhifəsinə gedin və 'Arduino Kitabxanası' nı seçin. İndi aşağıya fırladın və prosesi başlamaq üçün 'Qur' düyməsini basın. Bu, layihəniz üçün bir Arduino kitabxanası quracaq.
İndi kitabxananı Arduino IDE -yə əlavə edin. Bunun üçün Arduino IDE -ni açın və sonra Sketch> Kitabxanaya daxil et> Add. ZIP kitabxanasına vurun. Sonra, Fayl> Nümunələr> Layihənizin adı - Edge Impulse> nano_ble33_sense_microphone -a gedərək bir nümunə yükləyin. Kodda bəzi dəyişikliklər edəcəyik ki, Arduino öskürəyi aşkarlayanda xəbərdarlıq səsi çıxara bilək. Bunun üçün bir siqnal Arduino ilə əlaqələndirilir və öskürək algıladığında LED üç dəfə yanıb -sönəcək. Dəyişikliklər səs -küy və öskürək dəyərlərini çap etdiyi void loop () funksiyalarında edilir. Orijinal kodda həm etiketləri, həm də dəyərlərini birlikdə çap edir. for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf (" %s: %.5f / n", result.classification [ix].abel, result.classification [ix].value); } Həm səs -küy, həm də öskürək dəyərlərini fərqli dəyişənlərdə saxlayacağıq və səs -küy dəyərlərini müqayisə edəcəyik. Səs -küy 0.50 -dən aşağı düşərsə, öskürək dəyəri 0.50 -dən çoxdur və səs çıxaracaq. Orijinal for loop () kodunu bununla əvəz edin: for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification [ix].value); float Data = nəticə.sınıflandırma [ix].dəyər; əgər (Məlumat <0.50) {Serial.print ("Öskürək aşkarlandı"); siqnalizasiya (); }} Dəyişikliklər etdikdən sonra kodu Arduino -ya yükləyin. Serial monitoru 115200 baudda açın.
Öskürək aşkarlama maşını belə qurula bilər, hər hansı bir COVID19 şübhəlisini tapmaq çox təsirli bir üsul deyil, ancaq bəzi sıxlıq ərazilərdə yaxşı işləyə bilər.
Addım 7: Kod
Zəhmət olmasa əlavə edilmiş faylı tapın, Bəyəndiyiniz təqdirdə aşağıdakı müsabiqədə mənə səs verməyi unutmayın.
Tövsiyə:
DIY Cib Ölçülü Oğurluq Əleyhinə Siqnal!: 3 addım
DIY Cib Ölçülü Oğurluq Əleyhinə Alarm! bu təlimatda sizə cib ölçüsündə müdaxilə siqnalı necə edəcəyinizi göstərəcəyəm
Cib Ölçülü Dinamik: 3 addım
Cib Ölçülü Dinamik: Getdiyiniz hər yerə aparın! Yolda olan musiqi! Hamıya salam bu təlimatlandırmada (bu mənim ilk çıxışımdır) sizə bu Cib Ölçülü Dinamik necə hazırladığımı göstərəcəyəm
Cib Ölçülü Robot Arm MeArm V0.4: 20 Addım (Şəkillərlə)
Cib Ölçülü Robot Qolu MeArm V0.4: MeArm Cib Ölçülü Robot Qoldur. Açıq Avadanlıq layihəsi olaraq Açıq İnkişaf sayəsində indiki vəziyyətinə inanılmaz dərəcədə sürətli bir səyahətə çıxan 2014 -cü ilin fevral ayında başlayan bir layihədir. 0.3 versiyası Instructables arxasında yer aldı
Cib Ölçülü Hidrogen/Oksigen generatoru: 5 addım
Cib Ölçülü Hidrogen/Oksigen Generatoru: Hidrogen oynamaq çox əyləncəlidir, amma ən səmərəli generatorlar böyükdür. Kiçik və hidrogen istehsal edə biləcək bir şey etmək istədim. Bu dərslik, cib ölçüsündə bir hidrogen/oksigen generatorunun necə hazırlanacağını sizə göstərəcək. Təəssüf ki, bu deyil
Ən Sərin USB L.E.D. Cib Ölçülü İşıq (Cib Ölçülü Giriş): 6 addım
Ən Sərin USB L.E.D. Cib Ölçülü İşıq (Cib Ölçülü Giriş): Bu Təlimat kitabında sizə USB ilə işləyən L.E.D. X-it Mints qalay ölçüsünə qatlana bilən və cibinizə asanlıqla sığa bilən işıq. İstəsəniz, + bəyəndiyinizə və yarışmada mənə səs verdiyinizə əmin olun! Materiallar və