
Мазмуну:
2025 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2025-01-23 14:51

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 -кадам: Код
Сураныч, тиркелген файлды табыңыз, Эгер сизге жакса, төмөндөгү сынакта мага добуш берүүнү унутпаңыз.
Сунушталууда:
DIY чөнтөк өлчөмдүү уурулукка каршы сигнал!: 3 кадам

DIY чөнтөк өлчөмдүү уурулукка каршы ойготкуч!: Кимдир бирөө сиздин буюмдарыңызды чымчып сиз анын ким экенин таба албай жатасызбы? Ким экенин билбейсизби? Бул көрсөтмөдө мен сизге чөнтөк өлчөмүндөгү бузуку сигналды кантип жасоону көрсөтөм
Чөнтөк өлчөмдүү спикер: 3 кадам

Чөнтөк өлчөмүндөгү спикер: Кайда барсаңыз да алып жүрүңүз! Музыка жолдо! Салам баарына бул үйрөтмөдө (бул менин биринчи) мен сизге бул чөнтөк өлчөмдүү спикерди кантип жасаганымды көрсөтөм
Чөнтөк өлчөмдүү робот Arm MeArm V0.4: 20 кадам (Сүрөттөр менен)

Чөнтөк өлчөмдүү робот колу MeArm V0.4: MeArm - бул чөнтөк өлчөмүндөгү робот колу. Бул 2014 -жылдын февраль айында башталган долбоор, ал ачык жабдык долбоору катары Ачык Өнүгүүнүн аркасында азыркы абалына фантастикалык түрдө тез саякат жасаган. 0.3 версиясы Instructables артында көрсөтүлгөн
Чөнтөк өлчөмдүү суутек/кычкылтек генератору: 5 кадам

Чөнтөк өлчөмдүү суутек/кычкылтек генератору: Суутек менен ойноо абдан кызыктуу, бирок эң эффективдүү генераторлор чоң. Мен кичинекей жана водородду өндүрө турган нерсени жасагым келди. Бул окуу куралы сизге чөнтөк өлчөмүндөгү суутек/кычкылтек генераторун кантип жасоону көрсөтөт. Тилекке каршы, андай эмес
Чөнтөк өлчөмдүү зым цикл оюну: 7 кадам (сүрөттөр менен)

Чөнтөк өлчөмүндөгү зымдуу цикл оюну: Эй, балдар, эсиңердеби, 90 -жылдары PUBG дүйнөнү ээлебегенде, бизде көптөгөн сонун оюндар болгон. Эсимде, мен мектепте карнавалда ойногом. Аны бардык цикл аркылуу алуу абдан кыйын болду. Instructables ээ