• No results found

Program för att träna ny detektor

3.3 Implementation

3.3.10 Program för att träna ny detektor

Detta program används för att träna nya detektorer. Programmet startas med sökvägen till XML-filen som skall användas vid träning utav ny detektor. I XML-filen finns information om bilder och objekt som behövs för att påbörja träna en ny detektor. (Se figur i appendix A.9)

Större delen av koden till denna program kommer från Dlib biblioteket[22].

3.3.11 Androidapplikation

Applikationen används för två olika ändamål. Ett är vid okända objekt för sytstemet, då med hjälp av användaren identifiera ett nytt objekt. Ett annat för att vis de aktuella lagerstatusen.

Se figure i appendix A.10.

Applikationen har tre olika aktiviteter. Start, lagerstatus och okända bilder. På startsidan finns det två olika knappar, ”Lagerstatus” och ”Okända bilder”.

”Lagerstatus” innehåller en lista som visar den aktuella lagerstatusen.

”Okända bilder” innehåller två olika bildvisare, en där det är möjligt att placera ett justerbart rektangulär markering runt objektet på bilder. En annan där den markerade bilden visas.

När användaren är nöjd kan den välja att spara och uppmanas då att namnge objektet.

Markeringsdata som är x, y, bredd och hjöd utav det placerade rektangeln, tillsammans med det angivna namnet sparas i databasen. Se figur i appendix A.11.

3.4 Tester och validering

I samband med utvecklingen av prototypen utfördes ett antal tester för att validera dess funktionalitet.

Full funktionalitet för prototypen innebär att den uppfyller de mål som sattes för examens-arbetet. Den ska med andra ord kunna identifiera fördefinierade objekt, vid okända objekt ska den skicka en förfrågan till användaren om identifikation och kunna lära in nya objekt genom detta.

Testerna för känt och okänt objekt genomfördes på samma sätt. Detta var genom att kame-ran var placerad rätvinkligt i förhållande mot marken. En meter framför kamekame-ran ställdes viktsensorn. Kameran aktiverades och ett objekt fördes in i bildfånget från sidan och pla-cerades på viktsensorn. Systemet kan då avgöra om objektet sattes in och analyserade de bilder som tagit. Objektet togs sedan ut ur bildfånget medan kameran var aktiverad, vilket viktsensorerna tolkade som något tagit ut och de tillhörande bilderna analyserades. För för-tydligande se figur 3.5

Figur 3.5: Figur över test, sett ovanifrån.

Test för att identifiera ett fördefinierat objekt gjordes genom att träna en detektor ma-nuellt med bilder på objektet. Därefter sattes objektet in och togs ut 20 gånger för att se om systemet kunde identifiera objektet. Detta gjordes med 3 olika objekt.

3.4. TESTER OCH VALIDERING

Figur 3.6: Figur över systemets körtid med känt objekt.

Resultaten från testet visar att prototypen kan identifiera fördefinierade objekt på cirka sex sekunder.

Test för att se om prototypen kan känna av okända objekt samt skicka en förfrågan om identifikation till användaren skedde genom att sätta in och ta ut ej fördefinierade objekt 20 gånger.

Figur 3.7: Figur över systemets körtid med okänt objekt.

Resultaten visar att prototypen första tre försöken inte kunde identifiera någon objekt, för att sedan kunna identifiera objektet.

Test för inlärning av nya objekt bygger vidare på testet för okända objekt. Objekt från det tidigare testet identifierades i mobilapplikationen, därefter sattes de in och togs ut. Var objektet fortfarande okänt upprepades proceduren upp till 20 gånger eller tills det att pro-totypen kunde detektera objektet likt de fördefinierade.

Resultaten visar att prototypen kan lära sig tidigare okända objekt med hjälp av mobi-lapplikationen samt att det överlag krävs mindre än 10 repetitioner för att uppnå detta.(Se figur 3.7)

Kapitel 4

Analys och diskussion

I detta kapitel analyseras och diskuteras resultaten från föregående kapitel (se kapitel 3).

Valet av identifieringsmetoden diskuteras som arbetsverktyg i examensarbetet. Därefter ana-lyseras resultaten från testerna av bildformat, viktsensorer, programarkitekturen samt de tes-ter som användes för att validera systemet. Avslutningsvis analyseras resultaten som helhet i relation till projektets mål.

Val av identifieringsmetod

Vad det gäller valet av metod för att identifiera objekt visade litteraturstudien att det var be-gränsat med alternativ som fanns i kombination med tidsbegränsningen för arbetet. Då vissa metoder har väldigt långa träningstider var de helt enkelt inte realistiska att använda. Dlib, med HOG och MMOD var kombinationen av mjukvara och programbibliotek som valdes.

Denna kombination var potent när det gäller att nå målen för projektet, då det fanns stöd för att tackla de problem som uppstod på vägen. Det finns dock självklart vissa begränsningar med detta, som att några av programmen kan vara tunga ur en belastningssynpunkt vilket får Raspberry Pi att tidvis arbeta hårt. Detta gör att processen att identifiera objekt kan förefalla långsam, även om realtids identifikation inte var något mål. Att använda en star-kare huvudenhet för beräkningarna skulle förbättra den aspekten, och tiden att identifiera minskar.

En fördel med att använda MMOD vid inlärning av nya objekt är att kräver ett relativt litet antal bilder (i storleksordningen tiotal) för att detekteringen skall fungera. Används Haar-kaskader bör det som tidigare nämnt (se kap 3.2.1) används ett antal bilder i storlek-sorningen tusental för att skapa en pålitlig detektor. Att använda MMOD resulterar då i att det bli mindre arbete för användaren med att manuellt detektera bilder då nya objekt kommer läras in med ett mindre antal bilder, systemet blir mer snabbtlärt.

Analys av bildformat

Vid testerna av bildformat visade resultaten att det bara är en marginell skillnad mellan de olika formaten. Vad det gäller storlek var skillnaden som mest en procent mellan de olika bildformaten. Det faktum att skillnaden är såpass liten kommer inte påverka i någon nämnvärd grad hur mycket lagringsutrymme som upptas. Då skillnaderna per bild är enbart på några kB, vilket med dagens teknik är försumbart. Men detta kan vara av intresse om systemet skulle användas i större skala och antalet bilder skulle öka stort. Då kan det finnas skäl för att välja PNG som bildformat då det är det minsta enligt testerna.

I testet för behandlingstid vid identifikation med de olika formaten ligger resultaten oerhört nära, för användaren är dessa skillnader ej märkbara. Detta får ses som försumbart i det här fallet, och bör inte påverka systemet överlag. Utifrån dessa två tester går det att konstatera vilket filformat som används inte kommer att påverka resultaten nämnvärt när det gäller

den här storleksgraden av projekt. Skulle systemet byggas ut och ha många fler produkter att identifiera är det dock något som kan tas i åtanke.

Vid användning av en annan kamera kan även andra filformat användas, om det finns stöd i Dlib för detta. Vilket skulle vara ett annat alternativ där det kan gå att antingen minska på det lagringsutrymme som krävs eller att förbättra behandlingstiden.

Analys av viktsensorer

Valet av viktsensor vart mycket lätt, då lastceller var mycket exakta och mätvärdena från den tryckkänsliga resistorn var mycket varierande och svåra att dra slutsatser från. De väldigt varierande resultaten i detta fall verkade bero på hur objekt placerades på sensorn. En tryckkänslig resistor är inte exakt nog att använda som våg, men för att känna av tryck.

I detta examensarbete hade osäkerheten med en tryckänslig resistor skapat problem med funktionen med att avgöra om objekt sätts in eller tas ut.

Analys av programarkitektur

Delar utav systemet som körs på klientsidan, Raspberry Pi, kan förflyttas till serversida. Trä-ningen av ny detektor är ett exempel. Genom att ha en centraliserad samling av detektorer kan inlärningen för okända objekt gå snabbare samt bidra med bättre finslipade detektorer på längre sikt. Samtidigt igenom att förflytta delar till serversidan frigörs processorkraft på klientsidan.

C++ koden för detekterings programmet kan förmodligen optimeras, som till exempel smar-tare trådanvändning, bildinladdning och filnavigering.

Några utav Python-skripten kan också byggas ihop tillsammans med C++ kod, diverse nät-verkshantering till exempel.

Analys av tester för validering

De tester som gjordes för att validera systemets funktioner gav tydliga resultat som visade att de funktioner som fanns i projektets mål uppfylls av prototypen. Testerna hade kunnat utföras med ett större antal repetitioner samt med fler objekt för att ge större säkerhet. Detta skulle ge statistiskt säkrare tester men resultaten var mycket enhetliga och upprepade, fler tester bedömdes inte som nödvändiga.

Analys av projektets mål

Målet att skapa en prototyp för objektidentifiering och automatiserad lagerstatus är upp-fyllt. Det är dock inte en produkt som fungerar i realtid, utan med en viss fördröjning innan lagerstatusen uppdateras. Likt nämnt tidigare är detta något som skulle kunna förbättras med mer beräkningskraft och ett sådant mål kanske skulle vara möjligt att nå.

Existerande tekniker undersöktes för objektdetektering, det fanns olika alternativ, med vari-erande för- och nackdelar. Ingen egen teknik för att identifiera objekt i en bild behövdes tas fram, utan det fanns stöd för detta i olika bibliotek. Att ta fram en egen teknik för identifie-ring hade inte varit realistiskt inom ramarna för projektet. De bibliotek som användes, med de exempelprogram som fanns, används i projektet för att bygga en grund. Denna grund modifierades sedan för att de programmen skulle passa in i projektet. Runt dessa program skrevs ett antal skript och program för att stödja dessa och bygga upp den funktionalitet som önskades i projektet.

Prototypen har fullt stöd för att kunna identifiera olika fördefinierade objekt, helt enligt målen, om den är tränad för dessa objekt i förväg. Vid de tillfällen då ett objekt inte är identifierbart kommer en eller flera bilder att skickas till användaren för identifiering. När användaren har gjort detta uppdateras de filer som används för att generera en ny detektor.

Vilket gör att prototypen kan lära sig identifiera nya objekt, eller nya vinklar på de objekt den redan lärt sig. Detta ligger i linje med de mål som sattes upp i början av projektet.

Prototypen har vissa begränsningar då den enbart kan hantera ett objekt i taget, och vid flera kommer det att uppstå fel. Detta var dock något som behandlades i avgränsingen av examensarbetet, prototypen inte ska inte ha stöd för detta. Att hålla reda på vilka kvan-titeter som finns av de olika objekten är även det en funktionalitet som prototypen har.

När ett objekt är identifierat kommer det att skickas en uppdatering till en databas, som Androidapplikationen kan läsa av, vilket gör det möjligt för användaren att få en automatisk lageruppdatering.

Hållbar utveckling

Examensarbetet är tänkt att bidra till hållbarutveckling genom att minska på svinn när det kommer till matprodukter i hemmet. Den fungerade prototypen skulle kunna bidra till detta.

Genom att kunna se kylskåpets innehåll via en mobilapplikation kan antalet onödiga köp av produkter som finns hemma minska. Applikationen ger en lista över de produkter som finns, vilket ger en enklare översikt som kan bidra till att de produkter som annars skulle bli bortglömda kan konsumeras innan de bli oätliga.

Det som miljömässigt och ekonomiskt kan sparas genom detta minskade svinn måste avvägas mot den miljömässiga och ekonomiska kostanden att bygga in denna funktionalitet i ett kylskåp. Vad dessa kostnader är skulle behövas undersökas i en separat studie med dessa aspekter i fokus, men detta arbete skulle definitivt kunna bidra till arbete för att skapa ett hållbarare samhälle.

Kapitel 5

Slutsats

Examensarbetet har undersökt möjligheterna samt försökt ta fram en prototyp för auto-matiskt objektidentifikation och lagerstatus. Detta har varit möjligt att göra genom att kombinera ett antal olika metoder som tillsammans skapar en prototyp vilken uppfyller de mål som sattes för examensarbetet. Systemet kan identifiera objekt som det har blivit tränat på sen tidigare samt detektera om det finns något objekt som det inte har blivit tränat på.

Är det ett okänt objekt ber systemet användaren identifiera objektet och det kan genom detta lära sig detektera nya objekt.

Att systemet kan lära sig nya objekt med hjälp av användaren gör att det inte är begränsat till ett antal förtränade produkter med ett specifikt utseende, utan att det enkelt går att utvidga med fler produkter. Det gör även att systemet blir bättre varje gång det inte kan detektera en produkt.

Ett objekt där prototypen har fått tillräcklig träning kommer den att kunna identifiera detta även i de fall då de är delvis täckta eller vridna. Systemet framstår som robust överlag om enbart ett objekt i taget visas upp.

Då systemet fungerar lika väl med olika bildformat skulle det gå vara lätt att ändra till ett använda ett specifikt format om det skulle finnas några fördelar med det, eller att byta till en kamera som enbart kan använda ett specifikt format.

Det finns ett antal förbättringar som skulle kunna ske med prototypen för att göra den smidigare att använda och framförallt snabbare. Många av programmen är utvecklade i en Linux-miljö, mycket lik den som körs på Raspberry Pi, men på kraftfullare datorer. De pro-gram som var något tyngre att driva, som objektidentifieringen och generering en ny detektor gick signifikant snabbare att köra på den kraftfullare datorn. Ett förslag för framtiden är att använda en kraftfullare processor.

I det här examensarbetet har en våg används för att detektera om ett objekt tas in eller ut, men denna extra elektronik skulle kunna ersättas. Det är möjligt att spåra ett objekts rörelse via video, och på detta sätt avgöra i vilken riktning det färdas. Tiden för att utveckla detta fanns inte samt att den extra belastningen på Raspberry Pi skulle förmodligen påverka övriga funktioner negativt. Detta skulle kunna lösas på samma sätt som tidigare, med mer beräkningskraft eller med optimering av mjukvaran.

Litteraturförteckning

[1] River J, van der Meulen R. Gartner Says the Internet of Things Installed Base Will Grow to 26 Billion Units By 2020 [Internet], Stamford, Gartner, 2013, [Citerad 2015-09-03], Hämtad från: http://www.gartner.com/newsroom/id/2636073

[2] Domingo Mery, Vladimir Riffo Automated Object Recognition in Baggage Screening using Multiple X-ray Views, Santiago, Chile, 2013, [Hämtad 2015-08-21], Hämtad från:

http://web.ing.puc.cl/ dmery/Prints/Conferences/International/2013-NDT-Telford.pdf [3] Cyganek, Boguslaw Object Detection and Recognition in Digital Images : Theory and

Practice, West Sussex: John Wiley & Sons, 2013.

[4] Navneet Dalal, Bill Triggs Histograms of Oriented Gradients for Human De-tection, Montbonnot, Frankrike, 2005, [Hämtad 2015-08-26], Hämtad från:

http://lear.inrialpes.fr/people/triggs/pubs/Dalal-cvpr05.pdf

[5] David G. Lowe Object Recognition from Local Scale-Invariant Features, Vanco-ver, Canada, 1999, [Hämtad 2015-09-07], Hämtad från: http://www.cs.ubc.ca/ lo-we/papers/iccv99.pdf

[6] Open CV Image pyramid, [Internet], 2014, [Hämtad 2015-09-07], Hämtad från:

http://docs.opencv.org/2.4.10/_images/Pyramids_Tutorial_Pyramid_Theory.png [7] Aleksandra A. Sima, Simon J. Buckley Optimizing SIFT for Matching of Short Wave

Infrared and Visible Wavelength Images, [Internet], 2013, [Hämtad 2015-09-10], Hämtad från: http://www.mdpi.com/2072-4292/5/5/2037/htm

[8] Jacob Toft Pedersen SURF: Feature detection & description, Århus, Danmark, 2011, [Hämtad 2015-09-10], Hämtad från: http://cs.au.dk/ jtp/SURF/report.pdf

[9] Herbert Bay, Tinne Tuytelaars, Luc Van Gool SURF: Speeded Up Ro-bust Features, Zurich, Schweiz, 2006, [Hämtad 2015-08-27], Hämtad från:

http://www.vision.ee.ethz.ch/ surf/eccv06.pdf

[10] Scott Smith Speeded-Up Robust Features, Utah, USA, 2011, [Hämtad 2015-10-05], Häm-tad från: http://www.sci.utah.edu/ fletcher/CS7960/slides/Scott.pdf

[11] Matthew B. Blaschko, Christoph H. Lampert Learning to Localize Objects with Structu-red Output Regression, Tübingen, Tyskland, 2008, [Hämtad 2015-09-03], Hämtad från :http://www.kyb.mpg.de/fileadmin/user_upload/files/publications/attachments/ECCV2008-Blaschko_5247%5b0%5d.pdf

[12] Davis E. King Max-Margin Object Detection, 2015, [Hämtad 2015-09-03], Hämtad från:

http://arxiv.org/pdf/1502.00046v1.pdf

[13] Naotoshi Seo Tutorial: OpenCV haartraining (Rapid Object Detection With A Cascade of Boosted Classifiers Based on Haar-like Features), 2008, [Hämtad 2015-09-26], Hämtad från: http://www.sci.utah.edu/ fletcher/CS7960/slides/Scott.pdf

[14] itseez Open CV, 2015, [Hämtad 2015-09-07], Hämtad från:

http://opencv.org/about.html

[15] Dlib Dlib Introduction, 2015, [Hämtad 2015-08-26], Hämtad från:

http://dlib.net/intro.html

[16] MathWorks About MathWorks, 2015, [Hämtad 2015-09-07], Hämtad från:

http://se.mathworks.com/company/?s_tid=hp_ff_about

[17] VPG TRANSDUCERS Load Cell Technology, 2015, [Hämtad 2015-10-01], Hämtad från:

http://www.vishaypg.com/docs/11866/vpg-01.pdf

[18] Arduino Arduino About, 2015, [Hämtad 2015-09-08], Hämtad från:

https://www.arduino.cc/en/Main/arduinoBoardUno

[19] Raspberry Pi Raspberry Pi 2 Model B, 2015, [Hämtad 2015-09-08], Hämtad från:

https://www.raspberrypi.org/products/raspberry-pi-2-model-b/

[20] AVIA Semiconductor 24-Bit Analog-to-Digital Converter (ADC) for Weigh Scales, 2015, [Hämtad 2015-10-01], Hämtad från:

https://cdn.sparkfun.com/datasheets/Sensors/ForceFlex/hx711_english.pdf

[21] Parse Parse Documentation, 2015, [Hämtad 2015-09-08], Hämtad från:

https://www.parse.com/docs

[22] Dlib Dlib Train Object Detector C++, 2015, [Hämtad 2015-08-26], Hämtad från:

http://dlib.net/train_object_detector.cpp.html

[23] MathWorks MathWorks System Requirements, 2015, [Hämtad 2015-08-26], Hämtad från:

http://se.mathworks.com/support/sysreq/current_release/index.html?sec=linux

[24] Raspberry Pi Foundation Raspberry Pi Camera, 2015, [Hämtad 2015-09-09], Hämtad från: https://www.raspberrypi.org/documentation/hardware/camera.md

[25] Dlib Image Processing, 2015, [Hämtad 2015-09-09], Hämtad från:

http://dlib.net/imaging.html

[26] STMicroelectronics STM32F4DISCOVERY, 2015, [Hämtad 2015-09-08], Hämtad från:

http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252419

Bilaga A

Appendix

Related documents