Kazalo:
- Zaloge
- 1. korak: zbiranje kuhinjskih zvočnih vzorcev
- 2. korak: Priprava zaslona Arduino/Matrix
- 3. korak: Zagon klasifikatorja in prepoznavanje zvokov
- 4. korak: Ustvarite ohišje LEGO
Video: Zvočni identifikator kuhinje po meri: 4 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:04
Za naš zadnji projekt v tečaju interaktivnih sistemov to pomlad smo ustvarili sistem v realnem času za prepoznavanje in vizualizacijo skupnih zvokov v kuhinji s pomočjo klasifikacije Support-Vector Machine. Sistem je sestavljen iz prenosnega računalnika za zvočno vzorčenje/razvrščanje in Arduino/matričnega zaslona za vizualizacijo. Sledi vodnik za ustvarjanje lastne različice tega sistema za zvoke iz lastne kuhinje.
Naš prvotni primer uporabe je bil kot naprava za kuhinjo gluhih in naglušnih posameznikov, vendar bi lahko ta sistem teoretično prilagodili za identifikacijo niza zvokov v različnih kontekstih. Kuhinja je bila idealen kraj za začetek, saj je ponavadi razmeroma tiha in vsebuje razumno količino preprostih, razločnih zvokov.
Repozitorij GitHub za ta projekt najdete tukaj.
Zaloge
- Mikrokontroler Arduino Leonardo z glavami
- KEYESTUDIO 16x16 matrični LED zaslon za Arduino
- Mostična žica za ploščico
- Kabel Micro-USB v USB 2.0
-
Prenosni računalnik z prenosnikom Jupyter (namestitev Anaconde)
Vodnik za začetnike po Jupyterjevem zvezku najdete tukaj
- Velika količina neusklajenih LEGO kock za ohišje sistema
(Toda v resnici jih lahko zamenjate s katerim koli gradbenim materialom DIY, ki ga želite!)
1. korak: zbiranje kuhinjskih zvočnih vzorcev
Zgornja slika: Zvočni podatki, posneti s snemanjem vilic in noža, so združeni s tem postopkom zbiranja
Za prepoznavanje zvokov v realnem času moramo modelu strojnega učenja ponuditi kakovostne primere za primerjavo. Za ta proces smo ustvarili zvezek Jupyter, do katerega lahko dostopate tukaj ali prek skladišča GitHub našega projekta. Repozitorij vsebuje tudi vzorčne zbirke iz dveh različnih kuhinj za namene testiranja.
Korak 1.1: Kopirajte beležnico CollectSamples.ipynb v delovni imenik Jupyter Notebook in jo odprite.
Korak: Zaženite vsako celico eno za drugo in bodite pozorni na vse zapiske, ki smo jih navedli v naslovih. Ustavite se, ko pridete do enega z naslovom "Vzorec snemanja".
OPOMBA: V tem zvezku je uporabljenih več knjižnic Python, vsaka pa potrebuje namestitev, preden jih lahko uspešno uvozite v projekt. To lahko storite ročno, čeprav lahko tukaj najdete vodnik za namestitev knjižnice v Jupyter Notebooku.
Korak 1.3: Ustvarite prazen imenik za shranjevanje vzorcev v delovnem imeniku za ta projekt.
Korak 1.4: Spremenite spremenljivko SAMPLES_LOCATION v celici "Vzorec snemanja" tako, da se ujema z lokacijo vašega praznega imenika.
Korak 1.5: spremenljivki SOUND_LABELS dodajte ali odstranite poljubno število zvokov.
Da bi vzorčna koda snemanja delovala, mora biti vsaka vrstica te spremenljivke ločena z vejico in naslednje oblike:
'ts': Zvok ("TargetedSound", "ts")
Korak 1.6: Ko so dodane vse oznake, ovrednotenje celice "Snemanje vzorca" z zagonom postopka zbiranja vzorcev. V izhodu celice boste morali vnesti kratko oznako, ki ste jo povezali z vsakim zvokom, v oznake (tj. "Ts" za TargetedSound). Ne počni tega še.
Korak 1.7: Odnesite prenosni računalnik v kuhinjo in ga postavite na območje, kjer bi najverjetneje postavili dokončan sistem. To mesto bi moralo biti osrednje za dobro zbiranje zvoka, suho in stran od morebitnega razlitja, da zaščitite svojo elektroniko.
Korak 1.8: Pripravite svoj prvi ciljni zvok. Če je to zvočni signal časovnika pečice, lahko časovnik nastavite na eno minuto in počakate, da odšteva približno 20 sekund, preden nadaljujete na naslednji korak.
Korak 1.9: Vnesite kodo oznake v poziv (tj. "Ts") in pritisnite Enter/Return.
Sistem bo začel poslušati zvočni dogodek, ki se razlikuje od hrupa v prostoru. Ko zazna ta zvočni dogodek, se bo začel snemati, dokler ne zazna, da se zvok v prostoru vrne na raven okolja. Nato bo zvok shranil kot 16-bitno datoteko WAV v imenik, identificiran v SAMPLES_LOCATION, v obliki:
TargetedSound _#_ ujeto.wav
# Del tega imena datoteke ustreza številu vzorcev ciljnega zvoka, ki ste jih zbrali. Ko je datoteka WAV shranjena, se poziv ponovi, kar vam omogoča, da zberete več vzorcev istega zvoka v eni sami izvedbi celice.
NE spreminjajte tega imena datoteke. Pomembno je za naslednji korak.
Korak 1.10: Ponavljajte koraka 1.8 in 1.9, dokler ne zberete 5-10 vzorcev vsakega zvoka.
Korak 1.11: Ko končate, vnesite "x", da zaprete izvedbo.
OPOZORILO: Če na ta način ne zaprete celice, se lahko prenosni računalnik zruši. V tem primeru je treba jedro prenosnika ponastaviti in vsako celico znova zagnati od zgoraj.
Korak 1.11 (izbirno): Preverite podatke WAV posameznih datotek v celici "Hitra vizualizacija zvoka", da se prepričate, da ste zajeli vse želene podatke.
Nekaj nasvetov:
- Zapišite, ko je v vaši kuhinji tiho.
- Posnemite samo en zvok hkrati. Sistem ne more razlikovati prekrivanja zvokov.
- Poskusite, da bo vsak zvočni preizkus čim bolj skladen. To bo pripomoglo k natančnosti identifikacije.
- Ponovna ocena celice za snemanje bo ponastavila vrednost # v imenu datoteke in prepisala vse obstoječe datoteke, ki se ujemajo s tem #. Ugotovili smo, da je najlažje posneti vse vzorce enega zvoka hkrati, nato pa ustaviti celico za snemanje.
- Če sistem ne zazna ciljanega zvoka, poskusite znižati vrednost THRESHOLD (nastavljeno na 30 za zagon) in znova ovrednotite celico.
- Če snemanje sprožijo drugi zvoki zunaj ciljnega, poskusite zvišati vrednost THRESHOLD (nastavljeno na 30 za začetek) in znova ovrednotite celico.
2. korak: Priprava zaslona Arduino/Matrix
Nato bomo vzpostavili sistem za vizualizacijo z uporabo matričnega zaslona LED Arduino Leonardo in KEYESTUDIO 16x16 LED. To je za napoved klasifikacijskega modela zaznanih zvokov. Kot prej smo vse potrebne datoteke zagotovili tako tukaj kot v skladišču projekta GitHub.
Korak 2.1: Povežite Arduino in LED matrico v skladu s zgornjim diagramom. KEYESTUDIO vključuje žice za povezavo z njihovo matrično matrico, vendar bodo za priključitev teh žic na Arduino potrebne žice za skakanje
Korak 2.2: Odprite "arduino_listener.ino" z uporabo Ardunio IDE in ga naložite v Leonardo. Če je ožičenje pravilno, bi morali videti ikono "poslušanje" (izgleda kot Wi-Fi), kot je prikazano na zgornji sliki.
Korak 2.3: Pripravite ikone, ki jih želite prikazati, za vsak vaš ciljni zvok. Če želite vedeti, katere LED svetijo, je treba ikono poslati iz Arduina v matriko kot matriko bajtov. Na primer, naša ikona skodelice za kavo (na zgornji sliki) je poslana matriki v tem formatu:
{
0xff, 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xbb, 0x5b, 0xeb, 0xfb, 0xfb, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf, 0xfb, 0xf7, 0x0f, 0xdf, 0x1f, 0xff, 0xff};
Naše ikone smo narisali s spletnim orodjem Dot2Pic, pri čemer je bilo v spustnem meniju izbranih 16 stolpcev, 16 vrstic in "enobarvno, 8 slikovnih pik na bajt, navpična nastavitev". Naše lahko najdete v matriki "sample_icon_bytes.txt".
OPOMBA: Obstajajo lahko tudi spletna orodja, ki to lahko samodejno naredijo z naloženimi datotekami.
Korak 2.4: Narišite vsako ikono. Ko končate risanje, izberite "Pretvori v matriko".
Korak 2.5: Po želji zamenjajte nepotrebne ikone, določene na vrhu kode "arduino_listening.ino". Dodajte komentar, ki opisuje ikono, da se spomnite, katera je katera!
Korak 2.6: Naložite novo kodo v Arduino. Datoteke še ne zapirajte, potrebovali jo bomo za naslednji korak.
3. korak: Zagon klasifikatorja in prepoznavanje zvokov
Zdaj je čas, da sistem sestavimo. Cevovod razvrščanja, komunikacija Arduino in snemanje zvoka v živo poteka skozi en sam prenosni računalnik Arduino, ki je na voljo tukaj ali do katerega lahko dostopate prek skladišča GitHub našega projekta.
Korak 3.1: Kopirajte prenosni računalnik FullPipeline.ipynb v delovni imenik Jupyter Notebook in ga odprite.
Korak 3.2: Zaženite vsako celico eno za drugo in bodite pozorni na vse zapiske, ki smo jih navedli v naslovih. Nobenega izida ne pričakujemo. Ustavite se, ko pridete do celice z naslovom "Naloži podatke o usposabljanju".
Korak 3.3: Uredite spremenljivko SAMPLES_LOCATION_ROOT v celici "Naloži podatke o usposabljanju" v nadrejeni imenik lokacije prejšnjega vzorčnega imenika. Nato spremenljivko SAMPLES_DIR_NAME spremenite v ime vašega imenika. Torej, če ste lokacijo v CollectSamples.ipynb nastavili na:
SAMPLES_LOCATION = "/Uporabniki/xxxx/Dokumenti/KitchenSoundClassifier/MySamples/NewDir"
Zdaj bi te spremenljivke nastavili na:
SAMPLES_LOCATION_ROOT = "/Uporabniki/xxxx/Dokumenti/KitchenSoundClassifier/MySamples/" SAMPLES_DIR_NAME = "NewDir"
To smo omogočili hitre spremembe klasifikatorja v primeru netočnosti. Za prilagajanje podatkov lahko preklapljate med različnimi zbirkami vzorcev.
Korak 3.4: Ocenite celico. Vsaka zbirka bi morala biti uspešno naložena.
Korak 3.5: Nadaljujte z izvajanjem vsake celice eno za drugo in bodite pozorni na vse opombe, ki smo jih navedli v naslovih.
Korak 3.6: Ko pridete do celice "Sporočila Arduino", se ustavite. V spremenljivki PORT_DEF določite serijska vrata, ki jih bo računalnik uporabljal za komunikacijo z Arduinom. To najdete v Arduino IDE in pojdite na Orodja> Vrata.
Več informacij najdete tukaj.
Korak 3.8: Znova odprite Arduino IDE. Na mestih, kjer ste spremenili ikone, si zabeležite črko poleg vrednosti matrike, vendar je NE spreminjajte. V spodnjem primeru je to "g".
// odlaganje smeticonst unsigned char g [1] [32] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0xf7, 0xfb, 0xff, 0xfe, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x27, 0xc3, 0x03, 0xc3, 0x27, 0x2f, 0xff, 0xef, 0xdf, 0xbf, 0xff, 0xff,};
Korak 3.7: (vrnitev v celico "Sporočila Arduino" prenosnika) Spremenite oznake v slovarju self.sounds, da se ujemajo z nalepkami, ki ste jih uporabili pri snemanju vzorcev, pri čemer pazite, da vsaka oznaka ustreza eni črki, ki ste jo zapisali v prejšnji korak. "Snemanje" in "Poslušanje" sta del osnovne funkcije sistema in jih ne bi smeli spreminjati. Druge črke NE spreminjajte, razen če ste prepričani, da boste naredili tudi nekaj dodatnih sprememb v kodi Arduino, saj bo drugače motila komunikacijo z Arduino/matrico.
Korak 3.8: Zaženite glavno funkcijo! Koda bo zajela podatke o usposabljanju, izvlekla njene ključne lastnosti, jih vnesla v cevovod, zgradila klasifikacijski model in nato začela poslušati zvočne dogodke. Ko zazna eno, boste videli, da se matrika spremeni v snemalni simbol (kvadrat s krogom znotraj), ki bo te podatke segmentiral in jih vnesel v model. Karkoli model napove, se bo prikazalo nekaj sekund kasneje na matričnem zaslonu.
Spodaj lahko sledite izhodu celice. Poglejte, kako natančno ga lahko dobite!
4. korak: Ustvarite ohišje LEGO
To je zabaven del! Opravili ste vse resne korake strojnega učenja in zagnali celoten sistem od konca do konca, zdaj pa se kot nagrada lahko igrate z LEGO-i. Tu ni veliko podrobnosti o podrobnostih. Tu in tam smo dodali bloke, ki so nam bili všeč, ne da bi preveč skrbeli za celotno zasnovo, in na koncu smo bili zadovoljni s tem, kako se je izkazalo.
Dovolite, da naše slike služijo kot navdih za vaše ustvarjalno stanovanje, edinstveno za vašo kuhinjo. Arduino in večino ožičenja smo postavili v votlo ohišje, nato pa matrični zaslon zgoraj pritrdili s previsi. Na zaslon smo dodali malo papirja, da smo svetlobo rahlo razpršili, zaradi česar so bile ikone jasnejše.
Priporočena:
Zvočni senzor in servo: reaktivno gibanje: 4 koraki
Zvočni senzor in servo: reaktivno gibanje: Najprej morate zbrati ustrezne materiale, da sestavite to vezje
Uporabite zvočni signal na Magicbitu [Magicblocks]: 4 koraki
Uporabite brenčalo na Magicbitu [Magicblocks]: Ta vadnica vas bo naučila uporabljati brenčalo na Magicbitu z uporabo Magicblocks. Kot razvojno ploščo v tem projektu, ki temelji na ESP32, uporabljamo magicbit. Zato je v tem projektu mogoče uporabiti katero koli razvojno ploščo ESP32
RGB osvetlitev ozadja + zvočni vizualizator: 4 koraki (s slikami)
RGB osvetlitev ozadja + zvočni vizualizator: Dobrodošli v mojih navodilih o tem, kako zgraditi osvetlitev RGB LED za npr. Shema je zelo preprosta, saj so LED trakovi WS2812 zelo enostavni za vmesnik, na primer Arduino Nano. Opomba: pri nas vam ni treba
Car Horn - zvočni učinki po meri: 4 koraki (s slikami)
Car Horn - zvočni učinki po meri: v avto sem namestil zvočne učinke hupe po mojih videoposnetkih iz YouTuba, ki sta jih napisala Mark Rober in I Like To Make Stuff Osnovni avtomobilski hupa potrebuje več možnosti za učinkovito komunikacijo med vozniki, po mojem mnenju. Kjer sem iz standardnega avtomobilskega truba, ima
Ellie Ment Identifikator elementa: 4 koraki
Ellie Ment the Identifier Identifier: Ellie je Roomba, ki je bila programirana tako, da lahko s kamero zazna različne barve in zazna, če gre čez pečino, da se ne more prevrniti in se bo umaknila s poti ovire, ko so njeni odbijači zadeli nekaj