Obsah:

Vlastní kuchyňský zvukový identifikátor: 4 kroky
Vlastní kuchyňský zvukový identifikátor: 4 kroky

Video: Vlastní kuchyňský zvukový identifikátor: 4 kroky

Video: Vlastní kuchyňský zvukový identifikátor: 4 kroky
Video: Jak odemknout fabii bez klíčů rukama za 2 vteřiny 2024, Listopad
Anonim
Image
Image
Vlastní identifikátor zvuku kuchyně
Vlastní identifikátor zvuku kuchyně

Pro náš závěrečný projekt v kurzu interaktivních systémů letos na jaře jsme vytvořili systém v reálném čase pro identifikaci a vizualizaci běžných zvuků v kuchyni pomocí klasifikace Support-Vector Machine. Systém se skládá z notebooku pro vzorkování/klasifikaci zvuku a displeje Arduino/dot matrix pro vizualizaci. Následuje průvodce vytvořením vlastní verze tohoto systému pro zvuky z vaší vlastní kuchyně.

Náš původní případ použití byl jako zařízení pro kuchyň neslyšících a nedoslýchavých jedinců, ale tento systém by teoreticky mohl být přizpůsoben k identifikaci sady zvuků v různých kontextech. Kuchyně byla ideálním místem pro začátek, protože bývá relativně tichá a obsahuje přiměřené množství jednoduchých, výrazných zvuků.

Úložiště GitHub pro tento projekt najdete zde.

Zásoby

  • Mikrokontrolér Arduino Leonardo se záhlavími
  • KEYESTUDIO 16x16 Dot Matrix LED displej pro Arduino
  • Drátěný propojovací drát
  • Micro-USB na USB 2.0 kabel
  • Notebook s notebookem Jupyter (instalace Anaconda)

    Průvodce pro Jupyter Notebook pro začátečníky naleznete zde

  • Značné množství neodpovídajících LEGO kostek pro uložení systému

    (Ale ve skutečnosti je můžete nahradit jakýmkoli stavebním materiálem, který byste chtěli!)

Krok 1: Sběr vzorků zvuku z kuchyně

Sběr vzorků zvuku z kuchyně
Sběr vzorků zvuku z kuchyně

Obrázek výše: Zvuková data převzatá ze záznamu cinkání vidličky a nože dohromady pomocí tohoto procesu sběru

Abychom mohli identifikovat zvuky v reálném čase, musíme svému modelu strojového učení dodat kvalitní příklady pro srovnání. Pro tento proces jsme vytvořili notebook Jupyter, ke kterému lze přistupovat zde nebo prostřednictvím úložiště GitHub našeho projektu. Úložiště také obsahuje ukázkové kolekce ze dvou různých kuchyní pro účely testování.

Krok 1.1: Zkopírujte notebook CollectSamples.ipynb do pracovního adresáře Jupyter Notebook a otevřete jej.

Krok 1.2: Spusťte každou buňku jednu po druhé a věnujte pozornost všem poznámkám, které jsme uvedli v nadpisech. Zastavte se, jakmile dosáhnete jednoho s názvem „Sample Recording“.

POZNÁMKA: V tomto poznámkovém bloku je použito několik knihoven Pythonu a každá z nich vyžaduje instalaci, než je lze úspěšně importovat do projektu. Můžete to udělat ručně, i když průvodce instalací knihovny v Jupyter Notebooku najdete zde.

Krok 1.3: Vytvořte prázdný adresář pro uložení vzorků do pracovního adresáře pro tento projekt.

Krok 1.4: Upravte proměnnou SAMPLES_LOCATION v buňce „Sample Recording“tak, aby odpovídala umístění vašeho prázdného adresáře.

Krok 1.5: Přidejte nebo odeberte libovolný počet zvuků do proměnné SOUND_LABELS.

Aby fungoval ukázkový záznamový kód, musí být každý řádek této proměnné oddělen čárkou a v následujícím tvaru:

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

Krok 1.6: Když byly přidány všechny štítky, vyhodnocení buňky „Sample Recording“se zahájením procesu odběru vzorku. Ve výstupu buňky budete vyzváni k zadání krátkého kódu, který jste přidružili ke každému zvuku na štítcích (tj. „Ts“pro TargetedSound). Zatím to nedělejte.

Krok 1.7: Vezměte svůj notebook do kuchyně a umístěte jej do oblasti, kde byste pravděpodobně umístili hotový systém. Toto místo by mělo být ústředním bodem dobrého sběru zvuku a suché a mimo dosah případných úniků, aby byla chráněna vaše elektronika.

Krok 1.8: Připravte si svůj první cílený zvuk. Pokud se jedná o pípnutí časovače trouby, můžete nastavit časovač na jednu minutu a počkat, až se odpočítá do 20 sekund, než budete pokračovat k dalšímu kroku.

Krok 1.9: Do výzvy zadejte kód štítku (tj. „Ts“) a stiskněte Enter/Return.

Systém začne poslouchat zvukovou událost odlišnou od okolního hluku v místnosti. Po rozpoznání této zvukové události začne nahrávat, dokud nezjistí, že se zvuk v místnosti vrátil na úroveň prostředí. Poté uloží zvuk jako 16bitový soubor WAV do adresáře identifikovaného v SAMPLES_LOCATION ve formátu:

TargetedSound _#_ zachyceno.wav

Část # tohoto názvu souboru odpovídá počtu vzorků cíleného zvuku, který jste shromáždili. Po uložení souboru WAV se výzva opakuje, což vám umožní shromáždit několik vzorků stejného zvuku v jednom spuštění buňky.

NEZMĚŇTE tento název souboru. Je to důležité pro další krok.

Krok 1.10: Opakujte kroky 1.8 a 1.9, dokud nesbíráte 5-10 vzorků každého zvuku.

Krok 1.11: Po dokončení zadejte „x“a ukončete provádění.

VAROVÁNÍ: Pokud buňku tímto způsobem neukončíte, může dojít k selhání notebooku. V takovém případě musí být jádro notebooku resetováno a každá buňka musí být spuštěna znovu shora.

Krok 1.11 (Volitelné): Zkontrolujte data WAV jednotlivých souborů v buňce „Rychlá vizualizace zvuku“, abyste se ujistili, že jste zachytili všechny požadované informace.

Některé tipy:

  • Nahrávejte, když je vaše kuchyň tichá.
  • Nahrávejte pouze jeden zvuk najednou. Systém nedokáže rozlišit překrývání zvuků.
  • Snažte se, aby každá zvuková zkouška byla co nejkonzistentnější. To pomůže přesnosti identifikace.
  • Přehodnocení buňky záznamu obnoví hodnotu # v názvu souboru a přepíše všechny existující soubory, které odpovídají tomuto #. Zjistili jsme, že je nejjednodušší zaznamenat všechny vzorky jednoho zvuku najednou, a pak zastavit záznamovou buňku.
  • Pokud systém nezachytává váš cílený zvuk, zkuste snížit hodnotu THRESHOLD (pro spuštění nastavenou na 30) a buňku přehodnoťte.
  • Pokud je nahrávání spuštěno jinými zvuky mimo cílový, zkuste zvýšit hodnotu THRESHOLD (pro spuštění nastavenou na 30) a buňku přehodnoťte.

Krok 2: Příprava displeje Arduino/Matrix

Příprava displeje Arduino/Matrix
Příprava displeje Arduino/Matrix
Příprava displeje Arduino/Matrix
Příprava displeje Arduino/Matrix
Příprava displeje Arduino/Matrix
Příprava displeje Arduino/Matrix

Dále nastavíme vizualizační systém pomocí LED jehličkového displeje Arduino Leonardo a KEYESTUDIO 16x16. Toto má výstup předpovědi klasifikačního modelu detekovaných zvuků. Stejně jako dříve jsme poskytli všechny požadované soubory jak zde, tak v úložišti GitHub projektu.

Krok 2.1: Připojte Arduino a LED matici podle výše uvedeného schématu. KEYESTUDIO obsahuje vodiče pro připojení k jejich jehličkové matici, ale pro připojení těchto vodičů k Arduinu budou potřeba propojovací vodiče

Krok 2.2: Otevřete „arduino_listener.ino“pomocí Ardunio IDE a nahrajte jej do Leonardo. Pokud je zapojen správně, měli byste vidět ikonu „poslechu“(vypadá jako Wi-Fi), jak je znázorněno na výše uvedeném obrázku.

Krok 2.3: Připravte si ikony, které chcete zobrazit pro každý z vašich cílových zvuků. Abyste věděli, které LED diody se mají rozsvítit, musí být ikona odeslána z Arduina do matice jako bajtové pole. Například naše ikona šálku kávy (na obrázku výše) je odeslána do matice v tomto formátu:

{

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

Ikony jsme nakreslili pomocí online nástroje Dot2Pic, z rozbalovací nabídky bylo vybráno 16 sloupců, 16 řádků a „monochromatické, 8 pixelů na bajt, svislé nastavení“. Naše lze nalézt v poli "sample_icon_bytes.txt".

POZNÁMKA: Mohou existovat také online nástroje, které to dokážou automaticky s nahranými soubory.

Krok 2.4: Nakreslete každou ikonu. Po dokončení kreslení vyberte „Převést na pole“.

Krok 2.5: Podle potřeby nahraďte nepotřebné ikony definované v horní části kódu „arduino_listening.ino“. Nezapomeňte přidat komentář popisující ikonu, abyste si pamatovali, která je která!

Krok 2.6: Nahrajte nový kód do Arduina. Soubor ještě nezavírejte, budeme jej potřebovat pro další krok.

Krok 3: Spuštění klasifikátoru a identifikace zvuků

Spuštění klasifikátoru a identifikace zvuků
Spuštění klasifikátoru a identifikace zvuků
Spuštění klasifikátoru a identifikace zvuků
Spuštění klasifikátoru a identifikace zvuků

Nyní je čas dát systém dohromady. Klasifikační kanál, komunikace Arduino a živé nahrávání zvuku se provádí prostřednictvím jediného notebooku Arduino, který byl poskytnut zde nebo je přístupný prostřednictvím úložiště GitHub našeho projektu.

Krok 3.1: Zkopírujte notebook FullPipeline.ipynb do svého pracovního adresáře Jupyter Notebook a otevřete jej.

Krok 3.2: Spusťte každou buňku jednu po druhé a věnujte pozornost všem poznámkám, které jsme uvedli v nadpisech. Neočekává se žádný výstup. Zastavte se, až dojdete do buňky s názvem „Načíst tréninková data“.

Krok 3.3: Upravte proměnnou SAMPLES_LOCATION_ROOT v buňce „Načíst tréninková data“do nadřazeného adresáře umístění předchozího vzorového adresáře. Poté změňte proměnnou SAMPLES_DIR_NAME na název svého adresáře. Pokud jste tedy nastavili umístění v CollectSamples.ipynb na:

SAMPLES_LOCATION = "/Uživatelé/xxxx/Dokumenty/KitchenSoundClassifier/MySamples/NewDir"

Nyní byste nastavili tyto proměnné na:

SAMPLES_LOCATION_ROOT = "/Uživatelé/xxxx/Dokumenty/KitchenSoundClassifier/MySamples/" SAMPLES_DIR_NAME = "NewDir"

V případech nepřesnosti jsme to umožnili rychlé změny klasifikátoru. Můžete přepínat mezi různými ukázkovými kolekcemi a ladit svá data.

Krok 3.4: Vyhodnoťte buňku. Měli byste vidět úspěšné načtení každé kolekce.

Krok 3.5: Pokračujte ve spouštění každé buňky po jedné a věnujte pozornost všem poznámkám, které jsme uvedli v nadpisech.

Krok 3.6: Zastavte se, až dorazíte do buňky „Messaging Arduino“. V proměnné PORT_DEF definujte sériový port, který bude váš počítač používat pro komunikaci s Arduinem. To lze nalézt v Arduino IDE a přejít na Nástroje> Port.

Více informací naleznete zde.

Krok 3.8: Znovu otevřete Arduino IDE. V místech, kde jste provedli změny ikon, si poznamenejte písmeno vedle hodnoty pole, ale NEMĚŇTE to. V níže uvedeném příkladu je to „g“.

// odpadky, 0xff, 0x2f, 0x27, 0xc3, 0x03, 0xc3, 0x27, 0x2f, 0xff, 0xef, 0xdf, 0xbf, 0xff, 0xff,};

Krok 3.7: (Návrat do buňky „Messaging Arduino“notebooku) Změňte popisky ve slovníku self.sounds tak, aby odpovídaly štítkům, které jste použili při nahrávání vzorků, a ujistěte se, že každý štítek odpovídá jedinému písmenu, které jste si poznamenali v předchozím krok. „Nahrávání“a „Poslech“jsou součástí základních funkcí systému a neměly by být měněny. NEZMĚŇTE druhé písmeno, pokud si nejste jisti provedením několika dalších změn v kódu Arduino, protože by to jinak narušilo komunikaci s Arduino/maticí.

Krok 3.8: Spusťte hlavní funkci! Kód zachytí tréninková data, extrahuje jeho klíčové funkce, vloží je do kanálu, vytvoří klasifikační model a poté začne poslouchat zvukové události. Když to zjistí, uvidíte změnu matice na záznamový symbol (čtverec s kruhem uvnitř) a tato data segmentuje a vloží do modelu. Cokoli model předpovídá, se o několik sekund později zobrazí na maticovém displeji.

Můžete sledovat výstup buňky níže. Podívejte se, jak přesné to můžete získat!

Krok 4: Vytvoření skříně LEGO

Vytvoření skříně LEGO
Vytvoření skříně LEGO
Vytvoření skříně LEGO
Vytvoření skříně LEGO
Vytvoření skříně LEGO
Vytvoření skříně LEGO

Toto je zábavná část! Provedli jste všechny vážné kroky strojového učení a spustili celý end-to-end systém a nyní si můžete za odměnu hrát s LEGO. Zde není příliš podrobného postupu. Prostě jsme sem a tam přidali bloky, které se nám líbily, aniž bychom se příliš starali o celkový design, a nakonec jsme byli spokojení s tím, jak to dopadlo.

Nechte naše obrázky sloužit jako inspirace pro vaše vlastní kreativní bydlení jedinečné pro vaši kuchyni. Umístili jsme Arduino a většinu kabeláže do dutého pouzdra a poté zajistili maticový displej výše převisy. Na displej jsme přidali trochu papíru, abychom světlo mírně rozptýlili, což podle nás udělalo ikony jasnější.

Doporučuje: