Tartalomjegyzék:

Egyéni konyhai hang -azonosító: 4 lépés
Egyéni konyhai hang -azonosító: 4 lépés

Videó: Egyéni konyhai hang -azonosító: 4 lépés

Videó: Egyéni konyhai hang -azonosító: 4 lépés
Videó: 4S Street - Mesélek a bornak (Official Video) 2024, November
Anonim
Image
Image
Egyedi konyhai hang -azonosító
Egyedi konyhai hang -azonosító

Az idei tavaszi interaktív rendszer tanfolyamunk utolsó projektjéhez létrehoztunk egy valós idejű rendszert a konyhában gyakori hangok azonosítására és megjelenítésére a Support-Vector Machine besorolás segítségével. A rendszer egy laptopból áll audio mintavételezéshez/osztályozáshoz, és egy Arduino/pontmátrix kijelzőből a vizualizációhoz. Az alábbiakban útmutatást adunk a rendszer saját verziójának létrehozásához a saját konyhából származó hangokhoz.

Eredeti használati esetünk a süketek és nagyothallók egyéniségének konyhája volt, de ez a rendszer elméletileg adaptálható a hangok halmazának azonosítására különféle kontextusokban. A konyha ideális kiindulópont volt, mivel viszonylag csendes és ésszerű mennyiségű egyszerű, megkülönböztető hangot tartalmaz.

A projekthez tartozó GitHub adattár itt található.

Kellékek

  • Arduino Leonardo mikrovezérlő fejlécekkel
  • KEYESTUDIO 16x16 Dot Matrix LED kijelző Arduino -hoz
  • Kenyérsütő jumper huzal
  • Micro-USB-USB 2.0 kábel
  • Laptop Jupyter notebook -tal (Anaconda telepítés)

    A Jupyter Notebook kezdő útmutatója itt található

  • Jelentős mennyiségű nem megfelelő LEGO kockák a rendszer háza számára

    (De ezeket bármikor helyettesítheti bármilyen DIY építőanyaggal!)

1. lépés: Konyhai hangminták gyűjtése

Konyhai hangminták gyűjtése
Konyhai hangminták gyűjtése

Fentebb látható ábra: A villa és a kés összecsörömpölésének rögzítésével vett audio adatok ezzel a gyűjtési eljárással

A valós idejű hangok azonosításához a gépi tanulási modellünket minőségi példákkal kell ellátnunk összehasonlítás céljából. Ehhez a folyamathoz létrehoztunk egy Jupyter notebookot, amely itt vagy a projektünk GitHub adattárán keresztül érhető el. A tároló két különböző konyhából származó mintagyűjteményeket is tartalmaz tesztelés céljából.

1. lépés: Másolja a CollectSamples.ipynb jegyzetfüzetet a működő Jupyter Notebook könyvtárba, és nyissa meg.

1.2. Lépés: Futtassa az egyes cellákat egyenként, ügyelve a fejlécekben megadott megjegyzésekre. Hagyja abba, amikor eléri a "Mintafelvétel" címet.

MEGJEGYZÉS: Ebben a notebookban több Python -könyvtárat használnak, és mindegyik telepítést igényel, mielőtt sikeresen importálhatók a projektbe. Ezt szívesen elvégezheti manuálisan, bár a Jupyter Notebook könyvtár telepítési útmutatója itt található.

1.3. Lépés: Hozzon létre egy üres könyvtárat a minták tárolására a projekt munkakönyvtárában.

1.4. Lépés: Szerkessze a SAMPLES_LOCATION változót a "Mintafelvétel" cellában, hogy megfeleljen az üres könyvtár helyének.

1.5 lépés: Add hozzá vagy távolíts el annyi hangot, amennyit csak akarsz a SOUND_LABELS változóhoz.

Annak érdekében, hogy a minta rögzítési kódja működjön, ennek a változónak minden sorát vesszővel kell elválasztani, és a következő alakúnak kell lennie:

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

1.6. Lépés: Amikor az összes címkét hozzáadta, a "Mintafelvétel" cella kiértékelésével indítsa el a mintagyűjtési folyamatot. A cella kimenetén a rendszer kéri, hogy írja be a címkék minden hangjához társított rövid kódot (azaz „ts” a TargetedSound esetében). Ezt még ne tedd.

1.7. Lépés: Vigye a laptopját a konyhába, és helyezze el arra a helyre, ahol a legnagyobb valószínűséggel elhelyezi a kész rendszert. Ennek a helynek központi helyen kell lennie a jó hanggyűjtéshez, száraznak kell lennie, és távol kell lennie az esetleges kiömléstől, hogy megvédje elektronikáját.

1.8. Lépés: Készítse elő az első célzott hangot. Ha ez egy sütő időzítő sípoló hangja, akkor állítsa az időzítőt egy percre, és várja meg, amíg visszaszámol 20 másodpercig, mielőtt folytatná a következő lépést.

1.9 lépés: Írja be a címkekódot a parancssorba (azaz "ts"), majd nyomja meg az Enter/Return billentyűt.

A rendszer elkezd hallgatni egy olyan hangos eseményt, amely különbözik a helyiség környezeti zajától. A hang esemény észlelésekor addig kezdi a felvételt, amíg meg nem érzékeli a helyiségben lévő hangot a környezeti szintre. Ezután a hangot 16 bites WAV fájlként menti a SAMPLES_LOCATION könyvtárba a következő formátumban:

TargetedSound _#_ rögzítve.wav

Ennek a fájlnévnek a # része megfelel az összegyűjtött célzott hangminták számának. A WAV fájl mentése után a felszólítás megismétlődik, lehetővé téve, hogy ugyanazon hang több mintáját összegyűjtse a cella egyetlen végrehajtásával.

NE módosítsa ezt a fájlnevet. Fontos a következő lépéshez.

1.10. Lépés: Ismételje meg az 1.8. És 1.9. Lépést, amíg minden egyes hangból 5-10 mintát össze nem gyűjtött.

1.11 lépés: Ha befejezte, írja be az "x" -t a végrehajtásból való kilépéshez.

FIGYELMEZTETÉS: Ha ilyen módon nem lép ki a cellából, a Notebook összeomolhat. Ebben az esetben a Notebook kernelt vissza kell állítani, és minden cellát felülről kell futtatni.

1.11. Lépés (opcionális): Ellenőrizze az egyes fájlok WAV -adatait a "Gyors hangvizualizálás" cellában, és győződjön meg arról, hogy minden kívánt információt rögzített.

Néhány tipp:

  • Rögzítse, ha csendes a konyhája.
  • Egyszerre csak egy hangot rögzítsen. A rendszer nem tudja megkülönböztetni a hangok átfedését.
  • Próbáljon minden hangpróbát a lehető legkövetkezetesebbé tenni. Ez elősegíti az azonosítás pontosságát.
  • A Felvétel cella újbóli kiértékelése visszaállítja a # értéket a fájlnévben, és felülírja a # meglévő fájlokat. Úgy találtuk, hogy a legegyszerűbb egy hang összes mintáját egyszerre rögzíteni, majd leállítani a Rögzítő cellát.
  • Ha a rendszer nem veszi fel a célzott hangot, próbálja meg csökkenteni a THRESHOLD értéket (kezdéskor 30 -ra állítva), és értékelje újra a cellát.
  • Ha a felvételt a megcélzott hangon kívül más hangok is kiváltják, próbálja meg megemelni a THRESHOLD értéket (kezdéskor 30 -ra állítva), és értékelje újra a cellát.

2. lépés: Az Arduino/Matrix kijelző előkészítése

Az Arduino/Matrix kijelző előkészítése
Az Arduino/Matrix kijelző előkészítése
Az Arduino/Matrix kijelző előkészítése
Az Arduino/Matrix kijelző előkészítése
Az Arduino/Matrix kijelző előkészítése
Az Arduino/Matrix kijelző előkészítése

Ezután beállítjuk a vizualizációs rendszert Arduino Leonardo és KEYESTUDIO 16x16 LED pontmátrix kijelző segítségével. Ez az osztályozási modell előrejelzett hangjait adja ki. A korábbiakhoz hasonlóan itt és a projekt GitHub adattárában is megadtuk az összes szükséges fájlt.

2.1 lépés: Csatlakoztassa az Arduino és a LED mátrixot a fenti ábra szerint. A KEYESTUDIO vezetékeket tartalmaz a pontmátrixukhoz való csatlakozáshoz, de a kenyértábla jumper vezetékeire szükség lesz ezeknek a vezetékeknek az Arduino -hoz való csatlakoztatásához

2.2. Lépés: Nyissa meg az "arduino_listener.ino" fájlt az Ardunio IDE használatával, és töltse fel a Leonardo -ba. Ha helyesen van bekötve, látnia kell a "hallgatás" ikont (úgy néz ki, mint a Wi-Fi), amint a fenti képen látható.

2.3. Lépés: Készítse elő az egyes célhangokhoz megjeleníteni kívánt ikonokat. Ahhoz, hogy megtudja, mely LED -ek világítanak, az ikont el kell küldeni az Arduino -ból a mátrixba bájt tömbként. Például a kávéscsésze ikonunk (a fenti képen) ebben a formátumban kerül elküldésre a mátrixba:

{

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

Az ikonjainkat a Dot2Pic online eszköz segítségével rajzoltuk meg, 16 oszlopot, 16 sort és a "monokromatikus, 8 pixel byte -onként, függőleges beállítás" lehetőséget választva a legördülő menüből. A mieink megtalálhatók a "sample_icon_bytes.txt" tömbben.

MEGJEGYZÉS: Lehetnek olyan online eszközök is, amelyek ezt automatikusan meg tudják tenni a feltöltött fájlokkal.

2.4. Lépés: Rajzolja le az egyes ikonokat. A rajz befejezése után válassza a "Konvertálás tömbbe" lehetőséget.

Lépés: Cserélje ki szükségtelenül az "arduino_listening.ino" kód tetején megadott szükségtelen ikonokat. Feltétlenül írjon megjegyzést, amely leírja az ikont, hogy emlékezzen arra, melyik melyik!

2.6. Lépés: Töltse fel az új kódot az Arduino -ba. Még ne zárja be a fájlt, szükségünk lesz rá a következő lépésben.

3. lépés: Az osztályozó futtatása és a hangok azonosítása

Az osztályozó futtatása és a hangok azonosítása
Az osztályozó futtatása és a hangok azonosítása
Az osztályozó futtatása és a hangok azonosítása
Az osztályozó futtatása és a hangok azonosítása

Most itt az ideje összerakni a rendszert. Az osztályozási folyamat, az Arduino kommunikáció és az élő hangfelvétel egyetlen Arduino notebookon keresztül történik, amely itt található, vagy elérhető a projektünk GitHub tárházán keresztül.

3.1 lépés: Másolja a FullPipeline.ipynb jegyzetfüzetet a működő Jupyter Notebook könyvtárba, és nyissa meg.

3.2. Lépés: Futtassa az egyes cellákat egyenként, ügyelve a fejlécekben megadott megjegyzésekre. Kimenet nem várható. Hagyja abba, amikor eléri az "Edzési adatok betöltése" cellát.

3.3. Lépés: Szerkessze a SAMPLES_LOCATION_ROOT változót az "Oktatási adatok betöltése" cellában a korábbi mintakönyvtárának szülőkönyvtárába. Ezután módosítsa a SAMPLES_DIR_NAME változót a könyvtár nevére. Tehát ha a CollectSamples.ipynb fájlban beállította a helyét:

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

Most ezeket a változókat állítsa be:

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

Ez lehetővé tette az osztályozó gyors megváltoztatását pontatlanság esetén. Az adatok hangolásához válthat a különböző mintagyűjtemények között.

3.4. Lépés: Értékelje a cellát. Látnia kell minden gyűjtemény sikeres betöltését.

3.5. Lépés: Folytassa az egyes cellák egyenként történő futtatását, ügyelve a címsorokban megadott megjegyzésekre.

3.6. Lépés: Állítsa le, amikor eléri az "Messaging Arduino" cellát. A PORT_DEF változóban határozza meg azt a soros portot, amelyet a számítógép használni fog az Arduino -val való kommunikációhoz. Ez megtalálható az Arduino IDE -ben, és válassza az Eszközök> Port lehetőséget.

További információ itt található.

3.8. Lépés: Nyissa meg újra Arduino IDE -jét. Azokon a helyeken, ahol módosította az ikonokat, jegyezze fel a tömb értéke melletti betűt, de NE módosítsa. Az alábbi példában ez a "g".

// szemétlerakásconst 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,};

3.7. Lépés: (Visszatérés a Notebook "Messaging Arduino" cellájához) Változtassa meg a self.sounds szótárban található címkéket, hogy illeszkedjenek a minták rögzítésekor használt címkékhez, és győződjön meg arról, hogy minden címke megegyezik az előző betűvel lépés. A "felvétel" és a "hallgatás" egyaránt a rendszer alapvető funkcióinak részét képezik, és nem szabad megváltoztatni. NE változtassa meg a második betűt, hacsak nem érzi magabiztosnak, hogy néhány további változtatást is végrehajt az Arduino kódon, mert különben megzavarja a kommunikációt az Arduino/mátrixszal.

3.8. Lépés: Futtassa a fő funkciót! A kód megragadja az edzésadatokat, kivonja a legfontosabb jellemzőit, betáplálja őket a folyamatba, felépít egy osztályozási modellt, majd elkezdi hallgatni a hangos eseményeket. Amikor érzékel egyet, látni fogja, hogy a mátrix rögzítési szimbólummá változik (négyzet, körrel), és szegmentálja ezeket az adatokat, és betölti a modellbe. Bármit is jósol a modell, néhány másodperccel később megjelenik a mátrix kijelzőjén.

Az alábbi cella kimenetén követheti. Nézze meg, milyen pontos lehet!

4. lépés: LEGO ház létrehozása

LEGO ház létrehozása
LEGO ház létrehozása
LEGO ház létrehozása
LEGO ház létrehozása
LEGO ház létrehozása
LEGO ház létrehozása

Ez a szórakoztató rész! Az összes komoly gépi tanulási lépést elvégezte, és az egész végpontok közötti rendszert üzembe helyezte, és most jutalomként játszhat a LEGO-kkal. Itt nincs sok részletezési folyamat. Itt -ott csak olyan blokkokat adtunk hozzá, amelyek tetszettek, anélkül, hogy túlságosan aggódnánk az általános kialakítás miatt, és végül elégedettek voltunk azzal, ahogy kiderült.

Engedje meg, hogy képeink inspirációt szolgáljanak a konyhájára jellemző kreatív házhoz. Az Arduino -t és a vezetékek többségét üreges tokba helyeztük, majd a fenti mátrix kijelzőt túlnyúlásokkal rögzítettük. Egy kis papírt tettünk a kijelző fölé, hogy kissé eloszlassa a fényt, amelyről úgy éreztük, hogy az ikonok világosabbak.

Ajánlott: