2008-07-25

Vecka 30

Under den gångna veckan har jag nästan uteslutande skrivit på rapporten. Jag har fortsatt på och nu avslutat delen om gömda Markov-modeller (HMM), närmare bestämt genom att beskriva Viterbis och Baum-Welchs algoritmer. På onsdagen skickade jag in ett utkast av rapporten och en kort statusuppdatering till min handledare inom universitetet, Fredrik Georgsson. Inför det skrev jag inledningskapitlet till hela rapporten och en grov version av problembeskrivningen. Onsdagens utkast till rapporten finns tillgänglig på följande adress (även länkad från första sidan):
http://www.cs.umu.se/~c04hjn/mt/draft.pdf

Många avsnitt är helt tomma eller kommer ändras radikalt över tiden, men kapitlet där jag dokumenterar fördjupningsstudien ("Chapter 4 --- Investigation") är till stora delar färdigt. De delar där innehåll saknas är markerade med inrutade notiser med uppskattningar på ungefär hur stor andel som är färdigskriven. Den version som finns upplagd är redan till viss del inaktuell, men jag kommer lägga upp nyare versioner varannan vecka om större förändringar har gjorts under den tiden. Efter onsdagen har jag skrivit färdigt HMM-avsnittet (igen - detaljer saknades), skrivit en generell inledning till mönsterigenkänningsavsnittet och börjat skriva om neurala nätverk. En mapp har också lagt in under revisionskontrollsystemet SVN (under sökvägen core/products/TMS/videomail/trunk/misc/exjobb/, för eventuella Teligentmänniskor som skulle vara nyfikna/dumdristiga nog för att ta en titt) så projektets kodbas (det lilla som hittils finns) går att hålla uppdaterat och säkerhetskopierat.

Vecka 31
kommer jag till att börja med i alla fall ägna åt min kod. Lite omstrukturering i mina funktioner skulle nog inte skada, och jag ska försöka skriva kod som enkelt konverterar bildrutor mellan olika färgrymder och visar resultaten på skärmen. Som jag nämnt tidigare ska jag också producera några histogram på färgfördelningen i akromatiskt ljus (brightness/luma, Y-komponenten) samt färgkanalerna (chromaticity, Cb- och Cr-komponenterna) i färgrymden YCbCr. Detta kommer förhoppningsvis leda till att det blir lättare att bedöma vilken segmenteringsapproach som är mest effektiv. Rapporten har också den många avsnitt som gärna vill få uppmärksamhet och om jag lägger tid på den under nästa vecka bör jag jobba på neurala nätverk och SVM (Support vector machines - svenska översättningen blir väl kanske "Stödvektormaskiner", men det låter lite för löjligt även för mig). Nästa vecka är nummer sex sedan jag började arbeta med exjobbet - 25% av tiden har nu passerat. Hittils känner jag mig inte så stressad, utöver att jag känner det som att jag lagt för mycket tid på rapporten i ett försök att (ironiskt nog) undvika det problem som många verkar haft med sina exjobb: de är helt färdiga, har "bara rapporten kvar".

2008-07-18

Vecka 29

Nu är vecka 4 av totalt 20 över, vilket betyder att 20% av den totala tiden har passerat och jag nu officiellt gått över från förstudie- till implementationsstadiet.

Angående implementationen har jag hittils i projektet tittat på lite olika verktyg och bibliotek för att behandla video under Linux och gjort enklare segmenteringsförsök (Euklidiskt avstånd som nu kan viktas för de olika kanalerna samt en statisk metod från en artikel [PDF]) i färgrymden YCbCr. Om jag får tag på en Wii-kontroll (som har en IR-kamera av hög kvalitet) kommer jag undersöka om jag kan använda den för att hitta hudregioner, vilket skulle eliminera alla problem med varierande belysning. Det finns inte heller någon brist på algoritmer och idéer att implementera för kamerorna som spelar in synligt ljus. Nästa sak på agendan inom det området bör nog vara att rita lite histogram för de olika kanalerna över fördelningen av pixlars värden i olika ljusförhållanden och bakgrunder, vilket borde göra det möjligt att bedöma hur realistiskt det är att kunna urskilja hudområden från det övriga i bilden. Med min nuvarande kod brukar delar av en stol ofta komma med som hudområden eftersom den är såpass nära hudfärg och ofta gör brus i bilden att enskilda pixlar råkar tolkas som hud som är ute och flyger i luften. Pre- och postprocessing av datat kommer kunna hantera många sådana problem, men man får vara försiktig för att inte göra för många antaganden om hur en "acceptabel miljö" borde se ut.

En sak jag kommer behöva så småningom är generella bildbehandlingsrutiner. Jag har under tidigare projekt använt MATLAB, vilket är väldigt behändigt eftersom i princip allt man kan behöva finns implementerat redan. Octave är ett fri mjukvaru-alternativ som fungerar väldigt likt i många situationer. Jag har tittat lite översiktligt på bildbehandlingsmöjligheterna men inte fått konvertering från godtyckliga bildformat att fungera ännu, trots ett skript som använde ImageMagick för att kompensera för att dessa funktioner saknas i Octave. Eftersom MATLAB-språket är skriptat så går det komma åt koden för bildanalysfunktionerna, så om inget annat fungerar kan jag implementera det jag behöver själv genom att studera hur de har gjort.

En annan sak som vore användbart vore att i realtid strömma video från kamerorna och försöka klassificera den, samt att kunna kalibrera parametrar för algoritmer under körning genom att läsa in tangentbordstryckningar så jag slipper kompilera om eller ange nya argument vid anropet konstant. Det skulle heller inte skada att jag undersökte FFmpeg-rutinerna för konvertering mellan olika bildformat.

Under denna veckan har jag skrivit några backup-skript som automatiskt kopierar min källkod och rapport en gång i veckan och även lagrar kopior på universitetets servrar. Jag har testat att använda ett föremål med kända färgvärden för att kompensera för förändringar i belysning utan större framgångar än så länge. "Föremålet" är en rosa Post-It som jag först filmade på nära håll för att plocka ut lappens färgvärde och sedan letar efter i träningsvideon genom att stegvis öka det tillåtna avståndet i färgrymden. Tanken är att när lappen kan identifieras så kan förändringen mellan den uppfattade färgen och de sedan tidigare kända värdena användas för att korrigera hela bilden, men förbättringen har hittils varit marginell.

Största delen av veckan använde jag dock till att skriva på ett delavsnitt i rapporten där jag beskriver HMM (gömda markov-modeller) ganska detaljerat. Eventuellt är min beskrivning mer ingående än vad som behövs, men eftersom jag aldrig implementerat algoritmerna själv så är det en bra möjlighet för mig att lära mig dom (vilket är en förutsättning för att jag ska kunna beskriva dom på ett begripligt sätt).

Nästa vecka kommer jag fortsätta att skriva på de delar av rapporten som känns mest viktiga och troligtvis skicka in vad jag hittils har producerat till min handledare inom universitetet. Han är fortfarande på semester, men om han läser mail och ser mitt utkast till rapporten kommer han bli någorlunda uppdaterad om vad jag håller på med. Det kan också hjälpa för min egen skull att veta att jag producerar text som kommer bli läst inom inte den ej avlägsna framtiden så jag inte skjuter alltför mycket framåt och håller högre kvalitet på det jag skriver.

2008-07-11

Vecka 28

Det har varit en händelserik vecka. I tisdags blev vi på kontoret informerade om att företaget ska genomgå en "företagsrekonstruktion", vilket tydligen är vad man gör som sista försök för att undvika en konkurs. Lite information finns här [di.se]. Kortfattat ska diverse förändringar inom företaget genomföras de kommande veckorna i försök att göra det lönsamt igen. Förhoppningsvis går inte företaget i konkurs och även om det skulle göra det kanske kontoret i Umeå finns kvar - åtminstone under min exjobbsperiod. Just nu finns inget alternativ annat än att fortsätta med arbetet för mig i alla fall, särskilt eftersom både min handledare inom företaget och inom universitetet har semester.

Jag använde större delen av den gångna veckan till att skriva på fördjupningsdelen på rapporten, som nu innehåller en ganska djupgående och välskriven introduktion till bildinhämtning, färgrepresentation i allmänhet samt beskrivningar av fyra olika färgmodeller. Avsnitt om bildsegmentering för att hitta hudområden och olika typer av hudmodeller är påbörjade, likaså avsnittet om relaterat arbete där jag sammanfattar metoder och resultat från ett antal artiklar. Något som fortfarande kvarstår är beskrivningen av olika klassificeringsmetoder (kNN, SVM, HMM, ANN och andra intetsägande förkortningar på tre bokstäver). Det börjar kännas som ett genomgående tema vid det här laget att jag börjar skriva på ett avsnitt, bara för att inse att jag behöver ett annat som bakgrund före det jag egentligen tänkte skriva. Förhoppningsvis skriver jag någorlunda relevanta saker som ändå borde finnas med förr eller senare, så även om strukturen på rapporten just nu säkert kan förbättras så passar min text in någonstans.

Allt detta har inte lämnat mycket tid över till experiment med mina kameror och segmentering av hudområden. Problemen med nätverkskameran från AXIS har fortsatt och jag kunde vid mitten av veckan inte spela in video från den över huvudtaget. Detta visade sig slutligen bero på trassel med mencoder (videospelaren mplayers video encoder) och efter ett byte till verktyget ffmpeg (som i sin tur inte hade fungerat för mig tidigare - kanske på grund av sämre hårdvarustöd i versionen av Linux-distributionen jag använde då) kunde jag återigen spela in video från AXIS-kameran. Jag gjorde mitt (fortfarande simpla) program för att kalibrera vilka färgvärden som hudområden har lite mer lättanvänt och plockade bort en elakartad bugg eller två (tidigare inplanterade av mig) som gjorde att jag nu faktiskt kunde rita de koordinater på skärmen jag angav.

Onsdag nästa vecka (16/7) är det datum jag satte ut på planeringen för att vara färdig med fördjupningsstudien, så jag borde verkligen ägna tid i början av veckan åt att i detalj sätta mig in i de klassificeringsmetoder som är relevanta. Eftersom jag vet att jag kommer behöva dokumentera det jag gör vid någon tidpunkt har jag resonerat som att det är lika bra att göra det så tidigt som möjligt. Denna metoden har fungerat bra så tillvida att jag får mycket skrivet i rapporten redan nu, men det går också mycket långsammare med fördjupningsstudien än vad det hade gjort om jag bara suttit och läst artiklar hela dagarna. På tal om artiklar så har jag lagt upp alla artiklar jag hittils refererar här (också länkat från första sidan). De är kanske inte alla överdrivet intressanta, men om någon av mina handledare förr eller senare vill komma åt dom så finns möjligheten nu.

2008-07-04

Vecka 27

Efter arbetets andra vecka är förstudien på god väg. När jag började strukturera upp en tidig draft av rapporten (baserad på en mall från institutionen) insåg jag att min fördjupningsstudie inte skulle innehålla särskilt mycket fördjupning i ämnets grunder så som jag hade planerat den. Efter vissa trassel med LaTeX tack vare bland annat namnen "Oğuz" och "Władysław" (lösningen är "O\u{g}uz" och "W\l{}adys\l{}aw" - ifall någon bryr sig) är inledningen till fördjupningsstudiens kapitel samt delar om färgrepresentation och hudmodeller nu delvis skrivna. Jag började skriva på svenska men bytte relativt snabbt språk till engelska (för hela rapporten) eftersom vissa koncept är svåröversatta och mallen också var på engelska. Utöver rapportskrivandet har jag också arbetat med förstudien genom att läsa fler artiklar och gå in lite djupare i de jag haft sedan tidigare. Ett störningsmoment har varit att Citeseer (som är den vanligaste länkade sidan för de artiklar jag använder) varit nere hela veckan, men de flesta artiklarna har gått att få tag på oavsett. Ett undantag är Optimal Transform in Perceptually Uniform Color Space and Its Application in Image Coding som jag inte lyckats få tag i ännu. Den enda fungerande länken jag kan hitta är Springerlink, som kräver betalning - även från universitetets maskiner där man vanligtvis kan komma åt deras artiklar gratis. Edit: Hittade artikeln.

Antalet kameror som använts vid något tillfälle i projektet är nu uppe i fyra. Utöver de tre webbkameror (två Logitech och en Canyon) har jag har också undersökt om det går att använda en nätverkskamera från AXIS. AXIS-kameran klarar av att producera video med mycket bra färgåtergivning vid 30 FPS och 640x480 upplösning, men den har några år på nacken och lider av vissa problem. Ibland kommer fördröjningar på några sekunder mitt i videoströmmen och ibland verkar den krascha helt och inget hjälper utom att koppla ur och in strömtillförseln. Den kamera som jag använder oftast är den billigare av Logitech-kamerorna, eftersom både den dyrare Logitech-kameran och den från Canyon envisas med att automatiskt justera bilden utifrån ljusnivån på bilden. Det är säkert en användbar funktion om man håller videokonferens, men när man försöker hitta föremål som borde ha en viss färg är det rent sabotage (beroende på vilken tröja jag har på mig kan mina händer variera mellan nära naturlig färg och kritvita).

Försöken att plocka ut hudområden från videorutor i YCbCr-rymden (vilket är det format som bilderna hur som helst behöver avkodas till för att spelas upp under SDL, men som även rekommenderas av densamme Mr. Oğuz Altun, et al., som den optimala färgrymden för hudsegmentering) har fortsatt även om de inte fått så hög prioritet eftersom jag officiellt inte kommit till implementeringsstadiet innan fördjupningsstudien är slutförd. Efter kalibrering i form av att mäta medelvärdet för hudområden kunde mitt testprogram oftast markera händerna korrekt på bilden, men så fort ljusförhållandena ändrades det minsta sjönk nogrannheten snabbt.

Under en diskussion på kontoret kom ett förslag som jag inte hade tagit hänsyn till alls - det faktum att det finns andra spektrum än det synliga att samla data från! Johnny Lee har fått massvis med (välförtjänt) publicitet för sina projekt som använder den infraröda (IR) kameran som Wii-kontroller har inbyggda för att spåra fingrar, producera virtuella whiteboards och producera en helt ny sort av 3D-upplevelser. Som Johnny nämner i den första videon verkar dock inte mänsklig hud lysa tillräckligt ljust i IR-spektrat för att vara synliga, men om man belyser hud med en IR-källa reflekterar dom ljuset betydligt bättre än omgivningen. Jag har tittat lite under veckan på ett C-bibliotek som heter wiiuse (samt fått det att kompilera, efter en kort kamp) och tillhandahåller möjligheten att läsa av data från en Wii-kontroll via Bluetooth.

Jag kommer troligtvis diskutera möjligheten att utnyttja IR-läsare för att hitta hudområden i fördjupningsstudien och om jag får tag på en Wii-kontroll och en IR-strålkastare (vilken troligtvis kommer bestå av ett antal IR-dioder på en liten yta) även testa hur bra det fungerar själv.

Under nästa vecka (vecka 29) ska jag arbeta med de delar av fördjupningsstudien som sammanfattar artiklar med relaterat arbete och även beskriva olika klassificeringsmetoder som kan vara lämpliga för problemet. Förhoppningsvis kan fördjupningsstudiens kapitel vara till största delen färdigt efter nästa vecka. Ifall jag får tillgång till en Wii-kontroller kommer jag givetvis börja leka med den. Om jag har tid ska jag även ta en titt på drivrutinerna för webbkamerorna för att se om det går att slå av automatiska justeringarna av ljusnivån. Förr eller senare bör jag också börja titta på att implementera (eller hitta bibliotek) för bildanalysalgoritmer för postprocessing av segmenteringsdata och lite annat, men just nu lutar det åt "senare".