Heisann bloggen!
Tenkte jeg skulle dele med dere andre hvordan oppsettet på hjernen til vårt lille projekt ser ut. Det ser kanskje ikke så pent ut, men det fungerer ganske bra! Tenk “Siri” ifra eple bedriften. Jeg har prøvd å lage en simplifisert utgave av den. Min versjon heter dog “Pide” som er et ordspill på Raspberry pi og “Heidi” siden jeg både elsker Pi og sveitsiske fjellgjetere.
Alt som omhandler Pide!
Utstyr
- Raspberry Pi model 3b
- Creative Webcam HD 700
- NITO ekstern høytaler
Eksterne biblotek
- Google Speech API
- OpenWeatherMap API
- OpenCV v2.4.13
- Pickle
- JSON
Imports
- Pickle
- Threading
- Time
- Random
- gTTs
- Numpy
- pyowm
Programmeringspråk
- Python 2.6
Programmet består av
- Usermanager.py
- User.py
- Sendweather.py
- Pideweather.py
- Pidestt.py
- Pidetts.py
- Pide.py
- Main.py
- Create_data.py
- Config.py
Main.py
Denne filen består av to klasser.
Brain og Vision.
Vision
Denne klassen har ansvaret for å lete etter brukeren visuelt ved bruk av OpenCV. Den starter med å laste inn en “haarcascade” fil produsert av intel som gjør det mulig for OpenCV å gjenkjenne objekter, i dette tilfellet er det ansikter. Deretter vi en liste over ansikter som ligger i mappen angitt til å være mappen der brukerenes ansikt lagres.
Denne listen benyttes til “trene” OpenCV, slik at det vil gjenkjenne de fjesene som ligger i listen ved bruk av det som kalles “Fischer Face Recognizer”.
Når denne oppgaven er utført starter den å strømme ifra web kameraet og hvis den ser en kjent bruker sender den melding om at bruker er funnet via “Queue” til hjernen.
Grunnen til at en kø benyttes er at dette er den tryggeste måten å kommunisere på tvers av tråder i python siden den klassen har innebygd semaphorer som sørger for at mann ikke prøver å lese og skrive til samme sted i minnet ifra to forskjellige tråder.
Brain
Denne klassen er selve grunnlaget for programmet. Den har ansvaret for å ta imot en bruker og behandle brukerens ønsker. Når Brain har logget inn en registrert bruker og eller fått oppfordring til å starte igjennom tale, gir den en melding til Vision slik at videostrømmen termineres. Dette gjør jeg for å redusere forbruket av prosessorkraft slik at de viktige oppgavene får optimal ytelse.
Pide.py
Denne filen er grunnstammen i programmet. Det er her alle forgreninger ut til resten av funksjonaliteten kommer ifra. Mann kan si det slik at denne filen er personligheten til Pide da den har som oppgave å behandle og respondere på audiotoriske intrykk.
Den består disse metodene:
- Init
Oppgaven til init er å sette igang Pide sin mulighet til å konvertere språk til tekst og er det første som kjører når pide.py eksekveres.
- LoginVoice
Oppgaven til LoginVoice er å prøve å finne hvilken bruker som benytter systemet dersom det ikke finnes noen bilde gjenkjenning av personen.
- ConfirmPassword
Oppgaven til ConfirmPassword er å få oppgitt passordet til den antatte brukeren for å deretter sjekke at det er det riktige passordet til den registrete brukeren.
- LoginUser
Oppgaven til LoginUser er å finne brukeren i registeret for å så sette brukeren som ønsker å benytte systemet som systemets nåværende bruker.
- CreateUser
Denne metoden setter igang prosessen som skal opprette en ny bruker.
- PlaySong
Prøv den, jeg utforder deg.
- Repeater
Denne metoden benyttes til å si tilbake det som brukeren sa og blir mest brukt for å feilsøke.
- GreetUser
Denne metoden har som formål å ønske brukeren velkommen. I en senere iterasjon vil den også benytte definert informasjon om brukeren til å modifisere hilsenen.
- WeatherModule
Denne metoden sitt hovedformal er å innhente informasjon om hvor brukeren ønsker å få innformert værdata for.
- GetWeatherAtTime
Denne metoden har som oppgave å innhente informasjon ifra brukeren om i hvilken tidsramme han ønsker værdata for.
- GetUserRequest
Her danner vi brukergrensersnittet. Når TempoScope har en bruker innlogget er det her mann kan påvirke hvilke oppgaver mann ønsker utført. Jeg har prøvd å gjøre det slik at Pide leter etter nøkkelord i stedet for nøyaktige settninger slik at brukerern finner frem lettest mulig.
Bruker kan be om:
- “Who am I” – Denne vil returnere hvilken bruker systemet antar at den nåværende brukeren er.
- “Weather” – Denne vil iverksette WeatherModule og gi brukeren mulighet til å be om værdata
- “Shutdown” – Skrur av maskinen
- “Logout” – Terminerer den nåværende brukeren og setter temposcope tilbake til søk etter bruker modus.
- “Pictures” – Gir brukeren mulighet til å ta nye bilder for å oppdatere profilen sin.
- “Report” – Denne returnerer en liste over alle registrerte brukere av systemet.
- “Delete” – Denne gir nåværende bruker muligheten til å slette andre bruker profiler.
- “Play” – Spiller favoritt sangen din.
- “Time” – Returnerer hva klokken er lokal tid til systemet.
- “Date” – Returnerer hvilken dag det er på nåværende tidspunkt.
- “Help” – Returnerer instruks til brukeren om hvordan mann benytter systemet.
User.py
Dette er objektet som alle brukere lagres som. Hver bruker består av navn, passord, brukermappe og hjemsted.
Usermanager.py
Denne fila har ansvar over registeret av brukere.
Selve registeret er en liste over User objekter lagret i en pickle fil.
Metoder:
- saveUsers
Denne metoden lagrer brukere til userlist.pkl som er en pickle fil.
- loadUsers
Denne metoden henter ut brukerene ifra userlist.pkl som er en pickle fil.
- userReport
Denne metoden leser igjennom alle user objekter som ligger i users lista.
- addUser
Denne metoden har som oppgave å opprette brukere.
Personen som ønsker å opprette en bruker vil først bli spurt om hvilke brukernavn de ønsker å opprette, deretter må de opprette ett passord og ett hjemsted.
Når all ønskelig informasjon om brukeren er innhetet, vil web kameraet ta bilder av brukeren slik at personen kan bli gjenkjent av OpenCv, deretter vil user objektet bli opprettet lagret i bruker lista.
- setPsw
Denne metoden har som oppgave å opprette passord for brukeren som ønsker å registrere seg.
- setHomeLocation
Denne metoden har som oppgave å innhente informasjon om hvor brukeren som ønsker å registrere seg har bopel.
- deleteUser
Denne metoden behandler alle forespørsler og ønsker om å fjerne brukere ifra bruker lista og sørger for at all data om bruker blir fjernet.
Config.py
Denne filen har som oppgave å opprette mapper dersom de mangler.
Den inneholder også informasjon som blir delt imellom de andre filene.
Create_data.py
Denne fila inneholder funksjonaliteten som gjør det mulig for web kameraet å ta bilder slik at brukere kan opprette bruker profiler.
Pidestt.py
Denne fila har ansvaret for alt som omhandler å gjøre språk om til tekst.
Pidetts.py
Denne fila har ansvaret for alt som omhander å gjøre tekst om til språk.
Pideweather.py
Denne fila tar for seg alt som benytter OpenWeatherMap sin api. For ordens skyld valgte jeg og bruke en python wrapper kalt pyowm siden det da ble litt ryddigere.
Andreas Holm