Indholdsfortegnelse:

Custom Kitchen Sound Identifier: 4 trin
Custom Kitchen Sound Identifier: 4 trin

Video: Custom Kitchen Sound Identifier: 4 trin

Video: Custom Kitchen Sound Identifier: 4 trin
Video: If someone puts a PLASTIC BOTTLE on your TIRE, call the police IMMEDIATELY 🤯💥 2024, November
Anonim
Image
Image
Tilpasset køkken lydidentifikator
Tilpasset køkken lydidentifikator

Til vores sidste projekt i et interaktivt systemkursus i foråret skabte vi et system i realtid til at identificere og visualisere almindelige lyde i køkkenet ved hjælp af Support-Vector Machine-klassificering. Systemet består af en bærbar computer til lydsampling/klassificering og et Arduino/dot matrix display til visualisering. Det følgende er en vejledning til oprettelse af din egen version af dette system til lyde fra dit eget køkken.

Vores originale brugstilfælde var som en enhed til køkkenet for en døve og hørehæmmede, men dette system kunne teoretisk tilpasses til at identificere et sæt lyde i forskellige sammenhænge. Køkkenet var et ideelt sted at starte, da det plejer at være relativt stille og indeholder en rimelig mængde enkle, tydelige lyde.

Et GitHub -depot til dette projekt findes her.

Forbrugsvarer

  • Arduino Leonardo mikrokontroller med headers
  • KEYESTUDIO 16x16 Dot Matrix LED Display til Arduino
  • Breadboard jumper wire
  • Micro-USB til USB 2.0 kabel
  • En bærbar computer med Jupyter Notebook (Anaconda installation)

    En begyndervejledning til Jupyter Notebook findes her

  • En betydelig mængde uoverensstemmende LEGO klodser til systemets hus

    (Men du kan virkelig erstatte disse med ethvert byggemateriale, du gerne vil have!)

Trin 1: Indsamling af køkkenlydprøver

Indsamling af køkkenlydprøver
Indsamling af køkkenlydprøver

Figur ovenfor: Lyddata taget fra optagelse af en gaffel og en kniv, der klirrer sammen ved hjælp af denne indsamlingsproces

For at identificere realtidslyde skal vi levere vores maskinindlæringsmodel kvalitetseksempler til sammenligning. Vi har oprettet en Jupyter -notesbog til denne proces, som kan tilgås her eller gennem vores projekts GitHub -depot. Depotet indeholder også prøvesamlinger fra to forskellige køkkener til testformål.

Trin 1.1: Kopier CollectSamples.ipynb -notesbogen til dit fungerende Jupyter Notebook -bibliotek, og åbn det.

Trin 1.2: Kør hver celle en efter en, og vær opmærksom på eventuelle noter, vi har angivet i overskrifterne. Stop, når du når en med titlen "Sample Recording".

BEMÆRK: Flere Python -biblioteker bruges i denne notesbog, og hver enkelt kræver installation, før de med succes kan importeres til projektet. Du er velkommen til at gøre dette manuelt, selvom en guide til bibliotekinstallation i Jupyter Notebook kan findes her.

Trin 1.3: Opret et tomt bibliotek for at gemme dine prøver i dit arbejdskatalog til dette projekt.

Trin 1.4: Rediger variablen SAMPLES_LOCATION i cellen "Sample Recording", så den matcher din tomme biblioteks placering.

Trin 1.5: Tilføj eller fjern så mange lyde som du vil til variablen SOUND_LABELS.

For at prøveoptagelseskoden skal fungere, skal hver linje i denne variabel være adskilt med et komma og med følgende form:

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

Trin 1.6: Når alle etiketter er tilføjet, evalueres cellen "Prøveoptagelse" med start af prøveopsamlingsprocessen. I cellens output bliver du bedt om at indtaste den korte kode, du har knyttet til hver lyd i etiketterne (dvs. "ts" for TargetedSound). Gør ikke dette endnu.

Trin 1.7: Tag din bærbare computer ind i køkkenet, og placer den i det område, du sandsynligvis ville placere det færdige system. Denne placering skal være central for god lydopsamling og tør og væk fra eventuelle spild for at beskytte din elektronik.

Trin 1.8: Forbered din første målrettede lyd. Hvis dette er et ovntimer -bip, kan du indstille timeren til et minut og vente på, at den tæller ned til 20 sekunder eller deromkring, før du fortsætter til næste trin.

Trin 1.9: Indtast etiketkoden i prompten (dvs. "ts"), og tryk på Enter/Return.

Systemet vil begynde at lytte efter en lydbegivenhed, der adskiller sig fra støj fra omgivelserne. Når denne lydbegivenhed registreres, begynder den at optage, indtil den registrerer, at lyden i rummet er vendt tilbage til de omgivende niveauer. Det gemmer derefter lyden som en 16-bit WAV-fil i biblioteket identificeret i SAMPLES_LOCATION i formatet:

TargetedSound _#_ capture.wav

# -Delen af dette filnavn svarer til antallet af prøver af den målrettede lyd, du har indsamlet. Når WAV -filen er gemt, gentages prompten, så du kan indsamle flere sampler af den samme lyd i en enkelt udførelse af cellen.

Ændre IKKE dette filnavn. Det er vigtigt for det næste trin.

Trin 1.10: Gentag trin 1.8 og 1.9, indtil du har samlet 5-10 prøver af hver lyd.

Trin 1.11: Indtast "x", når du er færdig for at afslutte udførelsen.

ADVARSEL: Manglende afslutning af cellen på denne måde kan få notebook'en til at gå ned. I dette tilfælde skal Notebook -kernen nulstilles, og hver celle køres igen ovenfra.

Trin 1.11 (valgfrit): Kontroller WAV -data for individuelle filer i cellen "Quick Sound Visualization" for at sikre, at du har fanget alle ønskede oplysninger.

Nogle tips:

  • Optag, når dit køkken er stille.
  • Optag kun én lyd ad gangen. Systemet kan ikke skelne mellem overlapninger i lyde.
  • Prøv at gøre hver lydforsøg så konsekvent som muligt. Dette vil hjælpe identifikationens nøjagtighed.
  • Genvurdering af optagelsescellen nulstiller # -værdien i filnavnet og overskriver alle eksisterende filer, der matcher dette #. Vi fandt det lettest at optage alle sampler af en lyd på én gang og derefter stoppe optagelsescellen.
  • Hvis systemet ikke opfanger din målrettede lyd, kan du prøve at sænke THRESHOLD -værdien (indstillet til 30 for at starte) og revurdere cellen.
  • Hvis optagelsen udløses af andre lyde uden for den målrettede, skal du prøve at hæve THRESHOLD -værdien (indstillet til 30 for at starte) og revurdere cellen.

Trin 2: Forberedelse af Arduino/Matrix Display

Forberedelse af Arduino/Matrix Display
Forberedelse af Arduino/Matrix Display
Forberedelse af Arduino/Matrix Display
Forberedelse af Arduino/Matrix Display
Forberedelse af Arduino/Matrix Display
Forberedelse af Arduino/Matrix Display

Dernæst vil vi konfigurere visualiseringssystemet ved hjælp af et Arduino Leonardo og KEYESTUDIO 16x16 LED dot matrix display. Dette er for at udsende klassificeringsmodellens forudsigelse af detekterede lyde. Som før har vi leveret alle nødvendige filer både her og i projektets GitHub -depot.

Trin 2.1: Tilslut Arduino- og LED -matricen i henhold til diagrammet ovenfor. KEYESTUDIO inkluderer ledninger til tilslutning til deres dotmatrix, men brødbrætstrømledere vil være nødvendige for at forbinde disse ledninger til Arduino

Trin 2.2: Åbn "arduino_listener.ino" ved hjælp af Ardunio IDE og upload det til Leonardo. Hvis kablet korrekt, skal du se ikonet "lytte" (ligner Wi-Fi) som vist på billedet ovenfor.

Trin 2.3: Forbered de ikoner, du gerne vil vise for hver af dine mållyde. For at vide, hvilke lysdioder der skal lyse, skal ikonet sendes fra Arduino til matrixen som et byte -array. For eksempel sendes vores kaffekopikon (i billedet ovenfor) til matrixen i dette format:

{

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 tegnede vores ikoner ved hjælp af online -værktøjet Dot2Pic med 16 kolonner, 16 rækker og "monokromatisk, 8 pixels pr. Byte, lodret indstilling" valgt fra rullemenuen. Vores findes i arrayet "sample_icon_bytes.txt".

BEMÆRK: Der kan også være onlineværktøjer, der kan gøre dette automatisk med uploadede filer.

Trin 2.4: Tegn hvert ikon. Når du er færdig med at tegne, skal du vælge "Konverter til array".

Trin 2.5: Udskift unødvendige ikoner defineret øverst i koden "arduino_listening.ino" som ønsket. Sørg for at tilføje en kommentar, der beskriver ikonet, så du kan huske, hvilken der er hvilken!

Trin 2.6: Upload den nye kode til Arduino. Luk ikke filen endnu, vi skal bruge den til næste trin.

Trin 3: Kør klassifikatoren og identificer lyde

Kører klassifikatoren og identificerer lyde
Kører klassifikatoren og identificerer lyde
Kører klassifikatoren og identificerer lyde
Kører klassifikatoren og identificerer lyde

Nu er det tid til at sammensætte systemet. Klassificeringsrørledningen, Arduino -kommunikation og live lydoptagelse sker alt sammen via en enkelt Arduino -notesbog, som er blevet leveret her eller kan tilgås via vores projekts GitHub -depot.

Trin 3.1: Kopier FullPipeline.ipynb -notesbogen til dit fungerende Jupyter Notebook -bibliotek, og åbn det.

Trin 3.2: Kør hver celle en efter en, og vær opmærksom på eventuelle noter, vi har angivet i overskrifterne. Der forventes ingen output. Stop, når du når cellen med titlen "Indlæs træningsdata".

Trin 3.3: Rediger variablen SAMPLES_LOCATION_ROOT i cellen "Indlæs træningsdata" til det overordnede bibliotek for din tidligere prøvekatalogs placering. Skift derefter variablen SAMPLES_DIR_NAME til navnet på dit bibliotek. Så hvis du havde angivet placeringen i CollectSamples.ipynb til:

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

Du ville nu indstille disse variabler til:

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

Vi gjorde dette muligt for hurtige ændringer af klassifikatoren i tilfælde af unøjagtighed. Du kan skifte mellem forskellige eksempelsamlinger for at indstille dine data.

Trin 3.4: Evaluer cellen. Du bør se hver samling indlæst med succes.

Trin 3.5: Fortsæt med at køre hver celle en efter en, og vær opmærksom på eventuelle noter, vi har angivet i overskrifterne.

Trin 3.6: Stop, når du når cellen "Messaging Arduino". Definer den serielle port, som din computer skal bruge til kommunikation med Arduino i variablen PORT_DEF. Dette kan findes i Arduino IDE og gå til Værktøjer> Port.

Mere information kan findes her.

Trin 3.8: Åbn din Arduino IDE igen. På steder, hvor du har foretaget ændringer af ikonerne, skal du notere bogstavet ud for matrixværdien, men IKKE ændre det. I eksemplet herunder er dette "g".

// affaldsbortskaffelse konstant usigneret 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,};

Trin 3.7: (Tilbage til "Messaging Arduino" -cellen i notesbogen) Skift etiketterne i self.sounds -ordbogen, så de matcher de etiketter, du brugte ved optagelse af dine prøver, og sørg for, at hver etiket svarer til det enkelte bogstav, du noterede i forrige trin. "Optagelse" og "Lytning" er begge en del af kernesystemets funktionalitet og bør ikke ændres. Du må IKKE ændre det andet bogstav, medmindre du føler dig sikker på også at foretage et par ekstra ændringer i Arduino -koden, da det ellers vil ødelægge kommunikationen med Arduino/matrix.

Trin 3.8: Kør hovedfunktionen! Koden tager fat i træningsdataene, udtrækker dens nøglefunktioner, indfører dem i pipeline, bygger en klassificeringsmodel og begynder derefter at lytte efter lydhændelser. Når den registrerer en, vil du se matrixen skifte til et optagesymbol (firkantet med cirkel indeni), og den vil segmentere disse data og indføre dem i modellen. Uanset hvad modellen forudsiger, vises et par sekunder senere på matrixdisplayet.

Du kan følge med i cellens output nedenfor. Se hvor præcis du kan få det!

Trin 4: Oprettelse af et LEGO -hus

Oprettelse af et LEGO -hus
Oprettelse af et LEGO -hus
Oprettelse af et LEGO -hus
Oprettelse af et LEGO -hus
Oprettelse af et LEGO -hus
Oprettelse af et LEGO -hus

Dette er den sjove del! Du har udført alle de seriøse maskinlæringstrin og har fået hele ende-til-ende-systemet i gang, og nu kan du lege med LEGO som en belønning. Der er ikke meget af en proces til detaljer her. Vi tilføjede bare blokke, vi godt kunne lide hist og her uden at bekymre os for meget om det overordnede design, og vi endte med at være tilfredse med den måde, det viste sig.

Lad vores billeder tjene som inspiration til dine egne kreative boliger, der er unikke for dit køkken. Vi placerede Arduino og størstedelen af ledningerne i en hul kasse og fik derefter matrixdisplayet ovenover med udhæng. Vi tilføjede en smule papir over displayet for at sprede lyset lidt, hvilket vi følte gjorde ikonerne klarere.

Anbefalede: