Sisällysluettelo:

Mukautettu keittiön äänitunniste: 4 vaihetta
Mukautettu keittiön äänitunniste: 4 vaihetta

Video: Mukautettu keittiön äänitunniste: 4 vaihetta

Video: Mukautettu keittiön äänitunniste: 4 vaihetta
Video: Korkealaatuinen rgb-led-neonlangan joustava kevyt nauhaköysi joustava räätälöinti,OEM,Kiina,Hinta 2024, Marraskuu
Anonim
Image
Image
Mukautettu keittiön äänitunniste
Mukautettu keittiön äänitunniste

Tämän kevään interaktiivisten järjestelmien kurssin viimeistä projektia varten loimme reaaliaikaisen järjestelmän keittiön yleisten äänien tunnistamiseksi ja visualisoimiseksi Support-Vector Machine -luokituksen avulla. Järjestelmä koostuu kannettavasta tietokoneesta näytteenottoa/luokittelua varten ja Arduino/pistematriisinäyttöä visualisointia varten. Seuraavassa on opas oman version luomiseen tästä järjestelmästä oman keittiön ääniä varten.

Alkuperäinen käyttötapa oli kuurojen ja kuulovammaisten keittiöön tarkoitettu laite, mutta tätä järjestelmää voitaisiin teoriassa mukauttaa tunnistamaan joukko ääniä eri yhteyksissä. Keittiö oli ihanteellinen paikka aloittaa, koska se on yleensä suhteellisen hiljainen ja sisältää kohtuullisen määrän yksinkertaisia, selkeitä ääniä.

Projektin GitHub -arkisto löytyy täältä.

Tarvikkeet

  • Arduino Leonardo -mikro -ohjain otsikoilla
  • KEYESTUDIO 16x16 pistematriisin LED -näyttö Arduinolle
  • Leipälaudan hyppyjohdin
  • Micro-USB-USB 2.0 -kaapeli
  • Kannettava tietokone, jossa on Jupyter -muistikirja (Anaconda -asennus)

    Aloittelijan opas Jupyter -muistikirjaan löytyy täältä

  • Huomattava määrä yhteensopimattomia LEGO -palikoita järjestelmän koteloon

    (Mutta todella voit korvata ne millä tahansa itse tekemälläsi rakennusmateriaalilla!)

Vaihe 1: Keittiön ääninäytteiden kerääminen

Keittiön ääninäytteiden kerääminen
Keittiön ääninäytteiden kerääminen

Kuva yllä: Äänitiedot, jotka on otettu haarukan ja veitsen kolinaamisen tallentamisesta tällä keräysprosessilla

Jotta voimme tunnistaa reaaliaikaiset äänet, meidän on toimitettava koneoppimismallimme vertailukohteiksi. Olemme luoneet tätä prosessia varten Jupyter -muistikirjan, joka on käytettävissä täällä tai projektimme GitHub -arkiston kautta. Varasto sisältää myös näytekokoelmia kahdesta eri keittiöstä testausta varten.

Vaihe 1.1: Kopioi CollectSamples.ipynb -muistikirja toimivaan Jupyter Notebook -hakemistoosi ja avaa se.

Vaihe 1.2: Suorita jokainen solu yksi kerrallaan ja kiinnitä huomiota kaikkiin otsikoissa annettuihin huomautuksiin. Pysäytä, kun saavutat yhden näytteen tallennuksen.

HUOMAUTUS: Tässä muistikirjassa käytetään useita Python -kirjastoja, ja jokainen niistä vaatii asennuksen, ennen kuin ne voidaan tuoda onnistuneesti projektiin. Voit tehdä tämän manuaalisesti, mutta opas kirjaston asentamiseen Jupyter -muistikirjaan löytyy täältä.

Vaihe 1.3: Luo tyhjä hakemisto näytteiden tallentamiseksi tämän projektin työhakemistoosi.

Vaihe 1.4: Muokkaa SAMPLES_LOCATION -muuttujaa "Sample Recording" -solussa vastaamaan tyhjän hakemistosi sijaintia.

Vaihe 1.5: Lisää tai poista SOUND_LABELS -muuttujaan niin monta ääntä kuin haluat.

Jotta näytteen tallennuskoodi toimisi, tämän muuttujan jokainen rivi on erotettava pilkulla ja seuraavassa muodossa:

'ts': Ääni ("TargetedSound", "ts")

Vaihe 1.6: Kun kaikki tarrat on lisätty, "Näytteen tallennus" -solun arvioiminen käynnistä näytteenkeräysprosessi. Solun tulostuksessa sinua kehotetaan syöttämään lyhyt koodi, jonka olet liittänyt jokaiseen ääniin tarroissa (ts. "Ts" TargetedSoundille). Älä tee tätä vielä.

Vaihe 1.7: Ota kannettava tietokone keittiöön ja aseta se alueelle, johon todennäköisimmin sijoittaisit valmiin järjestelmän. Tämän sijainnin tulisi olla keskeinen hyvän äänikokoelman kannalta ja kuiva ja kaukana mahdollisista roiskeista elektroniikan suojaamiseksi.

Vaihe 1.8: Valmista ensimmäinen kohdistettu ääni. Jos tämä on uunin ajastimen piippaus, voit asettaa ajastimen minuutiksi ja odottaa, että se laskee noin 20 sekuntiin, ennen kuin jatkat seuraavaan vaiheeseen.

Vaihe 1.9: Kirjoita tarrakoodi kehotteeseen (ts. "Ts") ja paina Enter/Return.

Järjestelmä alkaa kuunnella äänitapahtumaa, joka eroaa huoneen ympäristön melusta. Kun tämä äänitapahtuma havaitaan, se aloittaa tallennuksen, kunnes se havaitsee huoneen äänen palautuneen ympäristön tasolle. Sitten se tallentaa äänen 16-bittisenä WAV-tiedostona SAMPLES_LOCATION-tunnistettuun hakemistoon seuraavassa muodossa:

TargetedSound _#_ captured.wav

Tämän tiedostonimen # osa vastaa keräämäsi kohdeäänen näytteiden määrää. Kun WAV -tiedosto on tallennettu, kehote toistetaan, jolloin voit kerätä useita näytteitä samasta äänestä yhdessä solun suorittamisessa.

ÄLÄ muuta tätä tiedostonimeä. Se on tärkeää seuraavassa vaiheessa.

Vaihe 1.10: Toista vaiheita 1.8 ja 1.9, kunnes olet kerännyt 5-10 näytettä jokaisesta äänestä.

Vaihe 1.11: Lopeta suoritus syöttämällä "x", kun olet valmis.

VAROITUS: Jos solua ei suljeta tällä tavalla, Notebook voi kaatua. Tässä tapauksessa Notebookin ydin on nollattava ja jokainen solu suoritettava uudelleen ylhäältä.

Vaihe 1.11 (valinnainen): Tarkista "Quick Sound Visualization" -solun yksittäisten tiedostojen WAV -tiedot varmistaaksesi, että olet tallentanut kaikki halutut tiedot.

Joitakin vinkkejä:

  • Tallenna, kun keittiösi on hiljainen.
  • Tallenna vain yksi ääni kerrallaan. Järjestelmä ei voi erottaa päällekkäisyyksiä äänissä.
  • Yritä tehdä jokaisesta äänikokeesta mahdollisimman johdonmukainen. Tämä auttaa tunnistuksen tarkkuudessa.
  • Tallennussolun uudelleenarviointi nollaa tiedostonimen # -arvon ja korvaa kaikki olemassa olevat tiedostot, jotka vastaavat # -merkkiä. Huomasimme helpoimmaksi tallentaa kaikki ääninäytteet kerralla ja pysäyttää sitten tallennussolun.
  • Jos järjestelmä ei vastaanota kohdeääntäsi, yritä laskea THRESHOLD -arvoa (asetettu arvoon 30 aloittaaksesi) ja arvioi solu uudelleen.
  • Jos tallennus laukaistaan muista kohdeäänen ulkopuolisista äänistä, kokeile nostaa THRESHOLD -arvoa (asetettu arvoon 30 aloittaaksesi) ja arvioida solu uudelleen.

Vaihe 2: Arduino/Matrix -näytön valmistelu

