- Kinakailangan ang Mga Bahagi
- Diagram ng Circuit
- Paglikha ng Dataset para sa Pagkilala sa Arduino Speech Recognition
- Pagsasanay sa Modelo
- Arduino Code para sa Pagkilala sa Boses ng Arduino
Ang teknolohiyang pagkilala sa pagsasalita ay lubhang kapaki-pakinabang sa pag-aautomat na hindi lamang nagbibigay sa iyo ng libreng kontrol sa mga aparato ngunit nagdaragdag din ng seguridad sa system. Bukod sa paggawa ng mga gadget na kinokontrol ng boses, ang pagkilala sa pagsasalita ay nagbibigay din ng malaking tulong sa mga taong nagdurusa mula sa iba't ibang mga kapansanan.
Sa mga nakaraang proyekto ay itinayo namin ang Arduino batay sa Text to Speech (TTS) Converter at mga ilaw na kinokontrol ng boses. Ngayon sa proyektong ito, gagamitin namin ang pag-aaral ng makina upang sanayin ang isang modelo ng pagkilala sa pagsasalita gamit ang Edge Impulse Studio na may tatlong mga utos ie ' LIGHT ON' , ' LIGHT OFF', at ' NOISE '. Ang Edge Impulse ay isang online machine platform ng pag-aaral na nagbibigay-daan sa mga developer na lumikha ng susunod na henerasyon ng mga solusyon sa intelihente na aparato na may naka-embed na Pag-aaral ng Machine. Ginamit namin ang Edge impulse studio dati upang makilala ang mga tunog ng pag-ubo at ingay.
Kinakailangan ang Mga Bahagi
Hardware
- Arduino 33 BLE Sense
- LED
- Jumper Wires
Software
- Edge Impulse Studio
- Arduino IDE
Natakpan namin ang isang detalyadong tutorial sa Arduino 33 BLE Sense.
Diagram ng Circuit
Ang Circuit Diagram para sa pagkilala sa boses na ito gamit ang Arduino ay ibinibigay sa ibaba. Ang bahagi ng Fritzing para sa Arduino 33 BLE ay hindi magagamit, kaya ginamit ko ang Arduino Nano na pareho ang parehong pinout.
Ang Positibong tingga ng LED ay konektado sa digital pin 5 ng Arduino 33 BLE sense at Negatibong tingga ay konektado sa GND pin ng Arduino.
Paglikha ng Dataset para sa Pagkilala sa Arduino Speech Recognition
Dito ginagamit ang Edge Impulse Studio upang sanayin ang aming modelo ng Pagkilala sa pagsasalita. Ang pagsasanay ng isang modelo sa Edge Impulse Studio ay katulad ng mga modelo ng pag-aaral ng machine machine sa iba pang mga framework ng pag-aaral ng machine. Para sa pagsasanay, ang unang hakbang ng isang modelo ng machine machine ay upang mangolekta ng isang dataset na mayroong mga sample ng data na nais naming makilala.
Tulad ng aming layunin ay upang makontrol ang isang LED gamit ang aming utos ng boses, kakailanganin naming kolektahin ang mga sample ng boses para sa lahat ng mga utos at ingay upang maiba ang pagkakaiba sa pagitan ng mga utos ng boses at iba pang mga Ingay.
Lilikha kami ng isang dataset na may tatlong klase na " LED ON ", " LED OFF " at " ingay ". Upang lumikha ng isang dataset, lumikha ng isang Edge Impulse account, i-verify ang iyong account at pagkatapos ay magsimula ng isang bagong proyekto. Maaari mong mai-load ang mga sample sa pamamagitan ng paggamit ng iyong mobile, ang iyong Arduino board o maaari kang mag-import ng isang dataset sa iyong edge na salpok account. Ang pinakamadaling paraan upang mai-load ang mga sample sa iyong account ay sa pamamagitan ng paggamit ng iyong mobile phone. Para sa pagkonekta ng mobile sa Edge Impulse.
Upang ikonekta ang pag-click sa Mobile phone sa 'Mga Device ' at pagkatapos ay mag-click sa ' Kumonekta ng isang Bagong Device' .
Ngayon sa susunod na window mag-click sa 'Use your Mobile Phone' , at lilitaw ang isang QR code. I-scan ang QR code gamit ang iyong Mobile Phone o ipasok ang URL na ibinigay sa QR code.
Ikonekta nito ang iyong telepono sa Edge Impulse studio.
Sa iyong telepono na konektado sa Edge Impulse Studio, maaari mo na ngayong mai-load ang iyong mga sample. Upang mai-load ang mga sample na mag-click sa ' Data acquisition' . Ngayon sa pahina ng Pagkuha ng data ipasok ang pangalan ng label, piliin ang mikropono bilang isang sensor, at ipasok ang haba ng sample. Mag-click sa ' Simulang sampling' , ang iyong aparato ay makakakuha ng isang sample ng 2 Sec. Itala ang isang kabuuang 10 hanggang 12 mga sample ng boses sa iba't ibang mga kundisyon.
Matapos ang pag-upload ng mga sample para sa unang klase ngayon itakda ang baguhin ang label at kolektahin ang mga sample para sa ' light off' at 'ingay' klase.
Ang mga sample na ito ay para sa Pagsasanay ng modyul, sa mga susunod na hakbang, kokolektahin namin ang Data ng Pagsubok. Ang data ng pagsubok ay dapat na hindi bababa sa 30% ng data ng pagsasanay, kaya kolektahin ang 4 na mga sample ng 'ingay' at 4 hanggang 5 na mga sample para sa 'ilaw sa' at 'ilaw off'.
Pagsasanay sa Modelo
Tulad ng handa na ang aming dataset, maaari na kaming lumikha ng isang salpok para sa data. Para doon pumunta sa pahina na ' Lumikha ng salpok '. Baguhin ang mga default na setting ng isang laki ng 1000 ms Window sa 1200ms at 500 ms Window na pagtaas sa 50ms. Nangangahulugan ito na mapoproseso ang aming data ng 1.2 s nang paisa-isa, simula sa bawat 58ms.
Ngayon sa pahina ng ' Lumikha ng salpok' mag- click sa ' Magdagdag ng isang block ng pagproseso' . Sa susunod na window piliin ang Audio (MFCC) block. Matapos ang pag-click sa ' Magdagdag ng isang bloke ng pag-aaral' at piliin ang bloke ng Neural Network (Keras). Pagkatapos mag-click sa 'I- save ang Impulse' .
Sa susunod na hakbang pumunta sa pahina ng MFCC at pagkatapos ay mag-click sa 'Bumuo ng Mga Tampok'. Lilikha ito ng mga bloke ng MFCC para sa lahat ng aming windows ng audio.
Pagkatapos nito pumunta sa pahina na ' NN Classifier' at mag-click sa tatlong mga tuldok sa kanang sulok sa itaas ng 'Mga setting ng Neural Network' at piliin ang ' Lumipat sa Keras (dalubhasa) mode' .
Palitan ang orihinal ng sumusunod na code at palitan ang ' Minimum na rating ng kumpiyansa' sa ' 0.70' . Pagkatapos mag-click sa pindutang ' Magsimula sa pagsasanay' . Magsisimula itong sanayin ang iyong modelo.
i-import ang tensorflow bilang tf mula sa tensorflow.keras.models i-import ang Sequential mula sa tensorflow.keras.layers import ang Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D mula sa tensorflow.keras.optimizers ay nag-import ng Adam mula sa tensorflow.keras.constraizers i-import ang modelo ng arkitektura ng modelo ng MaxNorm # = Sequential () model.add (InputLayer (input_shape = (X_train.shape,), name = 'x_input')) model.add (Reshape ((int (X_train.shape / 13), 13, 1), input_shape = (X_train.shape,))) model.add (Conv2D (10, kernel_size = 5, activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, padding = 'pareho')) model.add (Conv2D (5, kernel_size = 5, activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2,padding = 'pareho')) model.add (Flatten ()) model.add (Dense (klase, pag-activate = 'softmax', pangalan = 'y_pred', kernel_constraint = MaxNorm (3))) # kinokontrol nito ang pag-opt rate ng pag-aaral = Adam (lr = 0.005, beta_1 = 0.9, beta_2 = 0.999) # sanayin ang neural network model.compile (loss = 'categorical_crossentropy', optimizer = opt, sukatan =) na modelo.fit (X_train, Y_train, batch_size = 32, epochs = 9, validation_data = (X_test, Y_test), verbose = 2)verbose = 2)verbose = 2)
Pagkatapos ng pagsasanay sa modelo ay ipapakita nito ang pagganap ng pagsasanay. Para sa akin, ang katumpakan ay 81.1% at ang pagkawala ay 0.45 na hindi perpektong pagganap ngunit maaari nating magpatuloy dito. Maaari mong taasan ang pagganap ng iyong modelo sa pamamagitan ng paglikha ng isang malawak na dataset.
Ngayon dahil handa na ang aming modelo ng Pagkilala sa pagsasalita, ilalagay namin ang modelong ito bilang Arduino library. Bago i-download ang modelo bilang isang silid-aklatan maaari mong subukan ang pagganap sa pamamagitan ng pagpunta sa pahina ng ' Live na Pag-uuri' . Pinapayagan ka ng tampok na Live na pag-uuri na subukan ang modelo kapwa may umiiral na data ng pagsubok na kasama ng dataset o sa pamamagitan ng streaming ng data ng audio mula sa iyong mobile phone.
Upang subukan ang data sa iyong telepono, piliin ang ' Lumipat sa Classification Mode' sa iyong telepono.
Ngayon upang i-download ang modelo bilang Arduino Library, pumunta sa pahina ng 'Pag- deploy ' at piliin ang ' Arduino Library' . Ngayon mag-scroll pababa at mag-click sa ' Build ' upang simulan ang proseso. Ito ay magtatayo ng isang Arduino library para sa iyong proyekto.
Idagdag ngayon ang library sa iyong Arduino IDE. Para doon buksan ang Arduino IDE at pagkatapos ay mag-click sa Sketch> Isama ang Library> Add.ZIP library
Pagkatapos, mag-load ng isang halimbawa sa pamamagitan ng pagpunta sa File> Mga Halimbawa> Ang iyong pangalan ng proyekto - Edge Impulse> nano_ble33_sense_microphone
Arduino Code para sa Pagkilala sa Boses ng Arduino
Narito ang ilang mga pagbabago na nagawa upang makontrol ang LED gamit ang mga utos ng boses.
Gumagawa kami ng ilang mga pagbabago sa void loop () kung saan inililimbag nito ang posibilidad ng mga utos. Sa orihinal na code, pini-print nito ang lahat ng mga label at kanilang mga halaga nang magkasama.
para sa (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", resulta.classification.label, resulta.classification.value); }
Upang makontrol ang LED kailangan nating i-save ang lahat ng mga probabilidad ng utos sa tatlong magkakaibang mga variable upang maaari naming ilagay ang mga kondisyong pahayag sa kanila. Kaya ayon sa bagong code kung ang posibilidad ng ' light on' na utos ay higit sa 0.50 pagkatapos ay bubuksan nito ang LED at kung ang posibilidad ng ' light off' na utos ay higit sa 0.50 kaysa sa papatayin nito ang LED.
para sa (size_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ingay = resulta.classification.value; Serial.println ("Ingay:"); Serial.println (ingay); } para sa (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = result.classification.value; Serial.println ("Magaan ang ilaw:"); Serial.print (lightoff); } lighton = 1- (ingay + lightoff); Serial.println ("Magaan SA:"); Serial.print (lighton); kung (lighton> 0.50) {digitalWrite (led, HIGH); } kung (lightoff> 0.50) {digitalWrite (led, LOW); }
Matapos gawin ang mga pagbabago, i-upload ang code sa iyong Arduino. Buksan ang serial monitor sa 115200 baud.
Ito ay kung paano ka makakagawa ng pagkilala sa pagsasalita gamit ang Arduino at magbigay ng mga utos upang mapatakbo ang mga aparato.
Ang isang kumpletong gumaganang video na may isang library at code ay ibinibigay sa ibaba.