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: Как узнать ID песни в роблокс 🎵 | как найти код музыки в роблоксе 2024, Novembar
Anonim
Image
Image
Prilagođeni identifikator zvuka u kuhinji
Prilagođeni identifikator zvuka u kuhinji

Za naš završni projekt na tečaju interaktivnih sistema ovog proljeća, stvorili smo sistem u stvarnom vremenu za identifikaciju i vizualizaciju uobičajenih zvukova u kuhinji koristeći klasifikaciju Support-Vector Machine. Sistem se sastoji od laptopa za audio uzorkovanje/klasifikaciju i Arduino/matričnog ekrana za vizualizaciju. Slijedi vodič za stvaranje vlastite verzije ovog sistema za zvukove iz vaše kuhinje.

Naš izvorni slučaj upotrebe bio je kao uređaj za kuhinju gluhih i nagluhih osoba, ali bi se ovaj sistem teoretski mogao prilagoditi da identificira skup 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.

Supplies

  • Arduino Leonardo mikrokontroler sa zaglavljima
  • KEYESTUDIO 16x16 matrični LED zaslon za Arduino
  • Žica za kratkospojnike
  • Kabel mikro-USB na USB 2.0
  • Laptop sa Jupyter Notebook -om (instalacija Anaconda)

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

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

    (Ali zaista 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 zveckaju zajedno pomoću ovog procesa prikupljanja

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

Korak 1.1: Kopirajte bilježnicu CollectSamples.ipynb u 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 kada dođete do naslova pod nazivom "Snimanje uzorka".

NAPOMENA: U ovoj se bilježnici koristi nekoliko Python biblioteka, a za svaku je potrebna instalacija prije nego što se uspješno uvezu u projekt. To možete učiniti ručno, iako se vodič za instalaciju biblioteke u Jupyter Notebooku može pronaći ovdje.

Korak 1.3: Kreirajte 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 lokaciji vašeg praznog direktorija.

Korak 1.5: Dodajte ili uklonite onoliko zvukova koliko želite u varijablu SOUND_LABELS.

Da bi uzorak koda za snimanje funkcionirao, svaki red ove varijable mora biti odvojen 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). Nemoj to još raditi.

Korak 1.7: Odnesite svoj laptop u kuhinju i postavite ga u prostor u kojem biste najvjerovatnije smjestili gotov sistem. Ova lokacija trebala bi biti središnja za dobro prikupljanje zvuka, te suha i dalje 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 kod oznake u upit (tj. "Ts") i pritisnite Enter/Return.

Sistem će početi da sluša zvučne događaje koji se razlikuju od ambijentalne buke u prostoriji. Nakon što osjeti ovaj zvučni događaj, započet će snimanje sve dok ne osjeti da se zvuk u prostoriji vratio na ambijentalne nivoe. Zatim će zvuk spremiti kao 16-bitnu WAV datoteku u direktorij identificiran u SAMPLES_LOCATION u formatu:

TargetedSound _#_ closed.wav

# Dio imena ove datoteke odgovara broju uzoraka ciljanog zvuka koji ste prikupili. Nakon što je WAV datoteka spremljena, upit će se ponoviti, omogućavajući vam da prikupite nekoliko uzoraka istog zvuka u jednoj izvedbi ćelije.

NE mijenjajte ovaj naziv datoteke. To je važno 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 da biste izašli iz izvođenja.

UPOZORENJE: Ako na ovaj način ne izađete iz ćelije, može doći do pada računara. U ovom slučaju, jezgro Notebooka se mora resetovati i svaka ćelija će se ponovo pokrenuti odozgo.

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

Nekoliko savjeta:

  • Snimajte kada je vaša kuhinja tiha.
  • Snimite samo jedan zvuk odjednom. Sistem ne može razlikovati preklapanje zvukova.
  • Pokušajte da svako zvučno ispitivanje bude što dosljednije. To će pomoći u tačnosti identifikacije.
  • Ponovna procjena ćelije za snimanje će poništiti vrijednost # u imenu datoteke i prebrisati sve postojeće datoteke koje odgovaraju tom #. Utvrdili smo da je najlakše snimiti sve uzorke jednog zvuka odjednom, a zatim zaustaviti ćeliju za snimanje.
  • Ako sistem 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 sistem vizualizacije pomoću Arduino Leonardo i KEYESTUDIO 16x16 LED matričnog ekrana. Ovo služi za predviđanje detektovanih zvukova klasifikacijskog modela. Kao i prije, osigurali smo sve potrebne datoteke i ovdje i u GitHub spremištu projekta.

Korak 2.1: Povežite Arduino i LED matricu prema gornjem dijagramu. KEYESTUDIO uključuje žice za spajanje na njihovu matricu tačaka, ali će za spajanje ovih žica na Arduino biti potrebne žice kratkospojnika za matičnu ploču.

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, 0xf, 0xfb, 0xf7, 0x0f, 0xdf, 0x1f, 0xff, 0xff};

Ikone smo nacrtali pomoću internetskog alata Dot2Pic, sa 16 stupaca, 16 redova i "jednobojno, 8 piksela po bajtu, okomita postavka" odabrano iz 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 postavljenim datotekama.

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

Korak 2.5: Zamijenite nepotrebne ikone definirane na vrhu koda "arduino_listening.ino" prema želji. Obavezno dodajte komentar koji opisuje ikonu kako biste zapamtili 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 sistema. Cjevovod klasifikacije, Arduino komunikacija i snimanje zvuka uživo se obavljaju preko 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 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 kada 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 ime vašeg direktorija. 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"

To smo omogućili brze promjene klasifikatora u slučajevima nepreciznosti. 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 koji ć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: Ponovo otvorite svoj Arduino IDE. Na mjestima na kojima ste izvršili izmjene na ikonama 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" Notebooka) 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. I "Snimanje" i "Slušanje" dio su osnovne sistemske funkcionalnosti i ne treba ih mijenjati. NEMOJTE mijenjati drugo slovo osim ako se ne osjećate sigurni da ćete napraviti i neke dodatne izmjene u Arduino kodu, jer će u protivnom poremetiti komunikaciju s Arduinom/matricom.

Korak 3.8: Pokrenite glavnu funkciju! Kod će prikupiti podatke o obuci, izdvojiti njegove ključne karakteristike, unijeti ih u protokol, izgraditi klasifikacijski model, a zatim početi slušati zvučne događaje. Kada to osjeti, vidjet ćete promjenu matrice u simbol za snimanje (kvadrat s krugom unutra) i segmentirat će te podatke i unijeti ih u model. Što god model predvidi, pojavit će se nekoliko sekundi kasnije na matričnom ekranu.

Možete pratiti u donjem izlazu ćelije. Pogledajte koliko precizno to možete postići!

Korak 4: Kreiranje LEGO kućišta

Stvaranje LEGO kućišta
Stvaranje LEGO kućišta
Stvaranje LEGO kućišta
Stvaranje LEGO kućišta
Stvaranje LEGO kućišta
Stvaranje LEGO kućišta

Ovo je zabavan dio! Učinili ste sve ozbiljne korake mašinskog učenja i pokrenuli cijeli end-to-end sistem, a sada se kao nagrada možete igrati LEGO-ovima. Ovdje nema mnogo detalja o procesu koji treba detaljno opisati. Tu i tamo smo samo dodali blokove koji su nam se svidjeli, ne brinući previše 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 za vašu kuhinju. Arduino i većinu ožičenja smjestili smo u šuplje kućište, a zatim matrični zaslon gore učvrstili prevjesima. Dodali smo malo papira preko ekrana kako bismo blago raspršili svjetlo što je učinilo da su ikone jasnije.

Preporučuje se: