Чөнтөк өлчөмдүү жөтөл детектору: 7 кадам
Чөнтөк өлчөмдүү жөтөл детектору: 7 кадам
Anonim
Чөнтөк өлчөмүндөгү жөтөл детектору
Чөнтөк өлчөмүндөгү жөтөл детектору

COVID19 чындыгында бүткүл дүйнөгө абдан жаман таасир тийгизген тарыхый пандемия жана адамдар аны менен күрөшүү үчүн көптөгөн жаңы түзмөктөрдү куруп жатышат. Биз ошондой эле контактсыз температураны текшерүү үчүн автоматтык дезинфекциялоочу машинаны жана Жылуулук тапанчасын курдук. Бүгүн биз коронавирус менен күрөшүүгө жардам бере турган дагы бир аппарат курабыз. Бул жөтөлдү аныктоочу система, ал ызы -чууну жана жөтөлдүн үнүн ажырата алат жана Коронага шектүүнү табууга жардам берет. Бул үчүн машина үйрөнүү ыкмаларын колдонот.

Бул үйрөткүчтө биз Arduino 33 BLE Sense жана Edge Impulse Studio аркылуу жөтөлдү аныктоо системасын түзөбүз. Бул реалдуу убакыт аудиосунда кадимки фондук ызы-чуу менен жөтөлдү айырмалай алат. Биз жөтөл жана фон ызы-чуу үлгүлөрүнүн маалымат топтомун үйрөтүү жана реалдуу убакытта жөтөл үнүн аныктоочу TInyML моделин куруу үчүн Edge Impulse студиясын колдондук.

Жабдуулар

Аппараттык

  • 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 коду пайда болот. Google Lens же башка QR коду сканер колдонмосу аркылуу QR кодун мобилдик телефонуңуз менен скандаңыз.

Бул телефонуңузду Edge Impulse студиясы менен байланыштырат.

Телефонуңуз Edge Impulse Studio менен туташканда, сиз азыр үлгүлөрүңүздү жүктөй аласыз. Үлгүлөрдү жүктөө үчүн, "Маалымат алуу" баскычын чыкылдатыңыз. Эми маалыматтарды алуу барагына этикетканын атын киргизиңиз, микрофонду сенсор катары тандап, үлгүнүн узундугун киргизиңиз. 40 секунданын үлгүсүн алууну баштоо үчүн "Тандоону баштоону" чыкылдатыңыз. Өзүңүздү жөтөлгө мажбурлоонун ордуна, онлайнда ар кандай узундуктагы жөтөлдүн үлгүлөрүн колдонсоңуз болот. Жалпы узундугу 10дон 12ге чейин жөтөлдүн үлгүлөрүн жазыңыз.

4 -кадам:

Сүрөт
Сүрөт
Сүрөт
Сүрөт

Жөтөлдүн үлгүлөрүн жүктөгөндөн кийин, энбелгини "ызы -чууга" коюп, дагы 10-12 ызы -чуунун үлгүлөрүн чогултуп алыңыз.

Бул үлгүлөр модулду окутуу үчүн, кийинки кадамдарда биз тест маалыматтарын чогултабыз. Тест маалыматтары 30% дан кем болбошу керек, андыктан "ызы -чуунун" 3 үлгүсүн жана 4төн 5ке чейин "жөтөлдүн" үлгүлөрүн чогултуп алыңыз. Маалыматыңызды чогултуунун ордуна Edge Impulse эсебине биздин маалымат топтомун импорттой аласыз. Импульс CLI жүктөөчү. CLI жүктөгүчтү орнотуу үчүн, адегенде, ноутбукка 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-категориялык тестирлөө тесттери/*. cbor

5 -кадам: Моделди үйрөтүү жана кодду өзгөртүү

Маалыматтар топтому даяр болгондуктан, эми биз маалыматтарга импульс түзөбүз. Бул үчүн "Импульс түзүү" барагына өтүңүз.

Азыр 'Импульс түзүү' барагында, 'Иштөө блогун кошууну' чыкылдатыңыз. Кийинки терезеде Аудио (MFCC) блогун тандаңыз. Андан кийин "Окутуу блогун кошуу" баскычын чыкылдатып, Нейрон түйүнүн (Керас) блогун тандаңыз. Андан кийин "Импульсту сактоо" баскычын чыкылдатыңыз.

Кийинки кадамда, MFCC барагына өтүп, андан кийин "Мүмкүнчүлүктөрдү түзүү" баскычын чыкылдатыңыз. Бул аудионун бардык терезелери үчүн MFCC блокторун түзөт.

Андан кийин "NN классификатору" барагына өтүңүз жана "Нейрон тармагынын жөндөөлөрүнүн" жогорку оң бурчундагы үч чекитти чыкылдатыңыз жана "Керас (эксперттик) режимине өтүүнү" тандаңыз.

Түпнусканы төмөнкү код менен алмаштырып, "Минималдуу ишеним рейтингин" "0.70" кылып өзгөртүңүз. Андан кийин "Окутууну баштоо" баскычын чыкылдатыңыз. Бул сиздин моделди үйрөтө баштайт.

tensorflow.keras.models катары tensorflow импорттоо tensorflow.keras.layersден ырааттуу импорттоо Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D from tensorflow.keras.optimizstrain Адам импорт MaxNorm # модель архитектурасынын модели = 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', аты = 'y_pred', kernel_constraint = MaxNorm) (3))) # бул окуу ылдамдыгын көзөмөлдөйт opt = Adam (lr = 0.005, beta_ 1 = 0.9, бета_2 = 0.999) # нейрон тармагынын моделин үйрөтүү, validation_data = (X_test, Y_test), толук = 2)

6 -кадам:

Моделди үйрөткөндөн кийин, ал тренингдин аткарылышын көрсөтөт. Мен үчүн тактык 96,5% ды, жоготуу 0,10ду түздү, бул улантуу үчүн жакшы.

Эми биздин жөтөлдү аныктоочу модель даяр болгондо, биз бул моделди Arduino китепканасы катары жайылтабыз. Моделди китепкана катары жүктөөдөн мурун, "Live Classification" барагына өтүү менен иштөөнү текшере аласыз. "Колдонуу" барагына өтүп, "Arduino китепканасын" тандаңыз. Эми ылдый жылдырып, процессти баштоо үчүн 'Build' дегенди басыңыз. Бул сиздин долбоор үчүн Arduino китепканасын курат.

Эми китепкананы Arduino IDEге кошуңуз. Бул үчүн Arduino IDE ачыңыз, андан кийин эскиз> Китепкананы кошуу> Add. 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]. label, result.classification [ix].value); } Биз ызы -чуунун жана жөтөлдүн баалуулуктарын ар кандай өзгөрмөлөрдө сактап, ызы -чуунун маанилерин салыштырабыз. Эгерде ызы -чуунун мааниси 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 -кадам: Код

Сураныч, тиркелген файлды табыңыз, Эгер сизге жакса, төмөндөгү сынакта мага добуш берүүнү унутпаңыз.

Сунушталууда: