Мазмұны:
- Жабдықтар
- 1 -қадам: схема
- 2 -қадам: Жөтелді анықтайтын машинаның мәліметтер жинағын құру
- 3 -қадам: ұялы телефонға қосылыңыз
- 4 -қадам:
- 5 -қадам: Үлгіні үйрету және кодты түзету
- 6 -қадам:
- 7 -қадам: код
Бейне: Қалталы жөтел детекторы: 7 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:22
COVID19 - бұл бүкіл әлемге өте ауыр әсер ететін тарихи пандемия және адамдар онымен күресу үшін көптеген жаңа құрылғылар жасап жатыр. Біз сондай -ақ температураны контактісіз скринингке арналған автоматты дезинфекциялаушы машина мен термиялық пистолетті құрдық. Бүгін біз коронавируспен күресуге көмектесетін тағы бір құрылғы жасаймыз. Бұл жөтелді анықтау жүйесі, ол шу мен жөтелдің дыбысын ажырата алады және Коронаға күдіктіні табуға көмектеседі. Ол үшін машиналық оқыту әдістері қолданылады.
Бұл оқулықта біз Arduino 33 BLE Sense пен Edge Impulse Studio көмегімен жөтелді анықтау жүйесін құрамыз. Ол нақты уақыттағы дыбыста қалыпты фондық шу мен жөтелді ажырата алады. Біз Edge Impulse Studio-ны жөтел мен фондық шу үлгілерінің жиынтығын үйрету үшін және нақты уақытта жөтел дыбысын анықтай алатын жоғары оңтайландырылған TInyML моделін құру үшін қолдандық.
Жабдықтар
Аппараттық құрал
- Arduino 33 BLE Sense
- LEDJumper
- Сымдар
Бағдарламалық қамтамасыз ету
- Edge Impulse студиясы
- Arduino IDE
1 -қадам: схема
Arduino 33 BLE Sense көмегімен жөтелді анықтауға арналған схема жоғарыда келтірілген. Arduino 33 BLE-ге арналған тоңазытқыш бөлігі жоқ, сондықтан мен Arduino Nano-ды қолдандым, себебі екеуінде де бірдей шығыс бар.
Жарық диодтың оң сымы 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 жүктеушісін орнату үшін алдымен Node.js файлын ноутбукке жүктеп, орнатыңыз. Осыдан кейін пәрмен жолын ашып, төмендегі пәрменді енгізіңіз:
npm install -g edge-impulse-cli
Енді деректер жиынтығын (Dataset Link) жүктеп алып, файлды жоба қалтасынан шығарыңыз. Пәрмен жолын ашыңыз және деректер жиынының орналасуына өтіңіз және төмендегі пәрмендерді іске қосыңыз:
шеткі-импульсті-жүктеуші-тазаланған-импульсті-жүктеуші-санатты тренинг/*. json
edge-impulse-uploader-санаттық жаттығулар/*. cbor
edge-impulse-uploader-санаттық тестілеуді тестілеу/*. json edge-impulse-uploader-санатты тестілеуді тестілеу/*. cbor
5 -қадам: Үлгіні үйрету және кодты түзету
Деректер жиынтығы дайын болғандықтан, енді біз мәліметтерге импульс жасаймыз. Ол үшін «Импульс құру» бетіне өтіңіз.
Енді «Импульс құру» бетінде «Өңдеу блогын қосу» түймесін басыңыз. Келесі терезеде Audio (MFCC) блогын таңдаңыз. Осыдан кейін «Оқу блогын қосу» түймесін басып, Нейрондық желі (Керас) блогын таңдаңыз. Содан кейін «Импульсті сақтау» түймесін басыңыз.
Келесі қадамда MFCC бетіне өтіңіз, содан кейін «Мүмкіндіктерді жасау» түймесін басыңыз. Ол барлық аудио терезелеріміз үшін MFCC блоктарын жасайды.
Осыдан кейін «NN классификаторы» бетіне өтіп, «Нейрондық желі параметрлері» жоғарғы оң жақ бұрышындағы үш нүктені нұқыңыз және «Керас (сарапшы) режиміне ауысуды» таңдаңыз.
Түпнұсқаны келесі кодпен ауыстырыңыз және «Ең төменгі сенімділік рейтингісін» «0,70» -ке өзгертіңіз. Содан кейін «Жаттығуды бастау» түймесін басыңыз. Ол сіздің моделіңізді үйрете бастайды.
tensorflow.keras.models ретінде tensorflow импорттау tensorflow.keras.layers жүйесінен дәйекті импорттау Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D 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 = 'бірдей')) model.add (Conv2D (5, kernel_size = 5, активация = 'relu', padding = 'бірдей', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, padding = 'бірдей')) model.add (Flatten ()) model.add (тығыз (сыныптар, активация = 'softmax', аты = 'y_pred', kernel_constraint = MaxNorm) (3))) # бұл оқу жылдамдығын басқарады opt = Adam (lr = 0,005, бета_ 1 = 0.9, beta_2 = 0.999) # нейрондық желі моделін үйрету, validation_data = (X_test, Y_test), толық = 2)
6 -қадам:
Модельді үйреткеннен кейін, ол жаттығудың өнімділігін көрсетеді. Мен үшін дәлдік 96,5% құрады, ал жоғалту 0,10 болды, бұл жақсы.
Енді біздің жөтелді анықтау үлгісі дайын болғандықтан, біз бұл модельді Arduino кітапханасы ретінде орналастырамыз. Үлгіні кітапхана ретінде жүктемес бұрын, өнімділікті 'Live Classification' бетіне өту арқылы тексеруге болады. «Қолдану» бетіне өтіп, «Arduino кітапханасын» таңдаңыз. Енді процесті бастау үшін төмен айналдырыңыз және «Құру» түймесін басыңыз. Бұл сіздің жобаңызға Arduino кітапханасын салады.
Енді кітапхананы Arduino IDE -ге қосыңыз. Ол үшін Arduino IDE бағдарламасын ашып, эскиз> Кітапхананы қосу> Add. ZIP кітапханасын шертіңіз. Содан кейін, Файл> Мысалдар> Сіздің жобаңыздың аты - Edge Impulse> nano_ble33_sense_microphone тармағына өту арқылы мысалды жүктеңіз. Біз Arduino жөтелді анықтағанда ескерту дыбысын шығару үшін кодқа кейбір өзгерістер енгіземіз. Ол үшін дыбыстық сигнал Arduino -мен байланысады және ол жөтелді анықтаған кезде жарық диоды үш рет жыпылықтайды. Өзгерістер шу мен жөтел мәндерін басып шығаратын void loop () функциясында жасалады. Бастапқы кодта ол белгілер мен олардың мәндерін бірге басып шығарады. for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf (« %s: %.5f / n», result.classification [ix]. жапсырма, result.classification [ix].мән); } Біз шу мен жөтелдің мәндерін әр түрлі айнымалыларда сақтап, шу мәндерін салыстырамыз. Егер шу деңгейі 0,50 -ден төмен болса, бұл жөтелдің мәні 0,50 -ден асады және ол дыбысты шығарады. For loop () кодының түпнұсқасын мынамен ауыстырыңыз: for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification [ix].value); float Data = result.classification [ix].мән; if (Деректер <0,50) {Serial.print («Жөтел анықталды»); дабыл (); }} Өзгерістер енгізгеннен кейін кодты Arduino -ға жүктеңіз. Сериялық мониторды 115200 bod ашыңыз.
Осылайша жөтелді анықтайтын аппаратты осылай жасауға болады, бұл кез келген COVID19 күдіктісін табудың тиімді әдісі емес, бірақ ол адамдар көп жиналатын жерлерде жақсы жұмыс істей алады.
7 -қадам: код
Қосылған файлды табыңыз, Ал егер сізге ұнаған болса, төмендегі конкурста маған дауыс беруді ұмытпаңыз.
Ұсынылған:
DIY қалталы өлшемді ұрлыққа қарсы дабыл!: 3 қадам
DIY қалталы өлшемді ұрлыққа қарсы дабыл!: Біреу сіздің заттарыңызды қысады ма, әлде сіз оның кім екенін таба алмайсыз ба? Біреудің кім екенін білмейсіз бе? бұл нұсқаулықта мен сізге қалтаға зиянды дабылды қалай жасау керектігін көрсетемін
Қалталы шахмат: 4 қадам
Қалталы шахмат: Бұл шахмат! Сіздің қалтаңызда. Бұл жоба жылан, пак-ман, тетрис және тіпті шахмат сияқты кішігірім ойындарды жүргізе алатын шағын құрылғы жасауға бағытталған
Қалталы Sonic билеушісі: 3 қадам (суреттермен)
Pocket Sonic билеушісі: Бұл қалтада ультрадыбыстық шкала, сіз қалтаңызда алып жүре аласыз және объектінің ұзындығын өлшей аласыз, сіз өзіңіздің биіктігіңізді, жиһаздың биіктігін өлшей аласыз және т.б. және
Қалталы шпион-робот: 5 қадам (суреттермен)
Қалталы шпион-робот: құлыптау кезінде жалықтыңыз ба? Қонақ бөлме диванының астындағы қараңғы әлемді зерттегіңіз келе ме? Сонда қалта көлемінде барлаушы робот сізге арналған! Биіктігі небары 25 мм болатын бұл кішкентай робот адамдар бара алмайтын жерлерге өте алады және барлығын тамақтандырады
Қалталы қалталы бристлботты қалай жасауға болады: 3 қадам
Қалталы қалталы қылқаламды қалай жасауға болады: Бұл нұсқаулықта мен қылшық ботқа өз нұсқамды қалай жасау керектігін көрсетемін. Ол кішкентай, оңай дайындалады және өте аз материалдарды қолданады. Артықшылықтары: -Өте аз материалдар -жасауға оңай -Кемшіліктермен ойнауға көңілділік: -Айналдыра айналуға бейім -Сізге керек