Arduino/Matrix -näytön valmistelu
Arduino/Matrix -näytön valmistelu
Arduino/Matrix -näytön valmistelu
Arduino/Matrix -näytön valmistelu
Arduino/Matrix -näytön valmistelu
Arduino/Matrix -näytön valmistelu

Seuraavaksi asennamme visualisointijärjestelmän käyttämällä Arduino Leonardo- ja KEYESTUDIO 16x16 LED -pistematriisinäyttöä. Tämä antaa luokitusmallin ennustaman havaitut äänet. Kuten aiemmin, olemme toimittaneet kaikki tarvittavat tiedostot sekä täällä että projektin GitHub -arkistossa.

Vaihe 2.1: Johda Arduino- ja LED -matriisi yllä olevan kaavion mukaisesti. KEYESTUDIO sisältää johdot pistematriisiin yhdistämistä varten, mutta leipälevyn hyppyjohdot tarvitaan näiden johtojen liittämiseen Arduinoon

Vaihe 2.2: Avaa "arduino_listener.ino" Ardunio IDE: llä ja lataa se Leonardoon. Jos johdot on kytketty oikein, sinun pitäisi nähdä "kuuntelu" -kuvake (näyttää Wi-Fi: ltä), kuten yllä olevassa kuvassa näkyy.

Vaihe 2.3: Valmistele näytettävät kuvakkeet kullekin kohdeäänelle. Jos haluat tietää, mitkä LED -valot syttyvät, kuvake on lähetettävä Arduinosta matriisiin tavutaulukkona. Esimerkiksi kahvikupin kuvake (yllä olevassa kuvassa) lähetetään matriisiin tässä muodossa:

