Sadržaj:

Prilagođeni identifikator zvuka kuhinje: 4 koraka
Prilagođeni identifikator zvuka kuhinje: 4 koraka

Video: Prilagođeni identifikator zvuka kuhinje: 4 koraka

Video: Prilagođeni identifikator zvuka kuhinje: 4 koraka
Video: оригинальный звук standoff 2❤️ SOUND 2024, Studeni
Anonim
Image
Image
Prilagođeni identifikator zvuka u kuhinji
Prilagođeni identifikator zvuka u kuhinji

Za naš završni projekt na tečaju interaktivnih sustava ovog proljeća, stvorili smo sustav u stvarnom vremenu za identifikaciju i vizualizaciju uobičajenih zvukova u kuhinji pomoću klasifikacije Support-Vector Machine. Sustav se sastoji od prijenosnog računala za audio uzorkovanje/klasifikaciju i Arduino/matričnog zaslona za vizualizaciju. Slijedi vodič za stvaranje vlastite verzije ovog sustava za zvukove iz vlastite kuhinje.

Naš izvorni slučaj uporabe bio je uređaj za kuhinju gluhih i nagluhih osoba, no taj se sustav teoretski mogao prilagoditi za identifikaciju skupa zvukova u različitim kontekstima. Kuhinja je bila idealno mjesto za početak, jer teži biti relativno tiha i sadrži razumnu količinu jednostavnih, različitih zvukova.

GitHub spremište za ovaj projekt možete pronaći ovdje.

Pribor

  • Arduino Leonardo Mikrokontroler sa zaglavljima
  • KEYESTUDIO 16x16 matrični LED zaslon za Arduino
  • Žica za kratkospojnike
  • Kabel mikro-USB na USB 2.0
  • Prijenosno računalo s Jupyter prijenosnim računalom (instalacija Anaconde)

    Vodič za početnike u Jupyter Notebooku možete pronaći ovdje

  • Znatna količina neusklađenih LEGO kockica za kućište sustava

    (Ali doista ih možete zamijeniti bilo kojim DIY građevinskim materijalom koji želite!)

Korak 1: Prikupljanje kuhinjskih zvučnih uzoraka

Prikupljanje kuhinjskih uzoraka zvuka
Prikupljanje kuhinjskih uzoraka zvuka

Slika Gore: Zvučni podaci uzeti sa snimanja vilice i noža koji se zajedno zveckaju ovim postupkom prikupljanja

Kako bismo identificirali zvukove u stvarnom vremenu, moramo našem modelu strojnog učenja dostaviti kvalitetne primjere za usporedbu. Za ovaj proces stvorili smo bilježnicu Jupyter, kojoj se može pristupiti ovdje ili putem spremišta GitHub našeg projekta. Spremište također sadrži zbirke uzoraka iz dvije različite kuhinje za potrebe testiranja.

Korak 1.1: Kopirajte bilježnicu CollectSamples.ipynb u svoj radni direktorij Jupyter Notebook i otvorite je.

Korak 1.2: Pokrenite svaku ćeliju jednu po jednu, obraćajući pažnju na bilješke koje smo naveli u naslovima. Zaustavite se kad dođete do naslova pod nazivom "Snimanje uzorka".

NAPOMENA: U ovoj se bilježnici koristi nekoliko Python knjižnica, a svaka od njih zahtijeva instalaciju prije nego što se mogu uspješno uvesti u projekt. To možete učiniti ručno, iako se vodič za instalaciju knjižnice u Jupyter Notebooku može pronaći ovdje.

Korak 1.3: Izradite prazan direktorij za spremanje uzoraka u vaš radni direktorij za ovaj projekt.

Korak 1.4: Uredite varijablu SAMPLES_LOCATION u ćeliji "Snimanje uzorka" tako da odgovara mjestu vašeg praznog direktorija.

Korak 1.5: Dodajte ili uklonite koliko god zvukova želite varijabli SOUND_LABELS.

Da bi kod za snimanje uzorka funkcionirao, svaki redak ove varijable mora biti odijeljen zarezom i sljedećeg oblika:

'ts': Zvuk ("TargetedSound", "ts")

Korak 1.6: Nakon dodavanja svih oznaka, ocjenjivanje ćelije "Snimanje uzorka" s pokretanjem procesa prikupljanja uzoraka. U izlazu ćelije od vas će se tražiti da u oznake unesete kratki kôd koji ste povezali sa svakim zvukom (tj. "Ts" za TargetedSound). Nemojte to još činiti.

Korak 1.7: Odnesite prijenosno računalo u kuhinju i postavite ga na mjesto na kojem biste najvjerojatnije smjestili gotov sustav. Ovo mjesto treba biti središnje mjesto za dobro prikupljanje zvuka, te suho i daleko od svih mogućih izlijevanja radi zaštite vaše elektronike.

Korak 1.8: Pripremite svoj prvi ciljani zvuk. Ako se radi o zvučnom signalu timera pećnice, možete postaviti mjerač na jednu minutu i pričekati da odbroji otprilike 20 sekundi prije nego prijeđete na sljedeći korak.

Korak 1.9: Upišite kôd oznake u upit (tj. "Ts") i pritisnite Enter/Return.

Sustav će početi osluškivati zvučni događaj koji se razlikuje od buke u prostoriji. Nakon što osjeti ovaj zvučni događaj, počet će snimati sve dok ne osjeti da se zvuk u prostoriji vratio na ambijentalnu razinu. Zatim će zvuk spremiti kao 16-bitnu WAV datoteku u direktorij identificiran u SAMPLES_LOCATION u formatu:

TargetedSound _#_ uhvaćen.wav

# Dio naziva datoteke odgovara broju uzoraka ciljanog zvuka koji ste prikupili. Nakon spremanja WAV datoteke, upit će se ponoviti, dopuštajući vam da prikupite nekoliko uzoraka istog zvuka u jednoj izvedbi ćelije.

NE mijenjajte ovaj naziv datoteke. Važno je za sljedeći korak.

Korak 1.10: Ponavljajte korake 1.8 i 1.9 dok ne prikupite 5-10 uzoraka svakog zvuka.

Korak 1.11: Unesite "x" kada završite za izlaz iz izvođenja.

UPOZORENJE: Neuspjeh napuštanja ćelije na ovaj način može uzrokovati pad prijenosnog računala. U tom slučaju jezgru prijenosnog računala morate resetirati i svaku ćeliju ponovno pokrenuti s vrha.

Korak 1.11 (Izborno): Provjerite WAV podatke pojedinih datoteka u ćeliji "Brza vizualizacija zvuka" kako biste bili sigurni da ste uhvatili sve željene podatke.

Neki savjeti:

  • Snimajte kad vam je kuhinja tiha.
  • Snimite samo jedan zvuk odjednom. Sustav ne može razlikovati preklapanje zvukova.
  • Pokušajte svako zvučno ispitivanje učiniti što dosljednijim. To će pomoći točnosti identifikacije.
  • Ponovna procjena ćelije za snimanje poništit će vrijednost # u nazivu datoteke i prebrisati sve postojeće datoteke koje odgovaraju tom #. Bilo nam je najjednostavnije snimiti sve uzorke jednog zvuka odjednom, a zatim zaustaviti ćeliju za snimanje.
  • Ako sustav ne hvata vaš ciljani zvuk, pokušajte smanjiti vrijednost THRESHOLD (postavite na 30 za početak) i ponovno procijenite ćeliju.
  • Ako snimanje pokreću drugi zvukovi izvan ciljanog, pokušajte povećati vrijednost THRESHOLD (postavite na 30 za početak) i ponovno procijenite ćeliju.

Korak 2: Priprema Arduino/Matrix zaslona

Priprema Arduino/Matrix zaslona
Priprema Arduino/Matrix zaslona
Priprema Arduino/Matrix zaslona
Priprema Arduino/Matrix zaslona
Priprema Arduino/Matrix zaslona
Priprema Arduino/Matrix zaslona

Zatim ćemo postaviti sustav vizualizacije pomoću Arduino Leonardo i KEYESTUDIO 16x16 LED matričnog zaslona. Time se dobiva predviđanje otkrivenih zvukova klasifikacijskim modelom. Kao i prije, osigurali smo sve potrebne datoteke i ovdje i u spremištu projekta GitHub.

Korak 2.1: Povežite Arduino i LED matricu prema gornjem dijagramu. KEYESTUDIO uključuje žice za povezivanje s njihovom matricom točaka, ali će za spajanje ovih žica na Arduino biti potrebne žice kratkospojnika

Korak 2.2: Otvorite "arduino_listener.ino" pomoću Ardunio IDE -a i prenesite ga u Leonardo. Ako je ožičenje ispravno, trebali biste vidjeti ikonu "slušanje" (izgleda kao Wi-Fi) kao što je prikazano na gornjoj slici.

Korak 2.3: Pripremite ikone koje želite prikazati za svaki od vaših ciljnih zvukova. Da biste znali koje LED diode svijetliti, ikona se mora poslati iz Arduina u matricu kao niz bajtova. Na primjer, naša ikona šalice za kavu (na gornjoj slici) šalje se u matricu u ovom formatu:

{

0xff, 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xbb, 0x5b, 0xeb, 0xfb, 0xfb, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xb, 0xfb, 0xf7, 0x0f, 0xdf, 0x1f, 0xff, 0xff};

Ikone smo nacrtali pomoću internetskog alata Dot2Pic, sa 16 stupaca, 16 redaka i "jednobojno, 8 piksela po bajtu, okomita postavka" odabrano s padajućeg izbornika. Naši se mogu pronaći u nizu "sample_icon_bytes.txt".

NAPOMENA: Možda postoje i mrežni alati koji to mogu učiniti automatski s prenesenim datotekama.

Korak 2.4: Nacrtajte svaku ikonu. Kad završite s crtanjem, odaberite "Pretvori u niz".

Korak 2.5: Zamijenite nepotrebne ikone definirane na vrhu koda "arduino_listening.ino" po želji. Svakako dodajte komentar koji opisuje ikonu kako biste se sjetili koja je koja!

Korak 2.6: Prenesite novi kôd na Arduino. Nemojte još zatvarati datoteku, trebat će nam za sljedeći korak.

Korak 3: Pokretanje klasifikatora i identificiranje zvukova

Pokretanje klasifikatora i identificiranje zvukova
Pokretanje klasifikatora i identificiranje zvukova
Pokretanje klasifikatora i identificiranje zvukova
Pokretanje klasifikatora i identificiranje zvukova

Sada je vrijeme za sastavljanje sustava. Cjevovod klasifikacije, Arduino komunikacija i snimanje zvuka uživo odvijaju se putem jedne Arduino bilježnice, koja je ovdje dostupna ili kojoj se može pristupiti putem spremišta GitHub našeg projekta.

Korak 3.1: Kopirajte bilježnicu FullPipeline.ipynb u svoj radni direktorij Jupyter Notebook i otvorite je.

Korak 3.2: Pokrenite svaku ćeliju jednu po jednu, obraćajući pažnju na bilješke koje smo naveli u naslovima. Ne očekuje se izlaz. Zaustavite se kad dođete do ćelije pod nazivom "Učitaj podatke o obuci".

Korak 3.3: Uredite varijablu SAMPLES_LOCATION_ROOT u ćeliji "Učitaj podatke o obuci" u nadređeni direktorij lokacije vašeg ranijeg uzorka. Zatim promijenite SAMPLES_DIR_NAME varijablu u naziv vašeg imenika. Dakle, ako ste postavili lokaciju u CollectSamples.ipynb na:

SAMPLES_LOCATION = "/Korisnici/xxxx/Dokumenti/KitchenSoundClassifier/MySamples/NewDir"

Sada biste ove varijable postavili na:

SAMPLES_LOCATION_ROOT = "/Korisnici/xxxx/Dokumenti/KitchenSoundClassifier/Moji uzorci/" SAMPLES_DIR_NAME = "NewDir"

Time smo omogućili brze promjene klasifikatora u slučajevima netočnosti. Možete se prebacivati između različitih zbirki uzoraka za podešavanje podataka.

Korak 3.4: Procijenite ćeliju. Trebali biste vidjeti da je svaka zbirka uspješno učitana.

Korak 3.5: Nastavite pokretati svaku ćeliju jednu po jednu, obraćajući pažnju na bilješke koje smo naveli u naslovima.

Korak 3.6: Zaustavite se kada dođete do ćelije "Poruke Arduino". Odredite serijski port koje će vaše računalo koristiti za komunikaciju s Arduinom u varijabli PORT_DEF. To se može pronaći u Arduino IDE -u i otići na Tools> Port.

Više informacija možete pronaći ovdje.

Korak 3.8: Ponovno otvorite svoj Arduino IDE. Na mjestima na kojima ste izvršili izmjene ikona zabilježite slovo pored vrijednosti niza, ali ga NE mijenjajte. U donjem primjeru ovo je "g".

// odlaganje smećaconst 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: (Vraćanje u ćeliju "Messaging Arduino" Bilježnice) Promijenite oznake u rječniku self.sounds tako da odgovaraju oznakama koje ste koristili pri snimanju uzoraka, pazeći da svaka oznaka odgovara jednom slovu koje ste naveli u prethodnom korak. "Snimanje" i "Slušanje" dio su osnovne funkcionalnosti osnovnog sustava i ne treba ih mijenjati. NEMOJTE mijenjati drugo slovo osim ako se ne osjećate sigurni da ćete unijeti i neke dodatne izmjene u Arduino kôd jer će to u protivnom poremetiti komunikaciju s Arduinom/matricom.

Korak 3.8: Pokrenite glavnu funkciju! Kôd će prikupiti podatke o obuci, izdvojiti njegove ključne značajke, unijeti ih u cjevovod, izgraditi klasifikacijski model, a zatim početi osluškivati zvučne događaje. Kad to osjeti, vidjet ćete da se matrica mijenja u simbol za snimanje (kvadrat s krugom unutra) i segmentirat će te podatke te ih unijeti u model. Što god model predvidi, pojavit će se nekoliko sekundi kasnije na matričnom zaslonu.

Možete pratiti dolje u ispisu ćelije. Provjerite koliko to možete postići!

Korak 4: Stvaranje LEGO kućišta

Izrada LEGO kućišta
Izrada LEGO kućišta
Izrada LEGO kućišta
Izrada LEGO kućišta
Izrada LEGO kućišta
Izrada LEGO kućišta

Ovo je zabavni dio! Učinili ste sve ozbiljne korake strojnog učenja i pokrenuli cijeli end-to-end sustav, a sada se kao nagrada možete igrati s LEGO-ovima. Ovdje nema puno detalja o detaljima. Tu i tamo smo samo dodali blokove koji su nam se svidjeli, a da nismo previše brinuli o cjelokupnom dizajnu, i na kraju smo bili zadovoljni kako je ispalo.

Dopustite našim slikama da posluže kao inspiracija za vaše kreativno stanovanje jedinstveno u vašoj kuhinji. Arduino i većinu ožičenja smjestili smo u šuplje kućište, a zatim matrice iznad pričvrstili prevjesima. Dodali smo malo papira preko zaslona kako bismo lagano raspršili svjetlo što je učinilo da su ikone jasnije.

Preporučeni: