Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Samle kjøkkenlydprøver
- Trinn 2: Forberedelse av Arduino/Matrix Display
- Trinn 3: Kjøre klassifisereren og identifisere lyder
- Trinn 4: Lag et LEGO -hus
Video: Tilpasset kjøkken lydidentifikator: 4 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:22
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
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
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
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
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:
Komme i gang med STM32f767zi Cube IDE og laste opp tilpasset skisse: 3 trinn
Komme i gang med STM32f767zi Cube IDE og laste opp tilpasset skisse: KJØP (klikk på testen for å kjøpe/besøk websiden) STM32F767ZISUPPORTED SOFTWARE · STM32CUBE IDE · KEIL MDK ARM µVISION · EWARM IAR EMBEDDED WORKBENCH · ARDUIN brukes til å programmere STM mikrokontrollere
Hodetelefonforsterker med tilpasset PCB: 8 trinn (med bilder)
Hodetelefonforsterker med tilpasset PCB: Jeg har bygd (og prøvd å perfeksjonere) hodetelefonforsterkeren en stund nå. Noen av dere ville ha sett mine tidligere ible -bygg. For de som ikke har jeg har koblet disse nedenfor. På mine eldre bygg har jeg alltid brukt prototypekort for å bygge t
Bygg en bærbar bevegelsessporer (BLE fra Arduino til en tilpasset Android Studio -app): 4 trinn
Bygg en bærbar bevegelsessporer (BLE fra Arduino til en tilpasset Android Studio -app): Bluetooth Low Energy (BLE) er en form for lav effekt Bluetooth -kommunikasjon. Bærbare enheter, som de smarte plaggene jeg hjelper til med å designe på Predictive Wear, må begrense strømforbruket der det er mulig for å forlenge batterilevetiden, og ofte bruke BLE
KJØKKEN RØRKRAN: 4 trinn
KJØKKEN RØRKRANE: Hilsen alle, jeg er en matglad og elsker varme supper, saus, vaniljesaus og mer, men for det bruker jeg eller min kone mye tid på å røre eller vispe i flere timer. Jeg ønsket å ta det som en utfordring, å lage et kostnadseffektivt design, som er skalert
Kjøkken -PC med bærbar vri: 5 trinn
Kjøkken -PC med bærbar vri: Jeg ønsket å bygge en kjøkken -PC, men trengte den ut av veien. Jeg så Sony underskapene og hadde denne ideen. Brakettene er enkle L -braketter som jeg satte i en skrustikke og hamret i formen du ser på bilde 1. Det ser ganske stygt ut av dette