• No results found

Smart Kitchen: Automatisk inventering av föremål

N/A
N/A
Protected

Academic year: 2022

Share "Smart Kitchen: Automatisk inventering av föremål"

Copied!
52
0
0

Loading.... (view fulltext now)

Full text

(1)

Smart kitchen

Automatisk inventering av föremål Automated inventory of items

Fredrik Edlund Saqib Sarker

Examensarbete inom Elektroteknik,

Grundnivå, 15 hp

Handledare på KTH: Jonas Wåhslén Examinator: Thomas Lindh

TRITA-STH 2016:2 KTH

Skolan för Teknik och Hälsa

136 40 Handen, Sverige

(2)
(3)

Sammanfattning

Internet of Things växer fort och förutspås bli en del av vardagen.

Detta öppnar möjligheter för att skapa produkter som förenklar var- dagslivet. Automatisk objektsidentifiering kombinerad med en au- tomatiserad lagerstatus kan underlätta inventering, något som kan användas till exempel i smarta kylskåp för att göra vardagen enklare genom Internet of Things.

Detta examensarbete studerar metoder inom objektsidentifikation för att ta fram ett system som automatiskt kan identifiera objekt och hantera lagerstatus.

En prototyp framställdes och testades för att se vilka möjligheter som finns. Systemet använder en Raspberry Pi som basenhet, vilken använder Dlib-bibliotek för att identifiera objekt som har blivit för- definierade. Vid okända objekt identifierar användaren objekt i en mobilapplikation, systemet kan genom detta lära sig identifiera nya objekt. Samma applikation används för att se lagerstatusen på de olika objekt som har registrerats av systemet.

Prototypen klarar av att identifiera kända objekt samt att lära sig nya, enligt projektets mål.

Nyckelord: Objektidentifiering, lagerstatus, Internet of Things,

mikrokontroller, datorseende

(4)
(5)

Abstract

Internet of Things is growing fast and is predicted to become a part of everyday life. This can be used to create products which will make everyday life easier. Automated object detection combined with an automated inventory check can make it easier to manage what is in stock, this is something that can be used in smart refrigerators as an example, to make life more convenient through Internet of Things.

This Bachelor thesis studies methods regarding object detection with the purpose to build a system which automatically identifies object and manages the inventory status.

A prototype was built and tested to see what the possibilities there is with such a system. The Prototype uses a Raspberry Pi as core unit, which uses Dlib libraries to identify predefined objects. The user will identify unknown objects via the mobile phone application, which makes it possible for the system to learn how to identify new objects. The same application is used to check the inventory status for the different objects that has been identified by the system.

The prototype can identify objects and learn to identify new ones, according to the goals of the project.

Keywords: Object identification, inventory status, Internet of

Things, micro controller, computer vision.

(6)
(7)

Förord

Detta är ett examensarbete för högskoleingenjörsprogrammet i Elektroteknik vid Kungliga Tekniska Högskolan.

Vi vill tacka Cybercom Group som har bistått med möjligheten att göra detta examensar-

bete, för deras handledning och bidrag med resurser. Ett särskilt tack går till vår handledare

på Cybercom, Karl Lunden, för goda råd och givande diskussioner. Vi vill även tacka vår

handledare på KTH, Jonas Wåhslén.

(8)
(9)

Innehåll

Förord . . . .

1 Inledning 1

1.1 Problemformulering . . . . 1

1.2 Målsättning . . . . 1

1.3 Avgränsningar . . . . 1

1.4 Kapitelgenomgång . . . . 2

1.5 Författarnas bidrag till examensarbetet . . . . 2

2 Teori och bakgrund 3 2.1 Metoder för objektsidentifiering genom datorseende . . . . 3

2.1.1 Histogram of Oriented Gradients (HOG) . . . . 4

2.1.2 Scale-Invariant Feature Transform (SIFT) . . . . 6

2.1.3 Speeded Up Robust Features (SURF) . . . . 8

2.2 Tekniker för inlärning av objekt . . . . 10

2.2.1 Max-Margin Object Detection (MMOD) . . . . 10

2.2.2 Haar-kaskad . . . . 10

2.3 Mjukvara . . . . 10

2.3.1 OpenCV . . . . 10

2.3.2 Dlib . . . . 10

2.3.3 Matlab . . . . 10

2.4 Sensorer för detektering av viktskillnader . . . . 11

3 Metoder och resultat 13 3.1 Övergripande genomgång av arbetsmetodik . . . . 13

3.2 Vald teknik för objektsidentifikation och hårdvara . . . . 13

3.2.1 Bibliotek och programmeringsspråk för detektering . . . . 13

3.2.2 Bildformat . . . . 14

3.2.3 Hårdvara . . . . 14

3.2.4 Mobilapplikation . . . . 16

3.2.5 Back-end . . . . 16

3.3 Implementation . . . . 16

3.3.1 Systemöversikt . . . . 17

3.3.2 Huvud- och kameraskript i Python . . . . 18

3.3.3 Skript för detektering av viktförändringar . . . . 18

3.3.4 Program för Arduino . . . . 18

3.3.5 Skript för start av identifiering . . . . 19

3.3.6 Program för objektidentifikation . . . . 19

3.3.7 Skript för lagerstatus uppdatering . . . . 19

3.3.8 Skript för att hantera okända objekt . . . . 19

3.3.9 Skript för ny detektor . . . . 19

3.3.10 Program för att träna ny detektor . . . . 19

(10)

4 Analys och diskussion 23

5 Slutsats 27

Litteraturförteckning 29

Bilagor 30

A Appendix 31

A.1 Flödesschema över bildtagning via Raspberry Pi. . . . 32

A.2 Flödesschema över programmet för viktdetektering. . . . 33

A.3 Flödesschema över Arduino programmet. . . . . 34

A.4 Flödesschema över skriptet för att starta identifieringen. . . . 35

A.5 Flödesschema över programmet för objektidentifiering. . . . 36

A.6 Flödesschema över Python-skriptet som uppdaterar lagerstatus. . . . 37

A.7 Flödesschema över skriptet för hantering av okända objekt. . . . 38

A.8 Flödesschema över Python-skriptet för att skapa nya detektorer. . . . 39

A.9 Flödesschema över programmet för att träna nya detektorer. . . . . 40

A.10 Flödesschema över Androidapplikationen. . . . 41

A.11 Bild på de tre olika aktiviteterna i Androidapplikationen. . . . 42

(11)

Kapitel 1

Inledning

1.1 Problemformulering

I dagens samhälle växer användandet av Internet of Things i form av olika smarta produkter eller funktioner [1]. Datorseende är en sådan smart funktion med många olika användnings- områden, exempelvis inom industrin eller i robotar i form av datorseende [2]. Att använda denna teknik på ett sätt som kan underlätta vardagen är något som ligger i linje med vad In- ternet of Things innebär. Automatisk objektsidentifikation är en av de funktioner som finns inom datorseende, där objekt kan identifieras i bilder från en kamera med programvara. Den- na teknik kopplat till en lagerstatus som uppdateras automatiskt skapar en smart produkt.

Ett exempel på sådan produkt skulle vara ett smart kylskåp, som kan förenkla vardagen genom att låta användaren kontrollera innehållet i kylskåpet på distans via lagerstatusen.

Detta är även något som kan bidra till en mer hållbar utveckling då det blir lättare att veta vad som finns i kylskåpet. Det blir i och med detta lättare att ha kontroll på vad som behövs ätas upp och svinn bland mat i hemmet kan minska. Detta får även en positiv ekonomisk effekt då slöseriet minskar.

1.2 Målsättning

Målet med examensarbetet är att utveckla en prototyp för objektsidentifiering och automati- serad lagerstatus. Sedan tidigare existerande metoder för objektsidentifiering skall analyseras och jämföras för att ta fram den bäst lämpade metoden. Den färdiga prototypen skall kunna identifiera vissa fördefinierade objekt. Samt att vid objekt som prototypen inte kan identifi- era skall den fråga användaren via en mobil applikation. Via applikationen kan användaren identifiera okända objekt, vilket ger systemet möjlighet att lära sig identifiera tidigare okän- da objekt. Prototypen skall även kunna hålla reda på vilka kvantiteter den har identifierat, samt om produkten tas ut eller sätts in och genom detta kunna tillhandahålla en lagerstatus.

1.3 Avgränsningar

Prototypen skall enbart kunna identifiera fördefinierade objekt, men kunna lära sig med hjälp

av användaren att identifiera okända objekt. Då ett okänt objekt upptäcks skall den skicka

en bild till applikationen där användaren får identifiera objektet. Det kommer enbart att gå

att identifiera ett objekt åt gången, samt att lagerstatus kommer enbart att uppdateras vid

in- och utplock av ett objekt i taget. Lagerstatus och objektsidentifiering kommer inte att

ske i realtid. Projektet avgränsas med att det är ett begränsat antal produkter som går att

identifiera från när projektet är klart, men prototypen skall ha möjlighet att lära sig nya efter

(12)

repeterade identifikationer från användaren. Projektet motsvarar 15 högskolepoäng, vilket innebär 10 veckors heltidsstudier för två studenter.

1.4 Kapitelgenomgång

Teori och bakgrund innehåller teknisk information som har framtagits genom litteraturstu- dien. Denna bakgrund är viktig för att förstå de tekniska detaljerna i examensarbetet.

Metoder och resultat går igenom de metoder som används i examensarbetet, hur funktio- naliteten för prototypen ska fastställas samt projektets resultat vid de olika testen som har genomförts under arbetet.

Analys och diskussion är en analys av resultaten från föregående kapitel och dessa diskuteras och sätts i perspektiv till projektets mål.

Slutsatsen går igenom examensarbetes helhet, och vilka rekommendationer som kan ges i efterhand samt vilka framtidsförutsättningar som finns.

1.5 Författarnas bidrag till examensarbetet

Författarna har använt exempelkod som grund till objektsidentifieringen, men denna har anpassats för att passa projektets mål.

Fredrik Edlund har arbetat främst med den hårdvarunära koden och rapporten.

Saqib Sarker har arbetat främst med objektsidentifikationen samt mobilapplikationen.

(13)

Kapitel 2

Teori och bakgrund

Inom datorseende har en mängd med olika algoritmer utvecklas vilka har olika för- och nack- delar samt olika metoder för inlärning av de objekt som skall identifieras.

Detta kapitel går igenom några av de olika mjukvaror och bibliotek som kan användas för objektsigenkänning, olika metoder för detta samt hårdvara som används för att det skall vara möjligt att ta fram prototypen.

Kapitlet behandlar några algoritmer som används av mjukvarubibliotek för objektsidentifika- tion, och beskriver närmare hur dessa algoritmer arbetar. Detta för att ge en bättre förståelse för objektsidentifikation och vilket bibliotek som är lämpligt att använda i examensarbetet.

Även tekniker som används av algoritmerna för inlärning av olika objekt behandlas då dessa varierar, samt har olika egenskaper. Dessa kommer att påverka valet av algoritm då tid för inlärning och bildantal spelar in.

Kapitlet har en genomgång av olika bibliotek och mjukvaror som används vid objektsi- dentifikation, då dessa spelar en viktig roll i examensarbetet. En Android-applikation har framtagits för prototypen och denna har behov av en back-end, vilket tas upp i samband med mjukvaran.

För att avgöra om ett objekt sätts in eller tas ut används trycksensorer för att känna av vikt. Ökar vikten har ett objekt satts in, minskar vikten har ett objekt tagits ut. Kapitlet behandlar de olika alternativ som finns för dessa sensorer, då det finns olika förutsättningar beroende på vilken sensor som väljs.

2.1 Metoder för objektsidentifiering genom datorseende

Datorseende är ett område som har vuxit fram för att datorer skall kunna hantera infor- mation från bilder. För människan är detta trivialt, men det är inte fallet för datorer. Den mänskliga synen är komplicerad och har mängder av funktioner som stöd, vilka härstammar från hjärnans bildbehandling. Avståndsbedömning, att särskilja olika objekt från varandra, att identifiera objekt och följa ett objekts rörelse är några exempel på funktioner som den mänskliga hjärnan hjälper till med[3]. Datorseende bygger på att genom bildbehandling göra det möjligt för datorer att analysera bilder och extrahera information från dessa. Det finns en mängd olika användningsområden för datorer som kan se, exempelvis följa efter relevanta objekt, automatiskt finna ansikten i bilder eller realtidsfilm.

I examensarbetet används datorseende för att identifiera objekt, det finns olika metoder med

varierande tekniker för att detektering. Inom datorseende är ett objekts egenskaper viktiga

för att möjliggöra identifikation. Vad en egenskap definieras som beror på vilken algoritm

som används. Ett objekts egenskaper sparas i form av en beskrivning. Denna beskrivning

generas från en eller flera träningsbilder. Detta används sedan för att särskilja objektet från

andra objekt eller bakgrunden i en bild. Dessa egenskaper måste vara konsekventa även vid

förändringar av bildförhållandet, annars är identifikation ej möjligt. Om datorseende kopplas

(14)

till en funktion som kan ta vara på lagerstatusen för de olika objekten skapas ett verktyg som automatiserar lagerstatusen. Med datorseende möjliggörs en automatiserings av inven- tarieförteckningen.

Nedan följer en sammanfattning av olika tekniker för att detektera objekt i bilder.

2.1.1 Histogram of Oriented Gradients (HOG)

Använder det faktum att ett objekts former och utseende kan beskrivas genom riktningen på objektets kanter, hur intensiva dess gradienter är och hur dessa är fördelade. (Gradient i samband med bildbehandling är hur stark färgförändringen i en bild är, i detta fall undersöks förändringen mellan pixlar). I HOG samlas ett bestämt antal pixlar i en cell, och ett antal celler samlas till ett block, se figur 2.1. Första steget i HOG är att konvertera bilden till

Figur 2.1: Bild över hur pixlar, celler och block hänger samman.

gråskala för att underlätta analysen, därefter beräknas gradienterna till alla pixlar. För att beräkna gradienten används en dimensionell maskning av derivatan, i horisontell eller vertikal ledd (kan även göras i bägge riktningarna), för filter se ekvation 2.1. [4]

D x = h −1 0 1 i och D y =

−1 0 1

 (2.1)

Enligt forskning på området [4] har tester med mer komplicerade masker gett sämre resultat vid detektering. Nästa steg är att samla ett antal pixlar till en cell, och göra ett histogram över gradientens riktning för varje pixel. Det finns ett begränsat antal riktningar och gradienten tillhör den riktning des komponenter har störst bidrag till. Se figur 2.2 för ett exempel på detta.[4] Antalet riktningar som används i histogrammet kan variera. Hur stort bidrag varje cell ger till histogrammet är baserad på gradientens magnitud (eller en funktion av denna, men tidigare forskning visar att enbart magnituden fungerar generellt sätt bra).

Celler i exempelbilden (se figur 2.1) är rektangulära, men det kan även vara radiella, över 180 eller 360 grader, se figur 2.3.

Cellerna organiseras i block, dessa block finns i två huvudsakliga geometriska former, rektangulära (R-HOG) och cirkulära (C-HOG).

R-HOG använder tre parametrar: antal celler per block, antal pixlar per cell och antal kana- ler per histogram. Forskning [4] har visat att denna metod kan få bättre resultat genom att använda Gaussfilter på varje block innan sammanställningen av histogrammet. (Gaussfilter är ett filter som filtrerar bort värden i ytterligheterna till förmån för värden som ligger mera centralt, för noggrannare läsning se [3]).

C-HOG finns i två typer, med en central cell eller med den centrala cellen radiellt fördelat

mellan olika celler, se figur 2.4. C-HOG använder fyra olika parametrar: antal radiella sek-

(15)

2.1. METODER FÖR OBJEKTSIDENTIFIERING GENOM DATORSEENDE

Figur 2.2: Bild över hur histogram, med data från en cell.

Figur 2.3: De två radiella versionerna av celler, den över 360 grader till vänster och den över 180 grader till höger.

Figur 2.4: De två varianterna av CHOG, den med en central cell till vänster och den till

höger har en radialt fördelad central cell.

(16)

torer, antal vinklar, radien för den centrala sektorn samt den radiella expansionsfaktorn till nästa radiella del. Forskning [4] har visat att i detta fall kommer användning av filter inte förbättra resultatet till skillnad mot R-HOG.

Vidare har Dalal och Triggs [4] konstaterat att en normalisering över varje block förbätt- rar resultaten för detektorn kraftigt, då känsligheten för förändringar i ljusförhållande och kontrast minskar. Olika typer av normalisering kan användas. Följande normaliseringar ex- isterar: v är en icke normaliserad vektor vilken innehåller histogrammets data, och e är en liten konstant.

L2-norm:f = v q ||v|| 2 2 + e 2

(2.2)

L1-norm:f = v

||v|| 1 + e (2.3)

L1-sqrt:f =

s v

||v|| 1 + e (2.4)

Det finns ytterligare en normalisering L2-hys: där maxvärdet på v begränsas till 0.2 och normalisering sker enligt ekvation 2.2. Tidigare forskning [4] visar att L1 ger något försämrade resultat, men att de övriga ger ungefär samma förbättring. HOG-beskrivaren är en sammansatt vektor av värdena från histogrammen skapade av de olika blocken. Vissa av blocken kan överlappa, vilket resulterar i att det kan finnas celler som bidrar mer än en gång till slutvektorn, men effekten av detta minskas av Gaussfiltrena. Slutvecktorn är det som används för att beskriva ett objekt.

2.1.2 Scale-Invariant Feature Transform (SIFT)

Är en algoritm vilken transformerar en bild till en stor samling av vektorer som innehåller egenskaper till lokala nyckelpunkter i en bild. (Nyckelpunkter är de punkter som används för att gemensamt beskriva en bild). Dessa vektorer skapas på ett sådant sätt att algoritmen inte är känslig för skala, rotation, bildöversättningar samt delvis inte känslig för ljusförändringar.

Algoritmen arbetar genom att först skapa en Gaussiskbildpyramid, vilken består av olika lager där i varje lager har bilden skalats ner och filtreras med ett Gaussfilter (se figur 2.5.

Storleken på förminskningen i skala och hur många gånger bilden skall skalas ner går att variera.[5]

Figur 2.5: Gausspyramid [6].

(17)

2.1. METODER FÖR OBJEKTSIDENTIFIERING GENOM DATORSEENDE

Varje nivå i pyramiden kan innehålla flera bilder, vilka har blivit filtrerade olika antal gånger. Dessa bilder som tillhör samma nivå kallas för en oktav tillsammans. Oktaverna används senare för att göra algoritmen oberoende av skala. Inom varje oktav subtraheras bilderna från varandra, vilket ger skillnader i normalfördelning, detta för att ta fram kon- turer tydligare. Se figur 2.6 Antalet oktaver kan varieras, enligt Lowes [5] tidigare forskning

Figur 2.6: Skillnader i normalfördelning [7].

rekommenderas fyra oktaver och fem filtreringsnivåer i pyramiden. Därefter skall det letas efter extrempunkter i lagren för skillnader i normalfördelning, först inom skalan, sedan inom de kringliggande lagren. Se figur 2.7. Maximum- eller minimumpunkten är den pixel med

Figur 2.7: Extrempunktsletning [8].

högst eller minst värde bland de åtta närliggande pixlarna, detta blir en kandidat för en nyckelpunkt. Kandidaten jämförs sedan med de nio pixlar som ligger i lagret ovanför och de nio i lagret under, se figur 2.7. För det första och sista lagret i varje oktav finns det inte tillräckligt med pixlar då det inte går att jämföra med lagret ovan eller under, dessa lager används inte vid sökning efter extrempunkter.

Var dessa extrempunkter är lokaliserade i bilden är nästa steg, detta görs genom en Taylor- utveckling av bildens skalrum. Detta kan användas för att hitta punkternas placering och bestämma dess kontrast. Punkter med för låg kontrast anses inte vara goda nyckelpunkter då de är känsliga för brus, likaså anses punkter nära kanter vara dåliga nyckelpunkter.

Skalrum är ett ramverk för representation av bilder på multipla skalor som används inom datorseende. Pyramiderna som används i SIFT är en typ av skalrum.

Algoritmen söker sedan hörn genom att beräkna gradienterna i två riktningar i bilden. Är

(18)

bägge gradienterna stora kring en nyckelpunkt är det ett hörn, är endast en gradient stor är det en kant och är ingen gradient stor är det en platt yta. Nyckelpunkter vilka ligger placera- de vid hörn är de som är intressanta då de är distinkta vid identifikation. Varje nyckelpunkts orientering beräknas utifrån dess gradienter och dessa värden används i ett histogram på samma sätt som gradienter i celler hanteras i HOG-algoritmen. Histogrammet har 36 kana- ler i detta fall.

Utifrån denna data generas en beskrivning för bilden genom att sätta upp ett rutnät på 16*16 pixlar kring en nyckelpunkt. Dessa sätts samman till grupper om 4*4 pixlar, vilka används för att genera histogram på åtta kanaler för gradienternas riktning och magnitud liknande de histogram som används i HOG (se figur 2.1). Över hela området appliceras ett Gaussfilter för att nyckelpunkten skall bli mindre känslig för små förändringar i positionen på fönstret för pixlarna. Resultatet blir en 128 element lång vektor som används för att beskriva nyckelpunkten. Alla nyckelpunkter har en sådan vektor och alla dessa används för att detektera objekt med hjälp av algoritmen [5].

2.1.3 Speeded Up Robust Features (SURF)

Är en algoritm som är baserad på SIFT, men designad för att vara snabbare att detektera med. Den använder Hessian-matriser för att approximera den metod som används i SIFT för att detektera nyckelpunkter. Resultatet ligger mycket nära det SIFT ger, men SURF är tre till fem gånger snabbare.

Hessian-matris för två dimensioner består av en 2*2 matris med andra ordningens partiella derivator, se ekvation 2.5.

" δI

2

δx

2

δI

2

δxδy δI

2

δxδy

δI

2

δy

2

#

(2.5) I matrisen formar egenvektorerna en ortogonal bas som visar bildens gradient i punkten.

Om bägge egenvärdena är positiva är punkten ett lokalt minimum, om bägge egenvärdena är negativa är punkten ett lokalt maximum och om de har olika tecken är det en sadelpunkt.

Det går att använda gränsvärden på determinanten för att kontrollera mängden intressanta punkter. SURF använder integrerade bilder, vilket är en bild där varje punkt p=(x,y) ˆ T innehåller summan av alla pixlarna i det rektangulära området mellan origo och punkten p.

Se ekvation 2.6 och figur 2.8.

I(x) =

i<x

X

i=0 j<y

X

j=0

I(x, y) (2.6)

Figur 2.8: Utseende för en integrerad bild [8].

(19)

2.1. METODER FÖR OBJEKTSIDENTIFIERING GENOM DATORSEENDE

Utifrån dessa kan intensiteten i denna del av bilden beräknas. Anledningen att integrera bilden är att det går mycket fortare att filtrera denna med Hessian-matriser. I SURF används matriserna som ett lådfilter på 9*9 pixlar och används istället för skillnader i normalfördel- ning för att hitta intressepunkter. SURF använder en bildpyramid med nivåer och oktaver likt SIFT för att algoritmen skall vara oberoende av skalan. För SURF är första lagret i py- ramiden resultatet av ett 9*9 filter. Till skillnad mot SIFT använder SURF skalan på filtret för att bestämma storleken för nästa nivå, filtret skalas hela tiden upp, vilket ger en omvänd bildpyramid, se figur 2.9. Varje nivå genereras på samma sätt som i SIFT, genom att använda Gaussfilter mellan varje nivå. Samtliga intressepunkter jämförs mellan lagren på samma sätt

Figur 2.9: Till vänster är en bildpyramid av den typ som används i SIFT, till höger av den typ som används i SURF [8].

som i SIFT, men resultatet måste interpoleras för att rätt skala skall användas. Detta görs genom att uttrycka Hessian-matrisen med en Taylorutveckling och sedan interpolera. För att algoritmen inte skall vara känslig för rotation av objektet beräknas rotationen för varje intressepunkt. Rotationen beräknas genom att undersöka pixlar i ett område med radien 6*s, där s är skalan, och beräkna x och y för dess Haar-transformering för varje punkt. Även här används integrerade bilder för att beräkningarna skall vara snabba. Dessa punkter ritas ut i ett Kartesiskt koordinatsystem. Runt själva intressepunkten viktas punkterna sedan med en Gaussfunktion. En kil med vinkeln 60 grader används sedan för att avgöra orienteringen, genom att summera det vägda bidraget från varje punkt och sedan välja den placering på kilen som ger högst totalt värde inom kilen, se figur 2.10.[9] För att generera beskrivarningen

Figur 2.10: Ett exempel på hur kilen kan användas [10].

till intressepunkten ritas ett fönster på 20*s upp kring den, med rotation baserad på punk-

tens orientering. Detta fönster delas upp i 4*4 jämnstora områden, dessa vägs in med en

Gaussfunkion, därefter beräknas deras Haar-wavelets med storleken 2*s för 25 punkter jämt

fördelade över dessa underregioner. För varje underregion räknas summan av dx, summan

av dy, summan av absolutvärdet för dx och summan av absolutvärdet för dy. Utifrån dessa

värden generas en egenskapsvektor för intressepunkten på totalt 64 element baserat på det

4 olika värdena från de 16 underregionerna.

(20)

2.2 Tekniker för inlärning av objekt

2.2.1 Max-Margin Object Detection (MMOD)

Denna teknik bygger till stor del på tekniken som presenterades i rapporten Learning to Localize Objects with Structured Output Regression [11] med skillnaden att det kan finnas flera antal av samma objekt som skall tränas i samma bild. Träningen kräver en XML-fil med värden som markerar ut en rektangel runt objekten. MMOD behöver inte negativa bilder, då tekniken använder sig utav resten av bilden där det markerade objekten inte finns. Tekniken kan särskilja olika objekt även om deras rektangulära markeringar överlappar, dock får den överlappande arean inte överskridra 50 % av dess egen area, se ekvation 2.7 [12].

Area(R 1 ∩ R 2 )

Area(R 1 ∪ R 2 ) < 0.5 (2.7)

2.2.2 Haar-kaskad

Kaskad-träning använder sig utav positiva och negativa bilder. Positiva är där objekten som skall tränas finns och negativa där objekten absolut inte finns. För att få en klassificering som har hög träffsäkerhet bör antalet bilder vara av storleksorningen några tusen och ett bra förhållande är 1:2, positiva till negativa [13]. Objekten i de positiva bilderna skall markeras ut i en XML-fil med värden som bildar en rektangel runt objekten, för att sedan tillåta tränaren att producera binära klassifikationer. Markeringarna får inte vara överlappande.

2.3 Mjukvara

2.3.1 OpenCV

Detta programvarubibliotek innehåller metoder för datorseende och bildanalys. Metoder som ansiktsigenkänning, följa objekt, detektera objekt etc. Biblioteket är utvecklat utav Intel och lanserades 1999. Biblioteket har öppen källkod och är skrivet i C vilket har lett till att det är tillgänglig för flera olika plattformar exempelvis Linux, Windows, Mac, Android.

Biblioteket har också implementerat gränssnitt mot andra språk än C, idag är det möjligt att använda t.ex. C++, C#, Python, Ruby och Java. Biblioteket innehåller också algoritmer för maskininlärning, framförallt för klassificering [14].

2.3.2 Dlib

Detta bibliotek är plattformsoberoende och skrivet i C++, det har även ett begränsat gräns- snitt mot Python. Biblioteket har öppen källkod och utvecklingen påbörjades 2002 av Davis E. King [15]. Detta bibliotek är en samling av generella komponenter samt verktyg som t.ex.

nätverks hantering, GUI, data struktur etc. Det innehåller även bildanalys, datorseende och maskininlärnings metoder. Biblioteket anammar MMOD vid skapandet av objektklassifice- ring [12].

2.3.3 Matlab

Matlab är inte ett bibliotek likt de andra två nämnda här, utan det är en mjukvara och

ett språk utvecklat av Mathworks, som grundades 1984 [16]. Matlab är ett komplext och

välutvecklad verktyg som används främst för matematiska och tekniska beräkningar och

simuleringar. De har implementerat populära algoritmer för diverse bildanalys, dataseende

samt maskininlärning.

(21)

2.4. SENSORER FÖR DETEKTERING AV VIKTSKILLNADER

2.4 Sensorer för detektering av viktskillnader

För detektering av skillnader i vikt placerad på en yta finns det två huvudsakliga metoder.

Att använda en tryckkänslig resistor är den ena. Detta är en resistor vars motstånd minskar ju större tryck som appliceras på den. Matas resistorn med en konstant ström går det att jämföra skillnaderna i spänning för att detektera skillnad i vikt placerad på sensorn.

Alternativet till detta är lastceller [17], vilket är en trådtöjningsgivare som precis likt tryck- känsliga resistorer varierar resistansen baserat på det tryck den utsätts för. Genom att koppla flera lastceller i en Whetstone-brygga går det att få ut noggranna mätvärden. Det är denna metodik som används i t.ex. köks- och badrumsvågar.

Spänningsförändringarna som sker i Whetstone-kopplade lastceller kan vara mycket små och vanliga mikrokontrollers som Arduino eller Raspberry Pi kan inte avläsa detta då upplösning- en på de analoga ingångar är för låg (10 kanaler för Arduino och bara digitala för Raspberry Pi)[18][19]. Det behövs då någon form av förstärkning för att kunna ta hand om den signal som kommer ifrån lastcellerna. Detta görs genom att använda exempelvis ett HX711 chip.

Detta förstärker signalen och konverterar den till en digital signal på 24 bitar, något som

enkelt kan tas emot av en mikrokontroller [20].

(22)
(23)

Kapitel 3

Metoder och resultat

Kapitlet beskriver vilka metoder, tekniker och hårdvara gruppen har valt samt varför. En övergripande genomgång av den arbetsmetodik som användes under examensarbetet be- skriver hur arbetet har skett. Kapitlet kommer också beskriva hur mjukvaran är uppbyggd igenom att både illustrera helhetssyn över systemet samt flödesschema över olika program.

Det kommer även att beskriva hur gruppen har testat systemet för ett antal olika scenarion.

Första sektionen täcker de val av tekniker och programvara som används för att skapa ob- jektsidentifieringen. Detta innefattar även de olika bildformat som finns möjliga att använda.

Den hårdvara som har valts presenteras och motiveras, vilket inkluderar de viktsensorer som används för att detektera om objekt sätts in eller tas ut. Samt även det val av plattform för mobilapplikationen och den back end som används i projektet för att knyta samman applikationen och basenheten.

3.1 Övergripande genomgång av arbetsmetodik

Inledningsvis utfördes en litteraturstudie (se kapitel 2) i vilken tidigare forskning och arbets- metoder undersöktes för att se vad för forskning som fanns inom området. Detta utgjorde en grund för resterande arbete, då resultaten från litteraturstudien analyserades för att se vilka val, metoder och tekniker som var lämpliga att använda i examensarbetet samt för att ta fram en prototyp. För dessa val se kapitel 3.2. Prototypen utvecklades utifrån dessa valda tekniker (se kapitel 3.3), samt att den testades och validerades mot projektets mål (se kapitel 3.4).

3.2 Vald teknik för objektsidentifikation och hårdvara

3.2.1 Bibliotek och programmeringsspråk för detektering

Dlib biblioteket tillsammans med C++ som programmeringsspråk valdes för att bygga de- tekterings programmet. Python valdes bort som programmeringsspråk för Dlib då det fort- farande är under utveckling och saknar centrala verktyg för projektet.

Dlib valdes på grund av dess snabbhet i att träna nya objekt klasser jämfört med Open- CV som använder en träningskaskad algoritm. Träning av nya objekt sker på två olika sätt beroende på vilket bibliotek som används. Med OpenCV används positiva samt negativa bilder, där positiva bara innehåller objekten som skall tränas och negativa inte får innehålla objekten. Förhållande mellan positiva och negativa bilder bör vara 1:2 där antalet positiva bilder är av storleksordningen några tusen [13].

Vid träning av objekt med Dlib behövs inte negativa bilder. Algoritmen kräver dock att få objekten markerat, sedan utnyttjar den resterande delen av bilden som negativ bild [12].

Objekt identifiering är lika effektiv med Dlib med färre antal träningsbilder gentemot Open-

(24)

CV med Haarträning. Att träna via Dlib tar mycket mindre tid jämfört med Haarträning, träningen kan ta några timmar för Dlib om antalet bilder är några tusen jämfört med några dagar eller upp till en vecka med OpenCV. Då projektet utförs under 10 veckor valdes Dlib av praktiska skäl; den lägre tränings tiden och det mindre antal bilder som krävs för inlärning vilket gör att programmet kan tränas snabbare [13].

Matlab valdes bort då det är mycket krävande på systemresurserna att köra [23].

3.2.2 Bildformat

Det finns tre bildformat som hanteras av kameran i Raspberry Pi och av Dlib gemensamt, dessa är BMP, okomprimerad JPG och PNG [24] [25]. Skillnaderna mellan dessa vid använd- ning i Dlib fanns ej dokumenterat. Tester gjordes då för att undersöka om det finns någon fördel med att använda ett specifikt bildformat. 40 identiska bilder togs med kameran, i de tre olika bildformaten. Storleken på dessa jämfördes för att se om det var någon skillnad i lagringsutrymme.

Format Antal filer Total storlek Genomsnittlig storlek

BMP 40 6,07 MB 151 kB

Okomprimerad JPG 40 6,13 MB 153 kB

PNG 40 6,06 MB 151 kB

Tabell 3.1: Lagringsutrymme för de olika filformaten.

Storleken skiljer enbart några kB per bild mellan de olika formaten. Bilderna användes sedan för en detektering för att se om det var någon skillnad i hur lång tid processen tog med identiska bilder i olika bildformat. I figur 3.1 går det att utläsa att skillnaden är mycket liten, i storleksordningen tiotals ms.

Figur 3.1: Tid för detektering med de olika filformaten.

3.2.3 Hårdvara Mikrokontroller

Raspberry Pi [19], tillsammans med en Raspberry Pi kamera modul valdes för detta projekt då denna enkortsdator är kapabel att hantera ett enklare fullskaligt operativsystem jämfört med Arduino och STM mikrokontroller [18][26].

STM och Arduino är mikrokontroller som visserligen skulle kunna köra RTOS (Real Time Operating System), men det är inte ett operativsystem som är kompatibelt med de bibliotek som har undersökts [15]. Processorkraften samt mängden RAM är också lägre jämfört med Raspberry Pi. Rasbian Jessie valdes som operativ system på Raspberry Pi.

Viktsensorer

För projektet undersöktes två alternativ för att detektera viktförändringar, tryckkänsliga

resistorer och lastceller. En tryckkänslig resistor kopplades till en Arduino med konstant

spänning över resistorn, Arduino mätte sedan spänningen med en analog ingång. Olika objekt

(25)

3.2. VALD TEKNIK FÖR OBJEKTSIDENTIFIKATION OCH HÅRDVARA

med känd vikt placerades på resistorn för att undersöka hur exakta mätningar det går att göra med en tryckkänslig resistor. Mätvärdet som fås ut från Arduino ligger mellan 0 och 1023, då detta är den högsta upplösningen som Arduino har på dess analoga ingångar [18].

Resistansen är inte linjär och från figur 3.2 går det att utläsa att mätvärdena är mycket

Objekt Vikt i gram Mätvärde från resistor

1 28 520

2 151 759

3 179 956

4 262 603

5 290 760

6 441 785

7 545 910

8 573 615

9 696 869

10 807 925

11 958 735

12 986 955

Tabell 3.2: Mätvärden från testet med den tryckänsliga resistorn.

Figur 3.2: Graf över mätvärden per vikt för den tryckkänsliga resistorn.

inprecisa. För att undersöka lastcellerna användes en köksvåg då dessa innehåller lastceller

som är placerade på ett sätt som fördelar vikten mellan de fyra olika cellerna. Ledarna som

i vanliga fall är kopplade till vågens interna elektronikkomponenter, kopplades istället till

ett HX711 kort vilket kopplades till en Arduino [20]. Med kalibrering var det möjligt att

använda köksvågen med en precision på +-1 gram, när objekt vars massa tidigare var känd

testades. Resultatet från testen med lastceller visas i figur 3.3 Då lastcellerna var mycket

precisa och går att använda problemfritt med tyngre vikter valdes dessa för användning av

viktdetektering i projektet.

(26)

Figur 3.3: Graf över mätvärden per vikt för lastcellerna.

3.2.4 Mobilapplikation

Android valdes som plattform för mobilapplikationen. Applikationen används för att identi- fiera okända objekt för systemet samt presentera aktuell lagerstatus.

Vid okända objekt skickar systemet de bilder det tagit som kan innehålla objektet till ap- plikationen för att användaren ska kunna identifiera detta. Identifiering sker genom att an- vändaren placerar en justerbar rektangulär markering kring objektet i bilden och därefter namnger användaren objektet. Objektnamn tillsammans med markeringsdata sparas i en databas för vidare användning utav systemet.

3.2.5 Back-end

Tjänster som data lagring och klient notifiering utnyttjades via www.parse.com. Tjänsten erbjuder gedigen API för både Android och REST-API. Gratis kontot ansågs vara tillräckligt för projektet [21].

3.3 Implementation

Den litteraturstudie som gjordes i examensarbetet lade grund för den metodik vilken an-

vändes för implementationen av arbetet. Den hela implementationen av detta består av en

Raspberry Pi som kör huvuddelen av koden, och använder en kamera för att ta bilder. Den

är kopplad till en Arduino seriellt, vilken är kopplad till lastcellerna som agerar viktsensor i

projektet för att avgöra riktning på objekten. Raspberry Pi kommunicerar sedan med Par-

se.com (back end) för att uppdatera lagerstatus och via vilka bilder som innehåller okända

objekt. Androidapplikationen använder denna data från back end för att visa lagerstatus

för användaren och för att användaren ska kunna identifiera okända objekt. Den data som

genereras av användaren vid identifikation (koordinater i en bild vilken skapar en rektangel

som objektet ska finnas inom), vilken därefter används av Raspberry Pi för att träna in

nya objekt i systemet. Följande sektioner går igenom de olika program och skript som har

utvecklats för att uppfylla de mål som fanns för prototypen.

(27)

3.3. IMPLEMENTATION

3.3.1 Systemöversikt

Systemet tillåter användare att ställa in eller ta ut objekt.

Om ett objekt ställs in och Raspberry Pi kan identifiera det samt att det finns med i la- gerstatus listan, ökas dess antal med ett, finns objektet inte bland med på listan uppdateras denna med objektet. Användaren har tillgång till listan via mobil applikationen samt lokalt på Raspberry Pi om så önskas.

Om objekt tas ut och identifieras, minskar dess antal med ett från lagerstatus listan.

Vid okänt objekt sparas dessa bilder i mappen för okända bilder. Bilderna laddas sedan upp till databasen för att vara tillgängliga för mobilapplikationen.

Användaren identifierar bilderna via mobilapplikationen, informationen som generas vid identifiering vidarebefordras till Raspberry Pi via databasen. Raspberry Pi tränar därefter nya detektorer med hjälp av de nya informationen.

Figur 3.4: Förenklad systemöversikt.

(28)

3.3.2 Huvud- och kameraskript i Python

För att kunna ta bilder med Raspberry Pi utvecklades ett skript i Python, detta är huvud- skriptet i projektet, och styr när andra skript och program skall köras. (Se figur i appendix:

A.1). För initiering av kameran finns två alternativ att ta bilder med, det ena är med en stillbildsfunktion och det andra är att använda sekvenstagningsfunktionen inställd på att ta en bild åt gången. Funktionaliteten för de bägge metoderna testades för att avgöra vilken som var lämpligast att använda. Detta gjordes genom att skriva skript för bägge funktio- nerna och använda dessa för att ta 100 bilder samt för tidtagning. Resultaten visade tydligt

Antal bilder Tid Bilder/sek Stillbild 100 32,2 3,11

Sekvens 100 14,1 7,10

Tabell 3.3: Lagringsutrymme för de olika filformaten.

att den sekventiella bildtagningen är snabbare på att ta bilder än stillbildsfunktionen. I pro- jektet används därmed den sekventiella bildtagningen då fler bilder ger en större chans att få en bra bild på objektet, även om det blir fler bilder att analysera anses detta vara det bättre alternativet för att maximera chansen att identifiera objekt. Huvudskriptet använder en sensor för att avgöra ifall det skall vara aktiv eller ej, detta skall simulera en dörr eller en lucka som öppnas och stängs. Är sensorkretsen bruten tar skriptet bilder, och är den sluten väntar den på att den skall brytas. När kretsen sluts efter ha varit bruten startas ett skript för identifiering och de bilder som inte har blivit sorterade raderas.

3.3.3 Skript för detektering av viktförändringar

Skriptet körs på Raspberry pi och används för att avgöra om ett objekt ställs in eller tas ut med hjälp av viktskillnad. (Se figur i appendix A.2). Viktdetekteringen utförs med hjälp av lastceller kopplade till Arduino. Arduino tar in mätvärdet från HX711-förstärkaren och skickar detta vidare till Raspberry Pi. Raspberry Pi kontrollerar med hjälp av flaggor ifall detta är ett nytt startvärde eller en mätning, är det ett startvärde sparas det. Vid mätning avvaktar Raspberry Pi ett mätvärde som skiljer minst två gram mot tidigare mätning, detta för att ta hänsyn till den felmarginal som finns i vågen. Avviker vikten med mer än två gram sparas värdet och systemet fortsätter mäta tills det att värdet ligger inom två gram av föregående mätning, detta för att systemet skall hinna stabiliseras då objekt flyttas.

När värdena har stabiliserats jämförs startvärdet med slutvärdet. Är startvärdet större än slutvärdet är det ett utgående objekt. Programmet väntar då i en sekund och flyttar sedan alla bilder från den mapp där de sparas efter att bilden är tagen till en mapp för utgående objekt, därefter startas en objektidentifiering på dessa bilder. I det fall då slutvärdet är större än startvärdet betyder det att ett objekt är inkommande och bilderna flyttas till inkommande mappen för att identifieras. I bägge fall återställs variabler efter denna operation och programmet startar om.

3.3.4 Program för Arduino

Programmet används för att ta emot data från HX711-förstärkare och skicka vidare till

Raspberry Pi, (se figur i appendix A.3), det finns färdiga Arduino-bibliotek skapade för

HX711-förstärkar chippet. Programmet i Arduino väntar på att Raspberry Pi skall aktivera

en av Arduinos pinnar, vid aktivering görs en mätning av vikten med hjälp av HX711-

förstärkare och mätvärdet skickas seriellt till Raspberry Pi där det behandlas av skriptet för

viktskillnader.

(29)

3.3. IMPLEMENTATION

3.3.5 Skript för start av identifiering

Skiptet används för att avgöra om inkommande eller utgående mappen innehåller några filer.

(Se figur i appendix A.4). Finns det filer i endera mappen, startas identfieringsprogrammet på innehåller i den aktuella mappen.

3.3.6 Program för objektidentifikation

Detta är objektidentifikations programmet som startas med Inkommande- eller Utgående- mapp sökvägen som argument. Programmet laddar in bilderna som finns i den angivna mappen. Programmet laddar också in de tränade detektorerna för att sedan påbörja iden- tifiering. Om något objekt hittas uppdateras den lokala JSON filen för lagerstatus därefter, sedan laddas den upp till databasen. Om inget objekt hittas omplaceras dessa bilder till Okända-mappen för att sedan starta Python-skriptet för okända bilder. Se figur i appendix A.5.

3.3.7 Skript för lagerstatus uppdatering

Används av Raspberry Pi för att avgöra om det har skett några förändringar i databasen, eller om det ska laddas upp ny data till databasen. (Se figur i appendix A.6) Skriptet startas antingen för att ladda ner eller upp lagerstatus JSON-filen som innehåller aktuell lagerstatus.

”Ladda upp”: skriptet uppdaterar databasen med den lokala lagerstatus listan.

”Ladda ner”: skriptet uppdaterar den lokala lagerstatus listan med data från databasen.

3.3.8 Skript för att hantera okända objekt

Skriptet används för att laddar upp bilder från Okända-mappen till databasen. Skriptet skapar en JSON-fil med en JSON-vektor som innehåller JSON-objekt, där varje bild är ett JSON-objekt. Se figur i appendix A.7.

JSON objektets parametrar: picName, picURL, x, y, width, height

Lokala bildfilens namn motsvarar picName och picURL, vilken erhålls vid uppladdning till databasen. Detta görs för att användaren skall kunna ladda ner och markera rätt bild på Android enheten. När skriptet har skapat JSON filen och laddat upp den, skickas det en notifikation till användaren.

3.3.9 Skript för ny detektor

Skriptet används för att kontrollerar databasen om det finns nya manuellt identifierade bilder, när det finns laddas informationen angående bilderna ner. Skriptet överför informationen till en XML-fil som används av träningsprogrammet för nya detektorer. När den nya detektorn är färdig, startas detekteringsprogrammet igen för att säkerställa detektorns funktionalitet samt att uppdatera lagerstatus. Se figur i appendix A.8.

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].

(30)

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 kameran 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.

(31)

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)

(32)
(33)

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

(34)

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.

(35)

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.

(36)
(37)

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.

(38)
(39)

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

(40)

[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

(41)

Bilaga A

Appendix

(42)

A.1 Flödesschema över bildtagning via Raspberry Pi.

(43)

A.2. FLÖDESSCHEMA ÖVER PROGRAMMET FÖR VIKTDETEKTERING.

A.2 Flödesschema över programmet för viktdetektering.

(44)

A.3 Flödesschema över Arduino programmet.

(45)

A.4. FLÖDESSCHEMA ÖVER SKRIPTET FÖR ATT STARTA IDENTIFIERINGEN.

A.4 Flödesschema över skriptet för att starta identifieringen.

(46)

A.5 Flödesschema över programmet för objektidentifiering.

(47)

A.6. FLÖDESSCHEMA ÖVER PYTHON-SKRIPTET SOM UPPDATERAR LAGERSTATUS.

A.6 Flödesschema över Python-skriptet som uppdaterar

lagerstatus.

(48)

A.7 Flödesschema över skriptet för hantering av okända objekt.

(49)

A.8. FLÖDESSCHEMA ÖVER PYTHON-SKRIPTET FÖR ATT SKAPA NYA DETEKTORER.

A.8 Flödesschema över Python-skriptet för att skapa nya

detektorer.

(50)

A.9 Flödesschema över programmet för att träna nya detektorer.

(51)

A.10. FLÖDESSCHEMA ÖVER ANDROIDAPPLIKATIONEN.

A.10 Flödesschema över Androidapplikationen.

(52)

A.11 Bild på de tre olika aktiviteterna i Androidapplikationen.

References

Related documents

Resultatet från testet av Platts och Platts konkursmodell visade liknande resultat för både konkurs- och ej konkursföretag, det vill säga att nästan alla

Det är på samma sätt i ett elektriskt system, om det finns något som gör att strömmen inte kan flöda lätt i systemet kommer det att vara mindre ström i kretsen.. Det finns

Om röret inte är helt kommer inte vatten att flyta i röret utan läcka ut och på samma sätt fungerar ström, om det finns ett gap i ledningen kommer inte strömmen att kunna flyta

Det är även en minskning i standardavvikelse efter den andra prepareringen, detta beror på att den övre gränsen är satt till 0.41 för övervakningsläget och medelfriktionen

Utöver detta kommer det i uppsatsen redas ut hur BFNAR 2003:4 har påverkat olika intressenter samt vad i årsredovisningen som är relevant att granska för att

67 procent av respondenterna ansåg att utformning och funktion på den rökevakueringsutrustning som finns på arbetsplatsen bidrar till en tillfredsställande rökevakuering

Beskrivning av utseende: mörk färg och är bland de mörkaste av proverna. Beskrivning av kondition: två större sprickor varav den ena går i radiell- och

I den elevcentrerade undervisningsgruppen var det två elever som uppgav att de inte lär sig genom det lärosätt som provats i denna studie, men fem elever ur