{

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

Piirrämme kuvakkeet Dot2Pic -verkkotyökalulla, jossa on 16 saraketta, 16 riviä ja avattavasta valikosta valittuna "yksivärinen, 8 pikseliä tavua kohti, pystysuora asetus". Meidät löytyvät "sample_icon_bytes.txt" -matriisista.

HUOMAUTUS: Saattaa olla myös online -työkaluja, jotka voivat tehdä tämän automaattisesti ladatuilla tiedostoilla.

Vaihe 2.4: Piirrä jokainen kuvake. Kun olet piirtänyt, valitse "Muunna taulukkoksi".

Vaihe 2.5: Vaihda tarpeettomat kuvakkeet "arduino_listening.ino" -koodin yläosassa halutulla tavalla. Muista lisätä kuvaketta kuvaava kommentti, jotta muistat mikä on!

Vaihe 2.6: Lataa uusi koodi Arduinolle. Älä sulje tiedostoa vielä, tarvitsemme sitä seuraavassa vaiheessa.

Vaihe 3: Suorita luokittelija ja tunnista äänet

Suorita luokittelija ja tunnista äänet
Suorita luokittelija ja tunnista äänet
Suorita luokittelija ja tunnista äänet
Suorita luokittelija ja tunnista äänet

Nyt on aika koota järjestelmä yhteen. Luokitusputki, Arduino -tiedonsiirto ja reaaliaikainen äänitallennus tehdään kaikki yhden Arduino -muistikirjan kautta, joka on toimitettu täällä tai jota voidaan käyttää projektimme GitHub -arkiston kautta.

Vaihe 3.1: Kopioi FullPipeline.ipynb -muistikirja toimivaan Jupyter Notebook -hakemistoosi ja avaa se.

Vaihe 3.2: Suorita jokainen solu yksi kerrallaan ja kiinnitä huomiota kaikkiin otsikoissa annettuihin huomautuksiin. Tuotosta ei ole odotettavissa. Pysäytä, kun saavut soluun "Lataa harjoitustiedot".

Vaihe 3.3: Muokkaa SAMPLES_LOCATION_ROOT -muuttujaa "Lataa harjoitustiedot" -solussa aiemman näytehakemistosi sijainnin päähakemistoon. Muuta sitten muuttuja SAMPLES_DIR_NAME hakemistosi nimeksi. Joten jos olisit asettanut sijainnin CollectSamples.ipynb -muodossa:

SAMPLES_LOCATION = "/Users/xxxx/Documents/KitchenSoundClassifier/MySamples/NewDir"

Määrität nyt nämä muuttujat:

SAMPLES_LOCATION_ROOT = "/Users/xxxx/Documents/KitchenSoundClassifier/MySamples/" SAMPLES_DIR_NAME = "NewDir"

Teimme tämän mahdollistamaan nopeat muutokset luokitukseen epätarkkuuden sattuessa. Voit virittää tietoja vaihtamalla eri mallikokoelmien välillä.

Vaihe 3.4: Arvioi solu. Sinun pitäisi nähdä jokainen kokoelma ladattu onnistuneesti.

Vaihe 3.5: Jatka jokaisen solun suorittamista yksitellen kiinnittäen huomiota kaikkiin otsikoissa annettuihin huomautuksiin.

Vaihe 3.6: Pysäytä, kun tulet "Messaging Arduino" -soluun. Määritä sarjaportti, jota tietokoneesi käyttää viestintään Arduinon kanssa, PORT_DEF -muuttujassa. Tämä löytyy Arduino IDE: stä ja sieltä Työkalut> Portti.

Lisätietoja löytyy täältä.

Vaihe 3.8: Avaa Arduino IDE uudelleen. Jos olet tehnyt muutoksia kuvakkeisiin, kirjoita muistiin taulukon arvon vieressä oleva kirjain, mutta ÄLÄ muuta sitä. Alla olevassa esimerkissä tämä on "g".

// jätteenkäsittelyconst unsigned char g [1] [32] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0xf7, 0xfb, 0xff, 0xfe, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x27, 0xc3, 0x03, 0xc3, 0x27, 0x2f, 0xff, 0xef, 0xdf, 0xbf, 0xff, 0xff,};

Vaihe 3.7: (Palaaminen muistikirjan "Messaging Arduino" -soluun) Muuta self.sounds -sanakirjan tarrat vastaamaan näytteesi tallentamisessa käyttämiäsi tarroja ja varmista, että jokainen tarra vastaa edellisessä merkitsemääsi kirjainta askel. "Tallennus" ja "Kuuntelu" ovat molemmat osa järjestelmän ydintoimintoja, eikä niitä pidä muuttaa. ÄLÄ muuta toista kirjainta, ellet ole varma muutamasta lisämuutoksesta myös Arduino -koodiin, koska se sotkee viestinnän Arduino/matriisin kanssa.

Vaihe 3.8: Suorita päätoiminto! Koodi nappaa harjoitustiedot, poimii sen tärkeimmät ominaisuudet, syöttää ne prosessiin, rakentaa luokitusmallin ja alkaa kuunnella äänitapahtumia. Kun se havaitsee yhden, näet, että matriisi muuttuu tallennussymboliksi (neliö, jossa on ympyrä), ja se segmentoi nämä tiedot ja syöttää ne malliin. Mitä malli ennustaa, se näkyy muutamaa sekuntia myöhemmin matriisinäytöllä.

Voit seurata solun tuotosta alla. Katso kuinka tarkasti saat sen!

Vaihe 4: LEGO -kotelon luominen

LEGO Housingin luominen
LEGO Housingin luominen
LEGO Housingin luominen
LEGO Housingin luominen
LEGO Housingin luominen
LEGO Housingin luominen

Tämä on hauska osa! Olet tehnyt kaikki vakavat koneoppimisen vaiheet ja saanut koko päästä päähän -järjestelmän käyttöön, ja nyt voit pelata LEGO-palkintoina. Tässä ei ole paljon yksityiskohtia. Lisäsimme juuri tänne ja tänne pidettyjä lohkoja murehtimatta liikaa kokonaissuunnittelusta, ja päädyimme tyytyväisiksi siihen, miten se osoittautui.

Anna kuvien toimia inspiraationa omaan keittiösi ainutlaatuiseen luovaan asuntoon. Sijoitimme Arduinon ja suurimman osan johdotuksista onttoon koteloon ja varmistimme sitten matriisinäytön yläpuolella ulkonemilla. Lisäsimme hieman paperia näytön päälle hajottamaan valoa hieman, mikä mielestämme teki kuvakkeista selkeämpiä.

Suositeltava: