Բովանդակություն:

Գրպանային չափի հազի դետեկտոր `7 քայլ
Գրպանային չափի հազի դետեկտոր `7 քայլ

Video: Գրպանային չափի հազի դետեկտոր `7 քայլ

Video: Գրպանային չափի հազի դետեկտոր `7 քայլ
Video: Տնտեսության կորուստները և ՀՀ-ից մաքսանենգ ծխախոտի արտահանման մութ պատմության նպատակը 2024, Նոյեմբեր
Anonim
Գրպանային չափի հազի դետեկտոր
Գրպանային չափի հազի դետեկտոր

COVID19- ն իսկապես պատմական համաճարակ է, որը շատ վատ է անդրադառնում ամբողջ աշխարհի վրա, և մարդիկ շատ նոր սարքեր են կառուցում դրա դեմ պայքարելու համար: Մենք նաև կառուցել ենք ախտահանման ավտոմատ մեքենա և ջերմային ատրճանակ `առանց կոնտակտային ջերմաստիճանի ցուցադրման: Այսօր մենք կկառուցենք ևս մեկ սարք, որը կօգնի պայքարել կորոնավիրուսի դեմ: Դա հազի հայտնաբերման համակարգ է, որը կարող է տարբերակել աղմուկը և հազի ձայնը և կարող է օգնել հայտնաբերել կորոնավիրուսի կասկածյալին: Դրա համար այն կօգտագործի մեքենայական ուսուցման տեխնիկա:

Այս ձեռնարկում մենք պատրաստվում ենք կառուցել Հազի հայտնաբերման համակարգ ՝ օգտագործելով Arduino 33 BLE Sense և Edge Impulse Studio- ն: Այն կարող է տարբերակել սովորական ֆոնային աղմուկը և հազը իրական ժամանակի ձայնի մեջ: Մենք Edge Impulse Studio- ի միջոցով վարժեցանք հազի և ֆոնային աղմուկի նմուշների հավաքածու և կառուցեցինք բարձր օպտիմիզացված TInyML մոդել, որը կարող է իրական ժամանակում հայտնաբերել Հազի ձայն:

Պարագաներ

Սարքավորումներ

  • Arduino 33 BLE Sense
  • LEDJumper
  • Լարերը

Ծրագրային ապահովում

  • Edge Impulse Studio
  • Arduino IDE

Քայլ 1: Շղթայի դիագրամ

Շղթայի դիագրամ
Շղթայի դիագրամ
Շղթայի դիագրամ
Շղթայի դիագրամ

Arduino 33 BLE Sense- ի միջոցով հազի հայտնաբերման սխեմայի սխեման տրված է վերևում: Arduino 33 BLE- ի սառեցնող մասը հասանելի չէր, այնպես որ ես օգտագործեցի Arduino Nano- ն, քանի որ երկուսն էլ ունեն նույն քորոցը:

LED- ի դրական կապը միացված է Arduino 33 BLE զգայարանի 4 թվային կապին, իսկ բացասական կապը `Arduino- ի GND կապին:

Քայլ 2. Հազի հայտնաբերման մեքենայի տվյալների հավաքածուի ստեղծում

Հազի հայտնաբերման մեքենայի համար տվյալների հավաքածուի ստեղծում
Հազի հայտնաբերման մեքենայի համար տվյալների հավաքածուի ստեղծում

Ինչպես արդեն նշվեց, մենք օգտագործում ենք Edge Impulse Studio- ն ՝ հազի հայտնաբերման մեր մոդելը մարզելու համար: Դրա համար մենք պետք է հավաքենք մի հավաքածու, որը պարունակում է տվյալների նմուշներ, որոնք մենք կցանկանայինք ճանաչել մեր Arduino- ում: Քանի որ նպատակը հազի հայտնաբերումն է, ապա ձեզ հարկավոր է հավաքել այդ և որոշ այլ նմուշներ աղմուկի համար, որպեսզի այն կարողանա տարբերակել հազի և այլ աղմուկների միջև: Մենք կստեղծենք տվյալների հավաքածու երկու դասի «հազ» և «աղմուկ»: Տվյալներ ստեղծելու համար ստեղծեք Edge Impulse հաշիվ, հաստատեք ձեր հաշիվը և ապա սկսեք նոր նախագիծ: Դուք կարող եք բեռնել նմուշները ՝ օգտագործելով ձեր բջջային հեռախոսը, ձեր Arduino տախտակը կամ կարող եք տվյալների հավաքածու ներմուծել ձեր ծայրահեղ իմպուլսային հաշվի մեջ: Ձեր հաշվին նմուշներ բեռնելու ամենահեշտ ձևը բջջային հեռախոսի օգտագործումն է: Դրա համար դուք պետք է ձեր բջջային հեռախոսը միացնեք Edge Impulse- ի հետ: Ձեր բջջային հեռախոսը միացնելու համար կտտացրեք «Սարքեր», այնուհետև կտտացրեք «Միացրեք նոր սարք»:

Քայլ 3: Միացեք բջջային հեռախոսին

Միացեք բջջային հեռախոսին
Միացեք բջջային հեռախոսին

Այժմ հաջորդ պատուհանում կտտացրեք «Օգտագործեք ձեր բջջային հեռախոսը» և կհայտնվի QR կոդ: Ձեր բջջային հեռախոսի միջոցով սկանավորեք QR կոդը ՝ օգտագործելով Google Lens կամ QR կոդերի սկաների այլ ծրագիր:

Սա ձեր հեռախոսը կկապի Edge Impulse ստուդիայի հետ:

Edge Impulse Studio- ի հետ կապված ձեր հեռախոսով այժմ կարող եք բեռնել ձեր նմուշները: Նմուշները բեռնելու համար կտտացրեք «Տվյալների ձեռքբերում»: Այժմ Տվյալների ձեռքբերման էջում մուտքագրեք պիտակի անունը, ընտրեք խոսափողը որպես սենսոր և մուտքագրեք նմուշի երկարությունը: Կտտացրեք «Սկսել նմուշառում» ՝ 40 վրկ նմուշառում սկսելու համար: Հազալ ստիպելու փոխարեն կարող եք օգտագործել տարբեր երկարությունների հազի առցանց նմուշներ: Ընդհանուր առմամբ գրանցեք տարբեր երկարությունների 10 -ից 12 հազի նմուշներ:

Քայլ 4:

Պատկեր
Պատկեր
Պատկեր
Պատկեր

Հազի նմուշները բեռնելուց հետո դրեք պիտակը «աղմուկ» և հավաքեք ևս 10 -ից 12 աղմուկի նմուշ:

Այս նմուշները մոդուլը պատրաստելու համար են, հաջորդ քայլերում մենք կհավաքենք թեստի տվյալները: Փորձարկման տվյալները պետք է կազմեն ուսուցման տվյալների առնվազն 30% -ը, այնպես որ հավաքեք «աղմուկի» 3 և «հազի» 4 -ից 5 նմուշ: Ձեր տվյալները հավաքելու փոխարեն, դուք կարող եք մեր տվյալների հավաքածուն ներմուծել ձեր Edge Impulse հաշվի միջոցով ՝ օգտագործելով Edge Իմպուլսային CLI վերբեռնիչ: CLI Uploader- ը տեղադրելու համար նախ ներբեռնեք և տեղադրեք Node.js ձեր համակարգչի վրա: Դրանից հետո բացեք հրամանի տողը և մուտքագրեք ստորև բերված հրամանը.

npm տեղադրել -g edge-impulse-cli

Այժմ ներբեռնեք տվյալների հավաքածուն (Dataset Link) և հանեք ֆայլը ձեր ծրագրի թղթապանակում: Բացեք հրամանի տողը և անցեք տվյալների բազայի գտնվելու վայրը և գործարկեք ստորև բերված հրամանները.

edge-impulse-uploader --cleanedge-impulse-uploader-կատեգորիայի ուսուցում/*. json

edge-impulse-uploader-կատեգորիայի ուսուցման ուսուցում/*. cbor

edge-impulse-uploader-կատեգորիայի թեստավորման փորձարկում/*. json edge-impulse-uploader-կատեգորիայի փորձարկում//

Քայլ 5. Մոդելի ուսուցում և ծածկագրի շտկում

Երբ տվյալների հավաքածուն պատրաստ է, այժմ մենք տվյալների իմպուլս կստեղծենք: Դրա համար անցեք «Ստեղծել իմպուլս» էջ:

Այժմ «Ստեղծեք իմպուլս» էջում կտտացրեք «Ավելացնել մշակման բլոկ»: Հաջորդ պատուհանում ընտրեք «Աուդիո» (MFCC) բլոկը: Դրանից հետո կտտացրեք «Ավելացնել ուսուցման բլոկ» և ընտրեք նյարդային ցանց (Keras) բլոկը: Այնուհետև կտտացրեք «Պահպանել իմպուլսը»:

Հաջորդ քայլում գնացեք MFCC էջ և այնուհետև կտտացրեք «Ստեղծել հնարավորություններ»: Այն կստեղծի MFCC բլոկներ մեր բոլոր ձայնային պատուհանների համար:

Դրանից հետո գնացեք «NN դասակարգիչ» էջ և կտտացրեք «Նյարդային ցանցի կարգավորումներ» վերին աջ անկյունում գտնվող երեք կետերին և ընտրեք «Անցնել Keras (փորձագետ) ռեժիմ»:

Բնօրինակը փոխարինեք հետևյալ ծածկագրով և փոխեք «Նվազագույն վստահության վարկանիշը» ՝ «0.70»: Այնուհետև կտտացրեք «Սկսել մարզումը» կոճակին: Այն կսկսի պատրաստել ձեր մոդելը:

ներմուծել tensorflow որպես tffrom tensorflow.keras.models ներմուծում հաջորդական tensorflow.keras.layers- ից ներմուծել Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D from tensorflow.keras.optimizers. MaxNorm # model architecture 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, 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 (խիտ (դասեր, ակտիվացում = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # սա վերահսկում է ուսուցման մակարդակը opt = Adam (lr = 0.005, բետա_ 1 = 0.9, բետա_2 = 0.999) # վարժեցնել նյարդային ցանցի մոդելը. Կույտ (կորուստ = 'կատեգորիկ_կոսենտրոպիա', օպտիմալացնող = ընտրություն, չափումներ = ['ճշգրտություն]) model.fit (X_train, Y_train, batch_size = 32, epochs = 9, validation_data = (X_test, Y_test), verbose = 2)

Քայլ 6:

Մոդելը վերապատրաստելուց հետո այն ցույց կտա ուսուցման կատարումը: Ինձ համար ճշգրտությունը 96.5% էր, իսկ կորուստը `0.10, ինչը լավ է շարունակել:

Այժմ, երբ հազի հայտնաբերման մեր մոդելը պատրաստ է, մենք այս մոդելը կտեղադրենք որպես Arduino գրադարան: Նախքան մոդելը որպես գրադարան ներբեռնելը, կարող եք ստուգել կատարումը ՝ անցնելով «Կենդանի դասակարգում» էջին: Գնացեք «Տեղակայման» էջ և ընտրեք «Arduino Library»: Այժմ ոլորեք ներքև և կտտացրեք «Կառուցել» ՝ գործընթացն սկսելու համար: Սա կկառուցի Arduino գրադարան ձեր նախագծի համար:

Այժմ ավելացրեք գրադարանը ձեր Arduino IDE- ում: Դրա համար բացեք Arduino IDE- ն, այնուհետև կտտացրեք Էսքիզ> Ներառել գրադարան> Ավելացնել: ZIP գրադարան: Այնուհետև բեռնեք օրինակ ՝ անցնելով Ֆայլ> Օրինակներ> Ձեր նախագծի անունը - Edge Impulse> nano_ble33_sense_microphone: Մենք որոշ փոփոխություններ կկատարենք ծածկագրում, որպեսզի կարողանանք ահազանգ հնչեցնել, երբ Arduino- ն հազ հայտնաբերի: Դրա համար ազդանշանը միացված է Arduino- ի հետ, և երբ այն հայտնաբերում է հազը, LED- ը կթարթվի երեք անգամ: Փոփոխությունները կատարվում են void loop () գործառույթներում, որտեղ այն տպում է աղմուկի և հազի արժեքները: Սկզբնական ծածկագրում այն տպում է թե՛ պիտակները և թե՛ դրանց արժեքները միասին: for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf (" %s: %.5f / n", result.classification [ix].bebel, result.classification [ix]. արժեք); } Մենք պատրաստվում ենք խնայել ինչպես աղմուկի, այնպես էլ հազի արժեքները տարբեր փոփոխականներում և համեմատել աղմուկի արժեքները: Եթե աղմուկի արժեքը իջնում է 0.50 -ից, դա նշանակում է, որ հազի արժեքը 0.50 -ից բարձր է, և այն ձայն կհանի: Loop () կոդի բնօրինակը փոխարինեք հետևյալով ՝ for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification [ix].value); float Data = result.classification [ix].value; if (Տվյալներ <0.50) {Serial.print («Հազը հայտնաբերված է»); ահազանգ (); }} Փոփոխություններ կատարելուց հետո վերբեռնեք կոդը ձեր Arduino- ում: Բացեք սերիական մոնիտորը 115200 baud- ում:

Այսպիսով, այսպես կարելի է ստեղծել հազի հայտնաբերման մեքենա, դա այնքան էլ արդյունավետ մեթոդ չէ COVID19- ի ցանկացած կասկածյալ գտնելու համար, բայց այն կարող է լավ աշխատել որոշ մարդաշատ վայրերում:

Քայլ 7: Կոդ

Խնդրում ենք գտնել կից ֆայլը, Եվ եթե ձեզ դուր եկավ, մի մոռացեք ինձ քվեարկել ստորև ներկայացված մրցույթում:

Խորհուրդ ենք տալիս: