{"id":1857,"date":"2016-12-07T12:20:58","date_gmt":"2016-12-07T11:20:58","guid":{"rendered":"http:\/\/dronesonen.hibu.no\/?p=1857"},"modified":"2016-12-07T20:32:54","modified_gmt":"2016-12-07T19:32:54","slug":"forklaring-pa-hvordan-temposcope-sin-liksom-a-i-er-bygget-opp","status":"publish","type":"post","link":"https:\/\/dronesonen.usn.no\/?p=1857","title":{"rendered":"Forklaring p\u00e5 hvordan Temposcope sin liksom A.I. er bygget opp."},"content":{"rendered":"<p><strong>Heisann bloggen!<\/strong><\/p>\n<p>Tenkte jeg skulle dele med dere andre hvordan oppsettet p\u00e5 hjernen til v\u00e5rt lille projekt ser ut. Det ser kanskje ikke s\u00e5 pent ut, men det fungerer ganske bra! Tenk &#8220;Siri&#8221; ifra eple bedriften. Jeg har pr\u00f8vd \u00e5 lage en simplifisert utgave av den. Min versjon heter dog &#8220;Pide&#8221; som er et ordspill p\u00e5 Raspberry pi og &#8220;Heidi&#8221; siden jeg b\u00e5de elsker Pi og sveitsiske fjellgjetere.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Alt som omhandler Pide!<\/strong><\/p>\n<p><strong>Utstyr<\/strong><\/p>\n<ul>\n<li>Raspberry Pi model 3b<\/li>\n<li>Creative Webcam HD 700<\/li>\n<li>NITO ekstern h\u00f8ytaler<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><strong>Eksterne biblotek<\/strong><\/p>\n<ul>\n<li>Google Speech API<\/li>\n<li>OpenWeatherMap API<\/li>\n<li>OpenCV v2.4.13<\/li>\n<li>Pickle<\/li>\n<li>JSON<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><strong>Imports<\/strong><\/p>\n<ul>\n<li>Pickle<\/li>\n<li>Threading<\/li>\n<li>Time<\/li>\n<li>Random<\/li>\n<li>gTTs<\/li>\n<li>Numpy<\/li>\n<li>pyowm<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><strong>Programmeringspr\u00e5k<\/strong><\/p>\n<ul>\n<li>Python 2.6<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><strong>Programmet best\u00e5r av<\/strong><\/p>\n<ul>\n<li>Usermanager.py<\/li>\n<li>User.py<\/li>\n<li>Sendweather.py<\/li>\n<li>Pideweather.py<\/li>\n<li>Pidestt.py<\/li>\n<li>Pidetts.py<\/li>\n<li>Pide.py<\/li>\n<li>Main.py<\/li>\n<li>Create_data.py<\/li>\n<li>Config.py<\/li>\n<\/ul>\n<p><strong>Main.py<\/strong><\/p>\n<p>Denne filen best\u00e5r av to klasser.<\/p>\n<p><em>Brain<\/em> og <em>Vision<\/em>.<\/p>\n<p><em>Vision<\/em><\/p>\n<p>Denne klassen har ansvaret for \u00e5 lete etter brukeren visuelt ved bruk av OpenCV. Den starter med \u00e5 laste inn en \u201chaarcascade\u201d fil produsert av intel som gj\u00f8r det mulig for OpenCV \u00e5 gjenkjenne objekter, i dette tilfellet er det ansikter. Deretter vi en liste over ansikter som ligger i mappen angitt til \u00e5 v\u00e6re mappen der brukerenes ansikt lagres.<\/p>\n<p>Denne listen benyttes til \u201ctrene\u201d OpenCV, slik at det vil gjenkjenne de fjesene som ligger i listen ved bruk av det som kalles \u201cFischer Face Recognizer\u201d.<\/p>\n<p>N\u00e5r denne oppgaven er utf\u00f8rt starter den \u00e5 str\u00f8mme ifra web kameraet og hvis den ser en kjent bruker sender den melding om at bruker er funnet via \u201cQueue\u201d til hjernen.<\/p>\n<p>Grunnen til at en k\u00f8 benyttes er at dette er den tryggeste m\u00e5ten \u00e5 kommunisere p\u00e5 tvers av tr\u00e5der i python siden den klassen har innebygd semaphorer som s\u00f8rger for at mann ikke pr\u00f8ver \u00e5 lese og skrive til samme sted i minnet ifra to forskjellige tr\u00e5der.<\/p>\n<p><em>Brain<\/em><\/p>\n<p>Denne klassen er selve grunnlaget for programmet. Den har ansvaret for \u00e5 ta imot en bruker og behandle brukerens \u00f8nsker. N\u00e5r Brain har logget inn en registrert bruker og eller f\u00e5tt oppfordring til \u00e5 starte igjennom tale, gir den en melding til Vision slik at videostr\u00f8mmen termineres. Dette gj\u00f8r jeg for \u00e5 redusere forbruket av prosessorkraft slik at de viktige oppgavene f\u00e5r optimal ytelse.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Pide.py<\/strong><\/p>\n<p>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 \u00e5 behandle og respondere p\u00e5 audiotoriske intrykk.<\/p>\n<p>Den best\u00e5r disse metodene:<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><em>Init<\/em><\/li>\n<\/ul>\n<p>Oppgaven til init er \u00e5 sette igang Pide sin mulighet til \u00e5 konvertere spr\u00e5k til tekst og er det f\u00f8rste som kj\u00f8rer n\u00e5r pide.py eksekveres.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><em>LoginVoice<\/em><\/li>\n<\/ul>\n<p>Oppgaven til LoginVoice er \u00e5 pr\u00f8ve \u00e5 finne hvilken bruker som benytter systemet dersom det ikke finnes noen bilde gjenkjenning av personen.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><em>ConfirmPassword<\/em><\/li>\n<\/ul>\n<p>Oppgaven til ConfirmPassword er \u00e5 f\u00e5 oppgitt passordet til den antatte brukeren for \u00e5 deretter sjekke at det er det riktige passordet til den registrete brukeren.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><em>LoginUser<\/em><\/li>\n<\/ul>\n<p>Oppgaven til LoginUser er \u00e5 finne brukeren i registeret for \u00e5 s\u00e5 sette brukeren som \u00f8nsker \u00e5 benytte systemet som systemets n\u00e5v\u00e6rende bruker.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><em>CreateUser<\/em><\/li>\n<\/ul>\n<p>Denne metoden setter igang prosessen som skal opprette en ny bruker.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><em>PlaySong<\/em><\/li>\n<\/ul>\n<p>Pr\u00f8v den, jeg utforder deg.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><em>Repeater<\/em><\/li>\n<\/ul>\n<p>Denne metoden benyttes til \u00e5 si tilbake det som brukeren sa og blir mest brukt for \u00e5 feils\u00f8ke.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><em>GreetUser<\/em><\/li>\n<\/ul>\n<p>Denne metoden har som form\u00e5l \u00e5 \u00f8nske brukeren velkommen. I en senere iterasjon vil den ogs\u00e5 benytte definert informasjon om brukeren til \u00e5 modifisere hilsenen.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><em>WeatherModule<\/em><\/li>\n<\/ul>\n<p>Denne metoden sitt hovedformal er \u00e5 innhente informasjon om hvor brukeren \u00f8nsker \u00e5 f\u00e5 innformert v\u00e6rdata for.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><em>GetWeatherAtTime<\/em><\/li>\n<\/ul>\n<p>Denne metoden har som oppgave \u00e5 innhente informasjon ifra brukeren om i hvilken tidsramme han \u00f8nsker v\u00e6rdata for.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><em>GetUserRequest<\/em><\/li>\n<\/ul>\n<p>Her danner vi brukergrensersnittet. N\u00e5r TempoScope har en bruker innlogget er det her mann kan p\u00e5virke hvilke oppgaver mann \u00f8nsker utf\u00f8rt. Jeg har pr\u00f8vd \u00e5 gj\u00f8re det slik at Pide leter etter n\u00f8kkelord i stedet for n\u00f8yaktige settninger slik at brukerern finner frem lettest mulig.<\/p>\n<p><em>Bruker kan be om:<\/em><\/p>\n<ul>\n<li>\u201cWho am I\u201d &#8211; Denne vil returnere hvilken bruker systemet antar at den n\u00e5v\u00e6rende brukeren er.<\/li>\n<li>\u201cWeather\u201d &#8211; Denne vil iverksette WeatherModule og gi brukeren mulighet til \u00e5 be om v\u00e6rdata<\/li>\n<li>\u201cShutdown\u201d &#8211; Skrur av maskinen<\/li>\n<li>\u201cLogout\u201d &#8211; Terminerer den n\u00e5v\u00e6rende brukeren og setter temposcope tilbake til s\u00f8k etter bruker modus.<\/li>\n<li>\u201cPictures\u201d &#8211; Gir brukeren mulighet til \u00e5 ta nye bilder for \u00e5 oppdatere profilen sin.<\/li>\n<li>\u201cReport\u201d &#8211; Denne returnerer en liste over alle registrerte brukere av systemet.<\/li>\n<li>\u201cDelete\u201d &#8211; Denne gir n\u00e5v\u00e6rende bruker muligheten til \u00e5 slette andre bruker profiler.<\/li>\n<li>\u201cPlay\u201d &#8211; Spiller favoritt sangen din.<\/li>\n<li>\u201cTime\u201d &#8211; Returnerer hva klokken er lokal tid til systemet.<\/li>\n<li>\u201cDate\u201d &#8211; Returnerer hvilken dag det er p\u00e5 n\u00e5v\u00e6rende tidspunkt.<\/li>\n<li>\u201cHelp\u201d &#8211; Returnerer instruks til brukeren om hvordan mann benytter systemet.<\/li>\n<\/ul>\n<p><strong>User.py<\/strong><\/p>\n<p>Dette er objektet som alle brukere lagres som. Hver bruker best\u00e5r av navn, passord, brukermappe og hjemsted.<\/p>\n<p><strong>Usermanager.py<\/strong><\/p>\n<p>Denne fila har ansvar over registeret av brukere.<\/p>\n<p>Selve registeret er en liste over User objekter lagret i en pickle fil.<\/p>\n<p>&nbsp;<\/p>\n<p>Metoder:<\/p>\n<ul>\n<li><em>saveUsers<\/em><\/li>\n<\/ul>\n<p>Denne metoden lagrer brukere til userlist.pkl som er en pickle fil.<\/p>\n<ul>\n<li><em>loadUsers<\/em><\/li>\n<\/ul>\n<p>Denne metoden henter ut brukerene ifra userlist.pkl som er en pickle fil.<\/p>\n<ul>\n<li><em>userReport<\/em><\/li>\n<\/ul>\n<p>Denne metoden leser igjennom alle user objekter som ligger i users lista.<\/p>\n<ul>\n<li><em>addUser<\/em><\/li>\n<\/ul>\n<p>Denne metoden har som oppgave \u00e5 opprette brukere.<\/p>\n<p>Personen som \u00f8nsker \u00e5 opprette en bruker vil f\u00f8rst bli spurt om hvilke brukernavn de \u00f8nsker \u00e5 opprette, deretter m\u00e5 de opprette ett passord og ett hjemsted.<\/p>\n<p>N\u00e5r all \u00f8nskelig 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.<\/p>\n<ul>\n<li><em>setPsw<\/em><\/li>\n<\/ul>\n<p>Denne metoden har som oppgave \u00e5 opprette passord for brukeren som \u00f8nsker \u00e5 registrere seg.<\/p>\n<ul>\n<li><em>setHomeLocation<\/em><\/li>\n<\/ul>\n<p>Denne metoden har som oppgave \u00e5 innhente informasjon om hvor brukeren som \u00f8nsker \u00e5 registrere seg har bopel.<\/p>\n<ul>\n<li><em>deleteUser<\/em><\/li>\n<\/ul>\n<p>Denne metoden behandler alle foresp\u00f8rsler og \u00f8nsker om \u00e5 fjerne brukere ifra bruker lista og s\u00f8rger for at all data om bruker blir fjernet.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Config.py<\/strong><\/p>\n<p>Denne filen har som oppgave \u00e5 opprette mapper dersom de mangler.<\/p>\n<p>Den inneholder ogs\u00e5 informasjon som blir delt imellom de andre filene.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Create_data.py<\/strong><\/p>\n<p>Denne fila inneholder funksjonaliteten som gj\u00f8r det mulig for web kameraet \u00e5 ta bilder slik at brukere kan opprette bruker profiler.<\/p>\n<p><strong>Pidestt.py<\/strong><\/p>\n<p>Denne fila har ansvaret for alt som omhandler \u00e5 gj\u00f8re spr\u00e5k om til tekst.<\/p>\n<p><strong>Pidetts.py<\/strong><\/p>\n<p>Denne fila har ansvaret for alt som omhander \u00e5 gj\u00f8re tekst om til spr\u00e5k.<\/p>\n<p><strong>Pideweather.py<\/strong><\/p>\n<p>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.<\/p>\n<p>&nbsp;<\/p>\n<p>Andreas Holm<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Heisann bloggen! Tenkte jeg skulle dele med dere andre hvordan oppsettet p\u00e5 hjernen til v\u00e5rt lille projekt ser ut. Det ser kanskje ikke s\u00e5 pent ut, men det fungerer ganske bra! Tenk &#8220;Siri&#8221; ifra eple bedriften. Jeg har pr\u00f8vd \u00e5 lage en simplifisert utgave av den. Min versjon heter dog &#8220;Pide&#8221; som er et ordspill [&hellip;]<\/p>\n","protected":false},"author":52,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43],"tags":[],"class_list":["post-1857","post","type-post","status-publish","format-standard","hentry","category-temposcope"],"_links":{"self":[{"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts\/1857","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1857"}],"version-history":[{"count":1,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts\/1857\/revisions"}],"predecessor-version":[{"id":1858,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts\/1857\/revisions\/1858"}],"wp:attachment":[{"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1857"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1857"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1857"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}