INHOUDSOPGAWE:

Pasgemaakte kombuisklank -identifiseerder: 4 stappe
Pasgemaakte kombuisklank -identifiseerder: 4 stappe

Video: Pasgemaakte kombuisklank -identifiseerder: 4 stappe

Video: Pasgemaakte kombuisklank -identifiseerder: 4 stappe
Video: Штукатурка стен - самое полное видео! Переделка хрущевки от А до Я. #5 2024, November
Anonim
Image
Image
Pasgemaakte kombuisklank -identifiseerder
Pasgemaakte kombuisklank -identifiseerder

Vir ons finale projek in 'n interaktiewe stelselkursus hierdie lente, het ons 'n intydse stelsel geskep vir die identifisering en visualisering van algemene klanke in die kombuis met behulp van Support-Vector Machine-klassifikasie. Die stelsel bestaan uit 'n skootrekenaar vir klankmonsters/klassifikasie, en 'n Arduino/dot -matriksskerm vir visualisering. Die volgende is 'n gids vir die skep van u eie weergawe van hierdie stelsel vir klanke uit u eie kombuis.

Ons oorspronklike gebruikskas was as 'n apparaat vir die kombuis van 'n dowe en hardhorende individu, maar hierdie stelsel kon teoreties aangepas word om 'n stel klanke in verskillende kontekste te identifiseer. Die kombuis was 'n ideale plek om te begin, aangesien dit relatief stil is en 'n redelike hoeveelheid eenvoudige, duidelike klanke bevat.

'N GitHub -bewaarplek vir hierdie projek kan hier gevind word.

Voorrade

  • Arduino Leonardo -mikrobeheerder met opskrifte
  • KEYESTUDIO 16x16 Dot Matrix LED -skerm vir Arduino
  • Broodbord springdraad
  • Mikro-USB na USB 2.0-kabel
  • 'N Skootrekenaar met Jupyter Notebook (Anaconda -installasie)

    'N Beginnersgids vir Jupyter Notebook kan hier gevind word

  • 'N Aansienlike hoeveelheid LEGO -stene wat nie ooreenstem met die behuising van die stelsel nie

    (Maar u kan dit regtig vervang met enige boumateriaal wat u wil!)

Stap 1: Versamel kombuisklankmonsters

Versameling van klankmonsters in die kombuis
Versameling van klankmonsters in die kombuis

Figuur hierbo: klankdata geneem uit die opname van 'n vurk en 'n mes wat aanmekaar klink deur middel van hierdie versamelingsproses

Om real-time klanke te kan identifiseer, moet ons aan ons masjienleermodel kwaliteit voorbeelde gee om dit te vergelyk. Ons het 'n Jupyter -notaboek vir hierdie proses gemaak, wat hier verkry kan word of via die GitHub -bewaarplek van ons projek. Die bewaarplek bevat ook monsterversamelings van twee verskillende kombuise vir toetsdoeleindes.

Stap 1.1: Kopieer die CollectSamples.ipynb -notaboek na u werkende Jupyter Notebook -gids en maak dit oop.

Stap 1.2: Begin elke sel een vir een, let op die notas wat ons in die opskrifte verskaf het. Stop wanneer u een met die titel "Voorbeeldopname" bereik.

LET WEL: Verskeie Python -biblioteke word in hierdie notaboek gebruik, en elkeen moet geïnstalleer word voordat dit suksesvol in die projek ingevoer kan word. U is welkom om dit handmatig te doen, alhoewel u hier 'n gids kan vind vir die installering van biblioteke in Jupyter Notebook.

Stap 1.3: Skep 'n leë gids om u monsters in u werkgids vir hierdie projek te stoor.

Stap 1.4: Wysig die veranderlike SAMPLES_LOCATION in die sel "Voorbeeldopname" om by u leë gids se ligging te pas.

Stap 1.5: Voeg of verwyder soveel geluide as wat u wil by die veranderlike van SOUND_LABELS.

Om die monsteropname -kode te laat werk, moet elke reël van hierdie veranderlike geskei word deur 'n komma en die volgende vorm:

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

Stap 1.6: As alle etikette bygevoeg is, moet u die sel "Voorbeeldopname" evalueer en die monsterversamelingsproses begin. In die uitset van die sel word u gevra om die kort kode wat u met elke klank geassosieer het, in die etikette in te voer (dws "ts" vir TargetedSound). Moet dit nog nie doen nie.

Stap 1.7: Neem u skootrekenaar in die kombuis en plaas dit in die omgewing waar u die voltooide stelsel waarskynlik sal plaas. Hierdie plek moet sentraal wees vir goeie klankversameling en moet droog wees en weg van moontlike storting om u elektronika te beskerm.

Stap 1.8: Berei u eerste geteikende klank voor. As dit 'n oondtimer is, kan u die timer op 'n minuut stel en wag totdat dit tot ongeveer 20 sekondes aftel voordat u na die volgende stap gaan.

Stap 1.9: Tik die etiketkode in die prompt (dws "ts") en druk Enter/Return.

