Innholdsfortegnelse:

Tilpasset kjøkken lydidentifikator: 4 trinn
Tilpasset kjøkken lydidentifikator: 4 trinn

Video: Tilpasset kjøkken lydidentifikator: 4 trinn

Video: Tilpasset kjøkken lydidentifikator: 4 trinn
Video: Et kjøkken klenodie tilpasset skråtak 2024, November
Anonim
Image
Image
Tilpasset kjøkken lydidentifikator
Tilpasset kjøkken lydidentifikator

For vårt siste prosjekt i et interaktivt systemkurs i vår, opprettet vi et sanntidssystem for å identifisere og visualisere vanlige lyder på kjøkkenet ved hjelp av Support-Vector Machine-klassifisering. Systemet består av en bærbar datamaskin for lydsampling/klassifisering, og en Arduino/dot matriseskjerm for visualisering. Følgende er en guide for å lage din egen versjon av dette systemet for lyder fra ditt eget kjøkken.

Vår opprinnelige brukstilfelle var som en enhet for kjøkkenet til en døve og hørselshemmet person, men dette systemet kunne teoretisk sett tilpasses for å identifisere et sett med lyder i en rekke sammenhenger. Kjøkkenet var et ideelt sted å starte, da det pleier å være relativt stille og inneholder en rimelig mengde enkle, distinkte lyder.

Et GitHub -depot for dette prosjektet finner du her.

Rekvisita

  • Arduino Leonardo mikrokontroller med overskrifter
  • KEYESTUDIO 16x16 Dot Matrix LED -skjerm for Arduino
  • Jumper wire for brødbrett
  • Mikro-USB til USB 2.0-kabel
  • En bærbar datamaskin med Jupyter Notebook (Anaconda -installasjon)

    En nybegynnerguide til Jupyter Notebook finner du her

  • En betydelig mengde LEGO -klosser som ikke stemmer overens for systemets hus

    (Men du kan virkelig erstatte disse med alle byggematerialer du ønsker!)

Trinn 1: Samle kjøkkenlydprøver

Samle kjøkkenlydprøver
Samle kjøkkenlydprøver

Figur ovenfor: Lyddata hentet fra innspilling av en gaffel og en kniv som klirrer sammen ved hjelp av denne innsamlingsprosessen

For å identifisere sanntidslyder, må vi gi vår maskinlæringsmodell kvalitetseksempler for sammenligning. Vi opprettet en Jupyter -notatbok for denne prosessen, som du kan få tilgang til her eller gjennom prosjektets GitHub -depot. Depotet inneholder også prøvesamlinger fra to forskjellige kjøkken for testformål.

Trinn 1.1: Kopier CollectSamples.ipynb -notatboken til den fungerende Jupyter Notebook -katalogen og åpne den.

Trinn 1.2: Kjør hver celle en etter en, og vær oppmerksom på eventuelle notater vi har gitt i overskriftene. Stopp når du når en med tittelen "Sample Recording".

MERK: Flere Python -biblioteker brukes i denne notatboken, og hver enkelt krever installasjon før de kan importeres til prosjektet. Du er velkommen til å gjøre dette manuelt, men en guide for bibliotekinstallasjon i Jupyter Notebook finner du her.

Trinn 1.3: Lag en tom katalog for å lagre prøvene i arbeidskatalogen for dette prosjektet.

Trinn 1.4: Rediger SAMPLES_LOCATION -variabelen i cellen "Sample Recording" for å matche den tomme katalogens plassering.

Trinn 1.5: Legg til eller fjern så mange lyder du vil i SOUND_LABELS -variabelen.

For at prøveopptakskoden skal fungere, må hver linje i denne variabelen skilles med et komma og med følgende skjema:

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

Trinn 1.6: Når alle etikettene er lagt til, evaluerer du "prøveopptak" -cellen og starter prøvetakingsprosessen. I cellens utgang blir du bedt om å legge inn den korte koden du knytt til hver lyd i etikettene (dvs. "ts" for TargetedSound). Ikke gjør dette ennå.

Trinn 1.7: Ta den bærbare datamaskinen inn på kjøkkenet og plasser den i området der du mest sannsynlig vil plassere det ferdige systemet. Dette stedet bør være sentralt for god lydsamling, og tørt og vekk fra eventuelle søl for å beskytte elektronikken din.

Trinn 1.8: Forbered din første målrettede lyd. Hvis dette er et ovntimersignal, kan du stille timeren til ett minutt og vente på at den skal telle ned til 20 sekunder eller så før du fortsetter til neste trinn.

Trinn 1.9: Skriv inn etikettkoden i ledeteksten (dvs. "ts"), og trykk Enter/Return.

Systemet vil begynne å lytte etter en lydhendelse som er forskjellig fra omgivelsesstøyen i rommet. Etter å ha registrert denne lydhendelsen, begynner den å spille inn til den registrerer at lyden i rommet har kommet tilbake til omgivelsesnivåene. Den lagrer deretter lyden som en 16-biters WAV-fil i katalogen som er identifisert i SAMPLES_LOCATION i formatet:

TargetedSound _#_ capture.wav

# -Delen av dette filnavnet tilsvarer antall prøver av den målrettede lyden du har samlet. Etter at WAV -filen er lagret, vil meldingen gjentas, slik at du kan samle flere sampler av den samme lyden i en enkelt kjøring av cellen.

IKKE endre dette filnavnet. Det er viktig for neste trinn.

Trinn 1.10: Gjenta trinn 1.8 og 1.9 til du har samlet 5-10 prøver av hver lyd.

Trinn 1.11: Skriv inn "x" når du er ferdig for å avslutte kjøringen.

ADVARSEL: Hvis du ikke avslutter cellen på denne måten, kan Notebook -maskinen krasje. I dette tilfellet må Notebook -kjernen nullstilles og hver celle kjøres igjen fra toppen.

Trinn 1.11 (valgfritt): Kontroller WAV -dataene for individuelle filer i cellen "Quick Sound Visualization" for å sikre at du har fanget opp all ønsket informasjon.

Noen tips:

  • Ta opp når kjøkkenet ditt er stille.
  • Ta opp bare én lyd samtidig. Systemet kan ikke skille overlapping i lyder.
  • Prøv å gjøre hver lydprøve så konsistent som mulig. Dette vil hjelpe til med identifikasjonens nøyaktighet.
  • En ny vurdering av opptakscellen vil nullstille # -verdien i filnavnet og overskrive eksisterende filer som samsvarer med #. Vi fant det lettest å ta opp alle sampler av én lyd samtidig, og deretter stoppe innspillingscellen.
  • Hvis systemet ikke henter den målrettede lyden, kan du prøve å senke THRESHOLD -verdien (satt til 30 for å starte) og revurdere cellen.
  • Hvis innspillingen utløses av andre lyder utenfor den målrettede, kan du prøve å øke THRESHOLD -verdien (satt til 30 for å starte) og revurdere cellen.

Trinn 2: Forberedelse av Arduino/Matrix Display

Forbereder Arduino/Matrix Display
Forbereder Arduino/Matrix Display
Forbereder Arduino/Matrix Display
Forbereder Arduino/Matrix Display
Forbereder Arduino/Matrix Display
Forbereder Arduino/Matrix Display

Deretter skal vi sette opp visualiseringssystemet ved hjelp av en Arduino Leonardo og KEYESTUDIO 16x16 LED dot matrix display. Dette er for å levere klassifiseringsmodellens prediksjon av oppdagede lyder. Som før har vi levert alle nødvendige filer både her og i prosjektets GitHub -depot.

Trinn 2.1: Koble Arduino- og LED -matrisen i henhold til diagrammet ovenfor. KEYESTUDIO inkluderer ledninger for å koble til prikkmatrisen, men brødbrettjumperstråder vil være nødvendig for å koble disse ledningene til Arduino

Trinn 2.2: Åpne "arduino_listener.ino" ved hjelp av Ardunio IDE og last den opp til Leonardo. Hvis den er kablet riktig, bør du se "lytte" -ikonet (ser ut som Wi-Fi) som vist på bildet ovenfor.

Trinn 2.3: Forbered ikonene du vil vise for hver av mållydene dine. For å vite hvilke lysdioder som skal lyse, må ikonet sendes fra Arduino til matrisen som en byte -matrise. For eksempel blir vårt kaffekoppikon (i bildet ovenfor) sendt til matrisen i dette formatet:

{

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

Vi tegnet ikonene våre ved hjelp av det elektroniske verktøyet Dot2Pic, med 16 kolonner, 16 rader og "monokromatisk, 8 piksler per byte, vertikal innstilling" valgt fra rullegardinmenyen. Våre finnes i matrisen "sample_icon_bytes.txt".

MERK: Det kan også være elektroniske verktøy som kan gjøre dette automatisk med opplastede filer.

Trinn 2.4: Tegn hvert ikon. Når du er ferdig med å tegne, velger du "Konverter til matrisen".

Trinn 2.5: Bytt ut unødvendige ikoner definert øverst i koden "arduino_listening.ino". Husk å legge til en kommentar som beskriver ikonet, slik at du husker hvilken som er hvilken!

Trinn 2.6: Last opp den nye koden til Arduino. Ikke lukk filen enda, vi trenger den for neste trinn.

Trinn 3: Kjøre klassifisereren og identifisere lyder

Kjører klassifisereren og identifiserer lyder
Kjører klassifisereren og identifiserer lyder
Kjører klassifisereren og identifiserer lyder
Kjører klassifisereren og identifiserer lyder

Nå er det på tide å sette sammen systemet. Klassifiseringsrørledningen, Arduino -kommunikasjon og live lydopptak gjøres gjennom en enkelt Arduino -notatbok, som er tilgjengelig her eller kan nås via prosjektets GitHub -depot.

Trinn 3.1: Kopier FullPipeline.ipynb -notatboken til den fungerende Jupyter Notebook -katalogen og åpne den.

Trinn 3.2: Kjør hver celle en etter en, og vær oppmerksom på eventuelle notater vi har gitt i overskriftene. Det forventes ingen utgang. Stopp når du kommer til cellen med tittelen "Last inn treningsdata".

Trinn 3.3: Rediger varianten SAMPLES_LOCATION_ROOT i cellen "Last inn treningsdata" til den overordnede katalogen for den tidligere eksempelkatalogens plassering. Endre deretter varianten SAMPLES_DIR_NAME til navnet på katalogen din. Så hvis du hadde angitt plasseringen i CollectSamples.ipynb til:

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

Du vil nå sette disse variablene til:

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

Vi gjorde dette mulig for raske endringer i klassifisereren i tilfeller av unøyaktighet. Du kan bytte mellom forskjellige eksempelsamlinger for å stille inn dataene dine.

Trinn 3.4: Evaluer cellen. Du bør se hver samling lastet inn.

Trinn 3.5: Fortsett å kjøre hver celle en etter en, og vær oppmerksom på eventuelle notater vi har gitt i overskriftene.

Trinn 3.6: Stopp når du kommer til cellen "Messaging Arduino". Definer den serielle porten datamaskinen din skal bruke for kommunikasjon med Arduino i PORT_DEF -variabelen. Dette finnes i Arduino IDE og går til Verktøy> Port.

Mer informasjon finner du her.

Trinn 3.8: Åpne Arduino IDE på nytt. På steder der du har gjort endringer i ikonene, noterer du bokstaven ved siden av matrisen, men IKKE endrer den. I eksemplet nedenfor er dette "g".

// søppelavhendingskonst usignert char 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,};

Trinn 3.7: (Tilbake til "Messaging Arduino" -cellen i den bærbare datamaskinen) Endre etikettene i ordlisten self.sounds slik at de samsvarer med etikettene du brukte for å registrere prøvene, og sørg for at hver etikett tilsvarer den ene bokstaven du noterte deg i forrige steg. "Innspilling" og "Lytte" er begge en del av kjernesystemfunksjonaliteten og bør ikke endres. IKKE endre den andre bokstaven med mindre du føler deg trygg på å gjøre noen ekstra endringer i Arduino -koden også, da det ellers vil ødelegge kommunikasjonen med Arduino/matrisen.

Trinn 3.8: Kjør hovedfunksjonen! Koden vil ta tak i treningsdataene, trekke ut de viktigste funksjonene, mate dem inn i rørledningen, bygge en klassifiseringsmodell og deretter begynne å lytte etter lydhendelser. Når den registrerer en, ser du matrisen endres til et opptakssymbol (firkant med sirkel inni), og den vil segmentere disse dataene og mate dem inn i modellen. Uansett hva modellen forutsier vil dukke opp noen sekunder senere på matriseskjermen.

Du kan følge med i cellens utgang nedenfor. Se hvor nøyaktig du kan få det!

Trinn 4: Lag et LEGO -hus

Lag et LEGO -hus
Lag et LEGO -hus
Lag et LEGO -hus
Lag et LEGO -hus
Lag et LEGO -hus
Lag et LEGO -hus

Dette er den morsomme delen! Du har gjort alle de seriøse maskinlæringstrinnene og fått hele ende-til-ende-systemet i gang, og nå får du leke med LEGO som en belønning. Det er ikke mye av en prosess å detaljere her. Vi har nettopp lagt til blokker vi likte her og der uten å bekymre oss for mye om det overordnede designet, og vi endte med å være fornøyd med måten det ble på.

La bildene våre tjene som inspirasjon for dine egne kreative boliger som er unike for kjøkkenet ditt. Vi plasserte Arduino og flertallet av ledningene i et hul etui, og festet deretter matrisedisplayet ovenfor med overheng. Vi la til litt papir over skjermen for å spre lyset litt, noe vi følte gjorde ikonene tydeligere.

Anbefalt: