Exjobbsnytt: VPN, RTSP, threading, Raspberry Pi..

.. med mera! De senaste veckorna av exjobb har bjudit på många nya tekniker och kluringar. Projektet innehåller många delar som ska kopplas samman (se detta inlägg) och vissa av dem har känts lite abstrakta fram tills nyss. Exempelvis så visste vi att det fanns en Axis-kamera på plats på Kolmården. Däremot visste vi inte riktigt vilken funktionalitet den hade och hur vi skulle kunna komma åt videoströmmen. När något känns abstrakt är det ju ibland också svårt att formulera de frågor man behöver svar på.. Nu är vi glada över att ha ersatt flera frågetecken med spännande resultat 😀

Livedetektion av Zebror på Kolmården - från kontoret!

Förra veckan var vi iväg på två besök som gjorde saker och ting klarare för oss. Vi spenderade en heldag på Kolmården och fick lära oss om den hårdvara som används för projektet. Eftersom målet är att få ut kameran mitt på savannen så jobbas det på ett elskåp som drivs på solceller. Skåpet är fyllt med batterier, spänningsmätare, nätverksswitch m.m. och var också något som kändes abstrakt förut (iallafall för mig som inte har så bra koll på ellära hehe). Lyckligtvis fick vi en bra genomgång på Kolmården och närmare förståelse av kopplingen mellan kameran, skåpet och den Raspberry Pi som vår kod ska in på.

Att koppla upp till kameran var minsann klurigt ändå. Dels så behövde vi koppla upp oss via Kolmårdens VPN och därefter skicka en request för en specifik url för att komma åt videoströmmen via RTSP (Real Time Streaming Protocol) som inte var helt lätt att hitta. Tydligen så spelade det roll vilken webbläsare vi satt i och vart vi skrev vår kod, så ibland kunde vi tro att vi fastnat fast vi var på rätt väg.. tur att vi är envisa 💪

Dagen efter var vi på besök hos Axis Communications och fick mer koll på deras kameror och en del övriga tips. Hem från Linköping fick vi även med oss en Raspberry med kameramodul som vi kunde lägga in vår detektionsmodell på och testa i realtid på kontoret. I tidigare projekt där vi använt en Raspberry så har någon annan haft det ansvaret, så det var kul att vara med i trixandet den här gången och lära sig mer! 

Ytterligare nytt är att vi börjat med Dropbox for Python SDK för att skicka vidare resultat från vår Raspberry och då vi testar livestreamen från Kolmården på datorn. Sedan (puh!) för att kunna detektera djur i videoströmmen i realtid så dök jag idag in i threading-djungeln. Kortfattat så skickar vi nu iväg en viss frame för detektion, och ser om den föregående är klar. Innan denna ändring så laggade videon då vår modell behöver ca 300 millisekunder att hitta eventuella objekt, medan nu upplevs det som att videoströmmen detekteras live.

Fler inlägg om exjobbet:
Exjobb Ngulia – Vad gör vi
Exjobbsstart
Reka exjobb i djurparken
Mina drömmars exjobb. händer det??

Amanda meckar med elskåpet på Kolmården!

Exjobb Ngulia – Vad gör vi

Växlingen mellan att vara medveten om varje timme till att tappa koll på veckodag gick snabbt alltså. Vi har redan 3 av 20 veckor av exjobbet bakom oss men jag skulle också säga att vi kommit rätt långt på den tiden. Det lutar åt att vi åker till Kenya i mitten av maj, så ambitionen att ha ett fungerande system tills dess hjälper nog mycket!

Jag har inte förklarat tidigare exakt vad det är vi gör så här kommer en liten översyn på hur planen ser ut just nu. Tänken är alltså att kamerafällor utplacerade på savannen i Kenya ska kunna detektera noshörningar, ett antal andra stora djur och männniskor (potentiella tjuvjägare..). Om kameran upptäcker något intressant ska information om detta samt bilder på detta till en server. I jämförelse med att bara lagra allt som filmas på ett minneskort som kollas igenom långt senare så hoppas man kunna agera snabbt om en kritisk situation verkar vara på gång med detta system. En del i det hela är att skapa ett neuralt nätverk för objektdetektion, som upptäcker ifall en bild innehåller objekt av en viss klass och isåfall vart i bilden. Utöver det behöver vi hantera resultatet från alla enskilda bilder på ett vettigt sätt, då det inte är relevant att skicka upp hundratals bilder från samma tillfälle för att djuret syntes framför kameran i en längre stund. Vi vill alltså kunna avgöra om det är samma individ som syntes i de föregående bilderna, vilket brukar kallas object tracking (se t ex denna video). En annan utmaning är att vår objektdetektion ska köras på Raspberry Pi, och då har vi plötsligt många begränsningar angående RAM-minne och hur stor vår detektionsmodell kan vara. När vi tränar vår modell har vi däremot tillgång till TensorFlow och gott om GPU via Google Colaboratory.

I figuren med alla ikoner nedan har jag försökt att visualisera vår process och hittills kan man säga att vi har rört alla delar förutom de längst till höger. Vi har lagt en hel del tid på att samla bilder och förbehandlat+annoterat dem, för att sedan träna en modell med dessa. Denna del i arbetet är en iterativ process och vi kommer fortsätta träna om vår modell då och då när vi har mer/bättre träningsbilder och med olika inställningar. Just nu genererar den mestadels vettiga resultat men det finns helt klart utrymme för förbättring, t ex kan en människa med svart- och vitmönstrad tröja ge utslag för att vara en zebra. Vi hade ett par kämpiga dagar med dels att behöva göra om delar av förbehandlingen av bilderna samt att konvertera vår detektionsmodell till ett format som kan köra på just Raspberry Pi och andra små enheter. Men vi kämpade på och det känns som att vi tar oss framåt igen. När vi kodar i Colab så kan vi testa att ladda upp filmsnuttar eller bilder men för att kunna testa objektdetektionen i realtid (som när vi är på Kolmården) så har vi lagt in modellen i en Andorid-app. Det gick rätt smidigt att ladda ner denna kod som är open source från TensorFlow och exportera appen med vår modell från Android Studios. 

Dagens tips: testa lite machine learning i Colab här (klicka på play-ikonen till vänster i alla celler) 💻

Ett ungefärligt flöde av vårt exjobb

Här intill är en skärminspelning från mobilappen, riktad mot datorn där en video från Kolmården spelas – och ovan en gammal bild på mig som klarade testet! 

Fler inlägg om exjobbet:
Exjobbsstart
Reka exjobb i djurparken
Mina drömmars exjobb. händer det??

Exjobbsstart

Den här veckan började jag och Amanda vårt exjobb på riktigt! Fram tills i måndags har vi mest läst teori och skrivit på en planeringsrapport som ska lämnas in, men nu har vi börjat arbeta heltid. Vi gör alltså exjobbet för Projekt Ngulia men får sitta på HiQ i Norrköping då HiQ ansvarar för utvecklingen av programvara för projektet. Det känns snabbt mer seriöst och fokuserat att ha en plats att gå till och kan efterlikna vanliga arbetstider. Liksom: kaffemaskin, fredagsfrukost, vara kollega. Samtidigt tillräckligt nära campus för att kika förbi och att säga hej ibland eller slinka in på en lunchföreläsning. (Undrar om jag blir för bortskämd med närhet till allt för att kunna lämna Norrköping en dag..). Den här första veckan har vi samlat data, skrivit mer på planeringsrapporten och börjat kika på implementering. Vi har fnissat och känt oss viktiga när vi mailat med researchfolk på Microsoft, och av andra mail blivit besvikna för att inte få tillgång av en viss samling noshörningsbilder. Det känns både spännande och lite läskigt att vara beroende av andras beslut och engagemang i projektet, vi får hålla tummarna för att allt rullar på helt enkelt. Drömscenariot om att få åka ner till Kenya och sätta det hela i drift verkar kunna ske ändå (!!). I övrigt har det varit kul att vi lyckats koda ihop små program för att göra sånt som är annars är omständigt, typ som när Amanda hittade samband i excel-filer för att ladda ner bilder från nätet automatiskt. Snart hoppas vi på att kunna visa några bilder där där vår CNN-modell känner igen en noshörning.

Innan vi tränat modellen på noshörningar: ett objekt är upptäkts men klassifieras som N/A. Snart så!

Äntligen får jag rita och modellera med kod

Nu läser jag en kurs som jag alltså har längtat efter sedan årskurs ett! Då fick jag se att man kunde programmera för att dynamiskt bygga upp t ex 3D-modeller och textur istället för att göra allt för hand. Som att kunna dra i en slider för att justera antalet träd i ett landskap och att de då placeras ut i olika storlekar på positioner som ser naturligt ut. I slutet av kursen ska vi göra individuella projekt med väldigt fria tyglar, så jag klurar på idéer! Hittills har vi haft en första labb som gick ut på att skriva en procedurell shader vilket var superkul när polletten föll ner. Det som först kändes klurigt var att denna shaderfunktion bara tar emot pixelns position, men att det ändå skulle kunna bli ett sammanhängande mönster.. Här intill är några mina favoritresultat. Hörs!

Resultat av programmeringslabb med användning av Perlin noise. Varje pixel får sin färg av samma funktion!

Reka exjobb i djurparken

De där två veckorna jag hade att spendera är nu inne på slutspurten och som kort utvärdering så var det väldigt skönt. Jag skulle kanske fortfarande vilja bli bättre på att finna ro i att göra ingenting i flera dagar. Gissar på att ordet myspyssla inte är särskilt beskrivande för de flestas öron men haha låt mig beskriva denna favoritsyssla. När jag myspysslar så håller jag på med något som jag själv fått för mig att göra och det är ofta kreativt eller har med organiserande av livet att göra – och alltid med något favoritalbum spelandes i bakgrunden. De här veckorna har det blivit mycket sånt så det har varit skönt. Jag har rensat mina prylar i Västerås och ser nu fram emot att faktiskt trivas i mina gamla rum. Så ut med säkert 50 prylar och in med en ny.. det blev en bullet journal till slut! Jag som både är ett stort fan av planering och målsättning samt det pyssliga lär ju tycka att det är kul tänker jag. Annars har de här dagarna bjudit på bästistid, träning, familj, soffhäng och Halloweenfirande bland annat. Några halvdagar var jag på Gaia och kodade vidare på det projekt jag påbörjade i somras. Det vore kul om projektet kom till verklig användning sen så vi försöker knyta ihop säcken lite. Något som redan är kul är att jag nu får användning av sådant jag lärt mig där. Jag och Ronja jobbar nämligen vidare med vårt projekt Campuskost nu och inför vår nystart testar vi att använda Microsoft Azure, som kortfattat är en molnplattform för att bygga och hosta applikationer. Kan berätta mer senare men vi började idag och det var lite klurigt att få helheten att fungera. Vi får nog sova på saken och kämpa vidare helt enkelt.

Och ja! Såklart kommer här en uppdatering på vårt första Kolmårdenbesök kopplat till exjobbet. Här går det att läsa om själva testet som gjordes den dagen, så kan jag ta det lite mer kortfattat här. Det kändes superskoj att bli insläppt på djurparken och se mer av arbetet bakom kulisserna. Tekniken som användes under dagen är kopplat till projektet som jag och Amanda ska göra, så att få se redan nu hur det fungerar i praktiken var toppen. Det ser ut att snart bli ett till studiebesök, fast då på Axis som har kameror och kompetens som lär komma till användning för oss. Imorgon börjar mina sista vanliga kurser på LiU.. vad galet. Hörs!

MT – Årskurs 5 ?!

Imorgon börjar mitt sista läsår på civilingenjörsprogrammet i medieteknik. WOW. Jag har ju faktiskt inte läst några masterkurser på Linköpings universitet än så det ska bli spännande, som ännu en nystart liksom. I övrigt börjar jag bli nöjd med föreläsningar, mikrorummet i Täppan och tentapluggande. Jag ser framför mig hur hösten mestadels kommer att gå ut på att djupdyka i projektarbeten och reka exjobb. Dessutom insåg jag nyligen att jag har 6 hp extra i bagaget och kan därmed fokusera på 2 kurser i taget nu per läsperiod vilket känns väldigt skönt. Inte minst för att ta vara på tiden med vännerna här innan det ska flyttas hit och dit i landet och världen, det gör redan ont i mitt nostalgiska hjärta. 

Sen gillar ju det där som är lite läskigt men ändå genomförbart och utvecklande. Så nu är jag återigen i full gång och extraknäcker/assisterar på universitetet, delvis likt tidigare år men med några moment som blir utmanande för mig. Något som är helt nytt för mig är jobbet som klassföreståndare för en av de nya MT-klasserna. Jag skulle gärna vilja nå den punkten där man inte behöver oroa sig mer än nödvändigt gällande att prata inför folk. Att vara klassföreståndare innebär runt 10-15 timmars snack inför en klass utspritt över terminen, dvs en bra övning och med ett syfte jag kan känna ett uppriktigt engagemang till. Okej att det inte är alltför spännande att presentera information om CSN, men när det kommer till ämnen som jag tror att jag skulle kunna göra en skillnad för någon så blir det plötsligt häftigt. Jag får chansen att dela med mig av tankeställare, tips och studieteknik som jag känner är värdefulla med 5 år framför sig. De andra engagemangen gäller två programmeringskurser som jag nu får chansen att ta mer ansvar i som kursassistent. Jag tycker fortfarande det är lite svårt att dela med mig av tankar och känslor innan något är avklarat – så någon mer uppdatering lär komma senare i höst. Samma sak kanske ni känner igen från när jag hade prestationstunga moment i USA – ni fick läsa ”puhh jag klarade det” i efterhand snarare än tankarna från när jag var mitt i det och alltså inte var i mål än. Kanske att jag har fått för mig att det är svårare att tillämpa fake it ’til you make it om jag är öppen med vad jag blir nervös inför. 

Vi hörs,

Jag fixade ett år på Stanford?!

Galet.. Likt ett par andra gånger den här quartern kunde jag verkligen inte föreställa mig hur allt skulle bli klart ett par dagar innan deadlines. Speciellt nu i helgen när dagarna också fylldes med lite fest, dansshow och poolhäng. Det blir klurigt att prioritera när man vet att alla vänner kommer att splittras kort efter alla finals. I onsdags hade vi presentationer för alla tre slutprojekt, varav ett skulle presenteras två gånger. Det var en trött Sara som lämnade campus vid tiotiden men på ett sätt var det ändå skönt att beta av allt på samma dag, nervositeten hann liksom släppa rätt mycket redan efter första.

Projekten för denna quarter har varit:
– Research om hur användare uppskattar avstånd i virtual reality ( Team om två i VR-kursen )
– Designa en mobilapp som uppmuntrar användare att leva miljömedvetet, genom en gnutta gamification och AI ( Team om fyra i kursen Designing Solutions to Global Grand Challenges – Human-Centered AI)
– Implementera ett videoverktyg där någon som dansar i en video klonas baserat på sina rörelser – hehe mest för skoj skull och med denna GIF som inspiration ( individuellt projekt i kursen Computational Video Manipulation)

Dagen blev lite extra intensiv i och med att två av redovisningarna krockade ( vilket jag insåg samma morgon ) så fick springa emellan en del. Det kändes lite tråkigt att behöva lämna videokursen innan slutsnacket för det har varit en av mina favoritkurser och det var liksom sista klassrumsupplevelsen. I VR-kursen hade vi demo och poster session vilket gick bra, det var ett väldigt avslappnat event. Sedan ett trevligt men också mer seriöst avslut på dagen med middag och presentationer för jury och allmänhet i designkursen. Det är ofta under sånna tillfällen man påminns om vilket plats vi är på; när en av grupperna hade presenterat kommenterar en ut juryn att deras idé var väldigt lik det utsprungliga konceptet för Craigslist. ’Vi borde se till att koppla ihop er med Craig, han skulle tycka det var kul att höra’. En annan rolig grej var att vårt projekt vann pris för bästa HCI ( human-computer interaction ) vilket är kursens huvudämne – wiho!

Jag har egentligen kvar att skicka in rapporten och koden för videoprojektet senast måndag, men jag anser mig själv som klar redan. Liksom, har jag tid över kommer jag finslipa på arbetet för att det är ett roligt projekt men annars får det vara bra som det är. Så nu ska jag njuta av sista (?!) veckan här 😃

Här kommer ett par bilder från helgen också!