Die stelsel begin luister na 'n klankgebeurtenis wat verskil van die omringende geraas van die kamer. By die waarneming van hierdie klankgebeurtenis begin dit opneem totdat dit voel dat die geluid in die kamer weer na die omringende vlakke teruggekeer het. Dit sal dan die klank as 'n 16-bis WAV-lêer stoor in die gids geïdentifiseer in SAMPLES_LOCATION in die formaat:

TargetedSound _#_ gevang.wav

Die # gedeelte van hierdie lêernaam stem ooreen met die aantal monsters van die geteikende klank wat u versamel het. Nadat die WAV -lêer gestoor is, word die aanwysing herhaal, sodat u verskeie monsters van dieselfde klank in 'n enkele uitvoering van die sel kan versamel.

MOENIE hierdie lêernaam verander nie. Dit is belangrik vir die volgende stap.

Stap 1.10: Herhaal stappe 1.8 en 1.9 totdat u 5-10 monsters van elke klank versamel het.

Stap 1.11: Voer "x" in wanneer u klaar is met die uitvoering.

WAARSKUWING: Versuim om die sel op hierdie manier te verlaat, kan veroorsaak dat die notaboek vasval. In hierdie geval moet die Notebook -kern herstel word en elke sel moet weer van bo af loop.

Stap 1.11 (opsioneel): Gaan die WAV -data van individuele lêers in die sel "Quick Sound Visualization" na om seker te maak dat u alle gewenste inligting vasgelê het.

'N Paar wenke:

  • Teken aan wanneer u kombuis stil is.
  • Neem slegs een klank tegelyk op. Die stelsel kan nie oorvleueling in klanke onderskei nie.
  • Probeer om elke klankproef so konsekwent moontlik te maak. Dit sal die akkuraatheid van die identifikasie help.
  • Die her-evaluering van die opnamesel sal die # -waarde in die lêernaam terugstel en enige bestaande lêers wat by daardie # pas, oorskryf. Ons het dit makliker gevind om alle monsters van een klank tegelyk op te neem en dan die opnamesel te stop.
  • As die stelsel nie u teikenklank optel nie, probeer om die THRESHOLD -waarde te verlaag (stel op 30 om te begin) en herwaardeer die sel.
  • As die opname veroorsaak word deur ander geluide buite die doelwit, probeer om die THRESHOLD -waarde te verhoog (stel op 30 om te begin) en herwaardeer die sel.

Stap 2: Berei die Arduino/Matrix -skerm voor

Berei die Arduino/Matrix -skerm voor
Berei die Arduino/Matrix -skerm voor
Berei die Arduino/Matrix -skerm voor
Berei die Arduino/Matrix -skerm voor
Berei die Arduino/Matrix -skerm voor
Berei die Arduino/Matrix -skerm voor

Vervolgens gaan ons die visualiseringsisteem opstel met 'n Arduino Leonardo en KEYESTUDIO 16x16 LED dot matrix display. Dit is om die klassifikasiemodel se voorspelling van bespeurde klanke uit te voer. Soos voorheen het ons alle vereiste lêers hier en in die GitHub -bewaarplek van die projek verskaf.

Stap 2.1: Bedraad die Arduino- en LED -matriks volgens die diagram hierbo. KEYESTUDIO bevat drade om aan te sluit op hul puntmatriks, maar brooddraaddraaddrade is nodig om hierdie drade aan die Arduino te koppel

Stap 2.2: Open "arduino_listener.ino" met die Ardunio IDE en laai dit op na die Leonardo. As dit korrek bedraad is, moet u die ikoon "luister" (soos Wi-Fi) sien, soos in die prent hierbo getoon.

Stap 2.3: Berei die ikone wat u wil vertoon vir elk van u teikengeluide voor. Om te weet watter LED's moet brand, moet die ikoon as 'n byte -reeks van die Arduino na die matriks gestuur word. Ons koffiekoppie -ikoon (in die prent hierbo) word byvoorbeeld na die matriks gestuur in hierdie formaat:

{

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

Ons het ons ikone geteken met behulp van die Dot2Pic -aanlynhulpmiddel, met 16 kolomme, 16 rye en 'monochromaties, 8 pixels per greep, vertikale instelling' wat uit die keuselys gekies is. Ons kan gevind word in die "sample_icon_bytes.txt" skikking.

LET WEL: Daar kan ook aanlyn gereedskap wees wat dit outomaties kan doen met opgelaaide lêers.

Stap 2.4: Teken elke ikoon. As u klaar is met teken, kies 'Skakel oor na die skikking'.

Stap 2.5: Vervang onnodige ikone wat bo -aan die "arduino_listening.ino" -kode gedefinieer is, soos u wil. Voeg 'n opmerking oor die ikoon by sodat u kan onthou watter een is!

Stap 2.6: Laai die nuwe kode op na die Arduino. Maak die lêer nog nie toe nie; ons benodig dit vir die volgende stap.

Stap 3: Begin die klassifiseerder en identifiseer klanke

Begin die klassifiseerder en identifiseer klanke
Begin die klassifiseerder en identifiseer klanke
Begin die klassifiseerder en identifiseer klanke
Begin die klassifiseerder en identifiseer klanke

Nou is dit tyd om die stelsel saam te stel. Die klassifikasiepyplyn, Arduino -kommunikasie en lewendige klankopname word alles gedoen deur 'n enkele Arduino -notaboek, wat hier verskaf is of verkrygbaar is via die GitHub -bewaarplek van ons projek.

Stap 3.1: Kopieer die FullPipeline.ipynb -notaboek na u werkende Jupyter Notebook -gids en maak dit oop.

Stap 3.2: Begin elke sel een vir een, let op die aantekeninge wat ons in die opskrifte verskaf het. Geen uitset word verwag nie. Stop wanneer u die sel met die titel "Laai die opleidingsdata" bereik.

Stap 3.3: Wysig die veranderlike SAMPLES_LOCATION_ROOT in die sel "Laai die opleidingsdata" in die ouergids van u vorige voorbeeldgids. Verander dan die veranderlike SAMPLES_DIR_NAME na die naam van u gids. Dus, as u die ligging in CollectSamples.ipynb ingestel het op:

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

U stel hierdie veranderlikes nou op:

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

Ons het dit moontlik gemaak om die klassifiseerder vinnig te verander in gevalle van onakkuraatheid. U kan wissel tussen verskillende monsterversamelings om u data af te stem.

Stap 3.4: Evalueer die sel. Elke versameling moet suksesvol gelaai word.

Stap 3.5: Hou aan om elke sel een vir een uit te voer, en let op die notas wat ons in die opskrifte verskaf het.

Stap 3.6: Stop wanneer u die sel "Messaging Arduino" bereik. Definieer die seriële poort wat u rekenaar sal gebruik vir kommunikasie met die Arduino in die PORT_DEF -veranderlike. Dit kan gevind word in die Arduino IDE en gaan na Tools> Port.

Meer inligting kan hier gevind word.

Stap 3.8: Heropen u Arduino IDE. Op plekke waar u die ikone verander het, let op die letter langs die waarde van die skikking, maar MOENIE dit verander nie. In die onderstaande voorbeeld is dit 'g'.

// vullisverwydering konst ongetekend, 0xff, 0x2f, 0x27, 0xc3, 0x03, 0xc3, 0x27, 0x2f, 0xff, 0xef, 0xdf, 0xbf, 0xff, 0xff,};

Stap 3.7: (Keer terug na die "Messaging Arduino" -sel van die notaboek) Verander die etikette in die self.sounds -woordeboek om by die etikette te pas wat u gebruik het om u monsters op te neem, en maak seker dat elke etiket ooreenstem met die enkele letter wat u in die vorige opgemerk het stap. "Opneem" en "Luister" is albei deel van die kernsisteemfunksionaliteit en moet nie verander word nie. Moenie die tweede letter verander nie, tensy u selfversekerd voel om 'n paar ekstra veranderinge aan die Arduino -kode aan te bring, aangesien dit andersins die kommunikasie met die Arduino/matriks sal benadeel.

Stap 3.8: Begin die hooffunksie! Die kode gryp die opleidingsdata aan, haal die belangrikste kenmerke daarvan uit, voer dit in die pyplyn, bou 'n klassifikasiemodel en begin luister na klankgebeurtenisse. As dit een aanvoel, sien u hoe die matriks verander na 'n opnamesimbool (vierkant met 'n sirkel binne) en dit sal hierdie data segmenteer en in die model invoer. Wat ook al die model voorspel, sal 'n paar sekondes later op die matriksskerm verskyn.

U kan die uitset van die sel hieronder volg. Kyk hoe akkuraat u dit kan kry!

Stap 4: Skep 'n LEGO -behuising

Skep 'n LEGO -behuising
Skep 'n LEGO -behuising
Skep 'n LEGO -behuising
Skep 'n LEGO -behuising
Skep 'n LEGO -behuising
Skep 'n LEGO -behuising

Dit is die lekker deel! U het al die ernstige masjienleerstappe gedoen en die hele end-to-end-stelsel aan die gang gekry, en nou kan u as 'n beloning met LEGO's speel. Hier is nie veel van 'n proses om in detail te beskryf nie. Ons het net hier en daar blokke bygevoeg wat ons graag wou hê, sonder om ons te veel te bekommer oor die algehele ontwerp, en ons was gelukkig met die manier waarop dit verloop het.

Laat ons foto's as inspirasie dien vir u eie kreatiewe behuising wat uniek is vir u kombuis. Ons plaas die Arduino en die meerderheid van die bedrading in 'n hol omhulsel, en bevestig dan die matriksvertoning hierbo met oorhangings. Ons het 'n bietjie papier oor die skerm gevoeg om die lig effens te versprei, wat ons gevoel het die ikone duideliker gemaak het.

Aanbeveel: