Obsah:

Vlastný identifikátor zvuku v kuchyni: 4 kroky
Vlastný identifikátor zvuku v kuchyni: 4 kroky

Video: Vlastný identifikátor zvuku v kuchyni: 4 kroky

Video: Vlastný identifikátor zvuku v kuchyni: 4 kroky
Video: Самостоятельное строительство мобильного отопительного бокса - Дизельный стояночный отопитель VEVOR 2024, November
Anonim
Image
Image
Vlastný identifikátor zvuku v kuchyni
Vlastný identifikátor zvuku v kuchyni

Pre náš záverečný projekt v kurze interaktívnych systémov na jar tohto roku sme vytvorili systém v reálnom čase na identifikáciu a vizualizáciu bežných zvukov v kuchyni pomocou klasifikácie Support-Vector Machine. Systém sa skladá z prenosného počítača na vzorkovanie/klasifikáciu zvuku a ihličkového displeja Arduino na vizualizáciu. Nasleduje návod na vytvorenie vlastnej verzie tohto systému pre zvuky z vašej vlastnej kuchyne.

Náš pôvodný prípad použitia bol ako zariadenie pre kuchyňu nepočujúcich a nedoslýchavých jednotlivcov, ale tento systém by teoreticky mohol byť prispôsobený na identifikáciu súboru zvukov v rôznych kontextoch. Kuchyňa bola ideálnym miestom na začiatok, pretože býva relatívne tichá a obsahuje primerané množstvo jednoduchých a výrazných zvukov.

Úložisko GitHub pre tento projekt nájdete tu.

Zásoby

  • Mikrokontrolér Arduino Leonardo s hlavičkami
  • KEYESTUDIO 16x16 bodový maticový LED displej pre Arduino
  • Prepojovací drôt na chlieb
  • Kábel micro-USB na USB 2.0
  • Notebook s notebookom Jupyter (inštalácia Anaconda)

    Príručku pre začiatočníkov k notebooku Jupyter nájdete tu

  • Značné množstvo nezhodných kociek LEGO na uloženie systému

    (Ale v skutočnosti ich môžete nahradiť akýmkoľvek stavebným materiálom pre domácich majstrov, ktorý by ste chceli!)

Krok 1: Zhromažďovanie zvukových ukážok z kuchyne

Zhromažďovanie zvukových ukážok z kuchyne
Zhromažďovanie zvukových ukážok z kuchyne

Obrázok hore: Zvukové údaje získané zo záznamu cinkania vidlice a noža dohromady pomocou tohto procesu zberu

Aby sme identifikovali zvuky v reálnom čase, musíme svojmu modelu strojového učenia dodať príklady kvality na porovnanie. Na tento proces sme vytvorili notebook Jupyter, ku ktorému máte prístup tu alebo prostredníctvom úložiska GitHub nášho projektu. Úložisko tiež obsahuje zbierky vzoriek z dvoch rôznych kuchýň na testovacie účely.

Krok 1.1: Skopírujte notebook CollectSamples.ipynb do pracovného adresára Jupyter Notebook a otvorte ho.

Krok 1.2: Spustite každú bunku jednu po druhej a dávajte pozor na všetky poznámky, ktoré sme uviedli v nadpisoch. Zastavte, keď sa dostanete k názvu s názvom „Ukážkový záznam“.

POZNÁMKA: V tomto prenosnom počítači je použitých niekoľko knižníc Pythonu a každá z nich vyžaduje inštaláciu, aby sa mohli úspešne importovať do projektu. Môžete to urobiť ručne, aj keď sprievodcu inštaláciou knižnice v programe Jupyter Notebook nájdete tu.

Krok 1.3: Vytvorte prázdny adresár na uloženie vzoriek do pracovného adresára pre tento projekt.

Krok 1.4: Upravte premennú SAMPLES_LOCATION v bunke „Sample Recording“tak, aby zodpovedala umiestneniu vášho prázdneho adresára.

Krok 1.5: Do premennej SOUND_LABELS pridajte alebo odstráňte ľubovoľný počet zvukov.

Aby vzorový kód záznamu fungoval, musí byť každý riadok tejto premennej oddelený čiarkou a v nasledujúcom tvare:

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

Krok 1.6: Keď boli pridané všetky štítky, vyhodnotenie bunky „Sample Recording“so spustením procesu odberu vzorky. Na výstupe bunky budete vyzvaní, aby ste zadali krátky kód, ktorý ste priradili ku každému zvuku na štítkoch (t. J. „Ts“pre TargetedSound). Zatiaľ to nerobte.

Krok 1.7: Vezmite prenosný počítač do kuchyne a umiestnite ho do oblasti, kde by ste s najväčšou pravdepodobnosťou umiestnili hotový systém. Toto miesto by malo byť ústredným bodom dobrého zberu zvuku a suché a mimo dosahu prípadných únikov, aby bola chránená vaša elektronika.

Krok 1.8: Pripravte si svoj prvý cielený zvuk. Ak ide o pípnutie časovača rúry, môžete nastaviť časovač na jednu minútu a počkať, kým sa nespustí odpočítavanie, do 20 sekúnd, než budete pokračovať k ďalšiemu kroku.

Krok 1.9: Do výzvy zadajte kód štítku (t. J. „Ts“) a stlačte kláves Enter/Return.

Systém začne počúvať zvukovú udalosť odlišnú od okolitého hluku v miestnosti. Po vnímaní tejto zvukovej udalosti začne nahrávať, kým nezistí, že sa zvuk v miestnosti nevráti na okolitú úroveň. Potom uloží zvuk ako 16-bitový súbor WAV do adresára identifikovaného v SAMPLES_LOCATION vo formáte:

TargetedSound _#_ zachytený.wav

# Časť tohto názvu súboru zodpovedá počtu vzoriek cieleného zvuku, ktoré ste zhromaždili. Po uložení súboru WAV sa výzva zopakuje, čo vám umožní zhromaždiť niekoľko vzoriek rovnakého zvuku v jednom spustení bunky.

NEMEŇTE tento názov súboru. Je to dôležité pre ďalší krok.

Krok 1.10: Opakujte kroky 1.8 a 1.9, kým nezozbierate 5-10 vzoriek každého zvuku.

Krok 1.11: Po dokončení zadajte „x“a ukončite spustenie.

UPOZORNENIE: Ak bunku týmto spôsobom neopustíte, môže dôjsť k zlyhaniu prenosného počítača. V takom prípade sa musí jadro prenosného počítača resetovať a každá bunka sa musí spustiť znova zhora.

Krok 1.11 (Voliteľné): Skontrolujte údaje WAV jednotlivých súborov v bunke „Rýchla vizualizácia zvuku“a uistite sa, že ste zachytili všetky požadované informácie.

Niekoľko rád:

  • Nahrávajte, keď je vaša kuchyňa tichá.
  • Nahrávajte iba jeden zvuk naraz. Systém nedokáže rozlíšiť prekrývanie zvukov.
  • Snažte sa, aby každá zvuková skúška bola čo najkonzistentnejšia. Pomôže to presnosti identifikácie.
  • Opätovné vyhodnotenie bunky záznamu obnoví hodnotu # v názve súboru a prepíše všetky existujúce súbory, ktoré sa zhodujú s číslom #. Zistili sme, že je najľahšie zaznamenať všetky vzorky jedného zvuku naraz a potom zastaviť bunku Záznam.
  • Ak systém nezachytáva váš cielený zvuk, skúste znížiť hodnotu THRESHOLD (spustením nastavenou na 30) a bunku prehodnoťte.
  • Ak je nahrávanie spustené inými zvukmi mimo cieleného, skúste zvýšiť hodnotu THRESHOLD (spustením nastavenou na 30) a bunku prehodnoťte.

Krok 2: Príprava displeja Arduino/Matrix

Príprava displeja Arduino/Matrix
Príprava displeja Arduino/Matrix
Príprava displeja Arduino/Matrix
Príprava displeja Arduino/Matrix
Príprava displeja Arduino/Matrix
Príprava displeja Arduino/Matrix

Ďalej nastavíme vizualizačný systém pomocou LED bodového displeja Arduino Leonardo a KEYESTUDIO 16x16 LED. Toto má za následok výstup predikcie klasifikačného modelu detekovaných zvukov. Rovnako ako predtým sme poskytli všetky požadované súbory tu aj v úložisku projektu GitHub.

Krok 2.1: Pripojte maticu Arduino a LED podľa vyššie uvedeného diagramu. KEYESTUDIO obsahuje vodiče na pripojenie k ich bodovej matici, ale na pripojenie týchto vodičov k Arduinu budú potrebné prepojovacie vodiče

Krok 2.2: Otvorte „arduino_listener.ino“pomocou Ardunio IDE a nahrajte ho do Leonardo. Ak je zapojený správne, mala by sa vám zobraziť ikona „počúvania“(vyzerá ako Wi-Fi), ako je to znázornené na obrázku vyššie.

Krok 2.3: Pripravte si ikony, ktoré chcete zobraziť pre každý z vašich cieľových zvukov. Aby ste vedeli, ktoré diódy LED sa majú rozsvietiť, musí byť ikona odoslaná z Arduina do matice ako bajtové pole. Napríklad naša ikona šálky kávy (na obrázku vyššie) je odoslaná do matice v tomto formáte:

{

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 sme nakreslili pomocou online nástroja Dot2Pic, v ktorom je v rozbaľovacej ponuke vybratých 16 stĺpcov, 16 riadkov a „monochromatické, 8 pixelov na bajt, vertikálne nastavenie“. Naše nájdete v poli „sample_icon_bytes.txt“.

POZNÁMKA: Môžu existovať aj online nástroje, ktoré to môžu urobiť automaticky s nahranými súbormi.

Krok 2.4: Nakreslite každú ikonu. Po dokončení kreslenia vyberte „Previesť na pole“.

Krok 2.5: Podľa potreby nahraďte nepotrebné ikony definované v hornej časti kódu „arduino_listening.ino“. Nezabudnite pridať komentár opisujúci ikonu, aby ste si zapamätali, ktorá je ktorá!

Krok 2.6: Nahrajte nový kód do Arduina. Súbor ešte nezatvárajte, budeme ho potrebovať pre ďalší krok.

Krok 3: Spustenie klasifikátora a identifikácia zvukov

Spustenie klasifikátora a identifikácia zvukov
Spustenie klasifikátora a identifikácia zvukov
Spustenie klasifikátora a identifikácia zvukov
Spustenie klasifikátora a identifikácia zvukov

Teraz je čas zostaviť systém. Klasifikačný kanál, komunikácia Arduino a zachytávanie živého zvuku sa vykonáva prostredníctvom jedného prenosného počítača Arduino, ktorý bol poskytnutý tu alebo je k nemu prístup prostredníctvom úložiska GitHub nášho projektu.

Krok 3.1: Skopírujte notebook FullPipeline.ipynb do svojho pracovného adresára Jupyter Notebook a otvorte ho.

Krok 3.2: Spustite každú bunku jednu po druhej a dávajte pozor na všetky poznámky, ktoré sme uviedli v nadpisoch. Neočakáva sa žiadny výstup. Zastavte, keď sa dostanete do bunky s názvom „Načítať údaje o tréningu“.

Krok 3.3: Upravte premennú SAMPLES_LOCATION_ROOT v bunke „Načítanie tréningových údajov“do nadradeného adresára umiestnenia vášho predchádzajúceho vzorového adresára. Potom zmeňte premennú SAMPLES_DIR_NAME na názov svojho adresára. Ak ste teda nastavili umiestnenie v CollectSamples.ipynb na:

SAMPLES_LOCATION = "/Používatelia/xxxx/Dokumenty/KitchenSoundClassifier/MySamples/NewDir"

Teraz by ste nastavili tieto premenné na:

SAMPLES_LOCATION_ROOT = "/Používatelia/xxxx/Dokumenty/KitchenSoundClassifier/MySamples/" SAMPLES_DIR_NAME = "NewDir"

V prípade nepresností sme to umožnili rýchle zmeny klasifikátora. Na ladenie údajov môžete prepínať medzi rôznymi zbierkami vzoriek.

Krok 3.4: Vyhodnoťte bunku. Mali by ste vidieť, že každá zbierka je úspešne načítaná.

Krok 3.5: Pokračujte v spustení každej bunky po jednej a dávajte pozor na všetky poznámky, ktoré sme uviedli v nadpisoch.

Krok 3.6: Zastavte sa, keď sa dostanete do bunky „Messaging Arduino“. V premennej PORT_DEF definujte sériový port, ktorý bude váš počítač používať na komunikáciu s Arduino. Toto nájdete v IDE Arduino a v časti Nástroje> Port.

Viac informácií nájdete tu.

Krok 3.8: Znova otvorte svoje Arduino IDE. Na miestach, kde ste urobili zmeny na ikonách, si poznačte písmeno vedľa hodnoty poľa, ale nemeňte ho. V nižšie uvedenom príklade je to „g“.

// likvidácia odpadu nepodpísaný znak 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,};

Krok 3.7: (Návrat do bunky „Messaging Arduino“prenosného počítača) Zmeňte štítky v slovníku self.sounds tak, aby zodpovedali štítkom, ktoré ste použili pri zaznamenávaní vzoriek, pričom sa uistite, že každý štítok zodpovedá jednému písmenu, ktoré ste si poznamenali v predchádzajúcom krok. „Nahrávanie“a „Počúvanie“sú súčasťou základnej funkcie systému a nemali by sa meniť. Nemeňte druhé písmeno, pokiaľ si nie ste istí, že urobíte aj niekoľko ďalších zmien v kóde Arduino, pretože by to inak narušilo komunikáciu s Arduino/maticou.

Krok 3.8: Spustite hlavnú funkciu! Kód zachytí školiace údaje, extrahuje jeho kľúčové vlastnosti, vloží ich do kanála, vytvorí klasifikačný model a potom začne počúvať zvukové udalosti. Akonáhle to rozpozná, uvidíte zmenu matice na symbol záznamu (štvorec s kruhom vo vnútri), tieto údaje segmentuje a vloží do modelu. Čokoľvek model predpovedá, sa na maticovom displeji zobrazí o niekoľko sekúnd neskôr.

Môžete sledovať výstup bunky nižšie. Pozrite sa, ako presne to môžete získať!

Krok 4: Vytvorenie bývania LEGO

Vytvorenie domu LEGO
Vytvorenie domu LEGO
Vytvorenie domu LEGO
Vytvorenie domu LEGO
Vytvorenie domu LEGO
Vytvorenie domu LEGO

Toto je zábavná časť! Vykonali ste všetky vážne kroky strojového učenia a spustili ste celý end-to-end systém a teraz si za odmenu môžete zahrať s LEGO. Tu nie je veľa postupu na detaily. Jednoducho sme sem a tam pridali bloky, ktoré sa nám páčili, bez toho, aby sme sa príliš zaoberali celkovým dizajnom, a nakoniec sme boli spokojní s tým, ako to dopadlo.

Nechajte naše obrázky slúžiť ako inšpirácia pre vaše vlastné kreatívne bývanie jedinečné pre vašu kuchyňu. Arduino a väčšinu káblov sme umiestnili do dutého puzdra a potom zaistili maticový displej vyššie prevismi. Na displej sme pridali trochu papiera, aby svetlo mierne rozptýlilo, čo sme cítili, že sú ikony jasnejšie.

Odporúča: