14 KiB
Kontrollera lager från en IoT-enhet
Sketchnote av Nitya Narasimhan. Klicka på bilden för en större version.
Quiz före föreläsningen
Introduktion
I den föregående lektionen lärde du dig om de olika användningsområdena för objektdetektering inom detaljhandeln. Du lärde dig också hur man tränar en objektdetektor för att identifiera lager. I denna lektion kommer du att lära dig hur du använder din objektdetektor från din IoT-enhet för att räkna lager.
I denna lektion kommer vi att täcka:
- Lagerberäkning
- Anropa din objektdetektor från din IoT-enhet
- Avgränsningsrutor
- Träna om modellen
- Räkna lager
🗑 Detta är den sista lektionen i detta projekt, så efter att du har slutfört lektionen och uppgiften, glöm inte att städa upp dina molntjänster. Du kommer att behöva tjänsterna för att slutföra uppgiften, så se till att göra det först.
Se guiden för att städa upp ditt projekt vid behov för instruktioner om hur du gör detta.
Lagerberäkning
Objektdetektorer kan användas för lagerkontroll, antingen för att räkna lager eller för att säkerställa att lager finns där det ska vara. IoT-enheter med kameror kan placeras runt hela butiken för att övervaka lager, med början vid hotspots där det är viktigt att fylla på varor, såsom områden där små mängder av högvärdesprodukter lagras.
Till exempel, om en kamera pekar på en hylla som kan hålla 8 burkar tomatpuré, och en objektdetektor bara upptäcker 7 burkar, saknas en och behöver fyllas på.
I bilden ovan har en objektdetektor upptäckt 7 burkar tomatpuré på en hylla som kan hålla 8 burkar. IoT-enheten kan inte bara skicka en notifikation om behovet av påfyllning, utan kan även ge en indikation om var den saknade varan finns, viktig information om du använder robotar för att fylla på hyllor.
💁 Beroende på butiken och varans popularitet skulle påfyllning förmodligen inte ske om bara 1 burk saknas. Du skulle behöva bygga en algoritm som avgör när påfyllning ska ske baserat på dina produkter, kunder och andra kriterier.
✅ I vilka andra scenarier skulle du kunna kombinera objektdetektering och robotar?
Ibland kan fel lager finnas på hyllorna. Detta kan bero på mänskliga misstag vid påfyllning, eller att kunder ändrar sig om ett köp och lägger tillbaka en vara på första bästa plats. När det gäller icke-färskvaror som konserver är detta en irritation. Om det är en färskvara som frysta eller kylda varor kan detta innebära att produkten inte längre kan säljas eftersom det kan vara omöjligt att avgöra hur länge varan varit utanför frysen.
Objektdetektering kan användas för att upptäcka oväntade varor, och återigen varna en människa eller robot för att returnera varan så snart den upptäcks.
I bilden ovan har en burk babymajs placerats på hyllan bredvid tomatpurén. Objektdetektorn har upptäckt detta, vilket gör att IoT-enheten kan notifiera en människa eller robot att returnera burken till dess rätta plats.
Anropa din objektdetektor från din IoT-enhet
Objektdetektorn du tränade i den senaste lektionen kan anropas från din IoT-enhet.
Uppgift - publicera en iteration av din objektdetektor
Iterationer publiceras från Custom Vision-portalen.
-
Öppna Custom Vision-portalen på CustomVision.ai och logga in om du inte redan har den öppen. Öppna sedan ditt projekt
stock-detector
. -
Välj fliken Performance från alternativen högst upp.
-
Välj den senaste iterationen från listan Iterations på sidan.
-
Klicka på knappen Publish för iterationen.
-
I dialogrutan Publish Model, ställ in Prediction resource till resursen
stock-detector-prediction
som du skapade i den senaste lektionen. Låt namnet varaIteration2
och klicka på knappen Publish. -
När den har publicerats, klicka på knappen Prediction URL. Detta visar detaljer om prediktions-API:et, och du kommer att behöva dessa för att anropa modellen från din IoT-enhet. Den nedre sektionen är märkt If you have an image file, och det är dessa detaljer du vill ha. Ta en kopia av den visade URL:en som kommer att se ut ungefär så här:
https://<location>.api.cognitive.microsoft.com/customvision/v3.0/Prediction/<id>/detect/iterations/Iteration2/image
Där
<location>
är platsen du använde när du skapade din Custom Vision-resurs, och<id>
är ett långt ID bestående av bokstäver och siffror.Ta också en kopia av värdet Prediction-Key. Detta är en säker nyckel som du måste skicka när du anropar modellen. Endast applikationer som skickar denna nyckel får använda modellen, alla andra applikationer avvisas.
✅ När en ny iteration publiceras kommer den att ha ett annat namn. Hur tror du att du skulle ändra iterationen som en IoT-enhet använder?
Uppgift - anropa din objektdetektor från din IoT-enhet
Följ relevant guide nedan för att använda objektdetektorn från din IoT-enhet:
Avgränsningsrutor
När du använder objektdetektorn får du inte bara tillbaka de upptäckta objekten med deras taggar och sannolikheter, utan du får också avgränsningsrutorna för objekten. Dessa definierar var objektdetektorn upptäckte objektet med den angivna sannolikheten.
💁 En avgränsningsruta är en ruta som definierar området som innehåller det upptäckta objektet, en ruta som definierar gränsen för objektet.
Resultaten av en prediktion i fliken Predictions i Custom Vision har avgränsningsrutorna ritade på bilden som skickades för prediktion.
I bilden ovan upptäcktes 4 burkar tomatpuré. I resultaten är en röd fyrkant överlagd för varje objekt som upptäcktes i bilden, vilket indikerar avgränsningsrutan för bilden.
✅ Öppna prediktionerna i Custom Vision och kolla in avgränsningsrutorna.
Avgränsningsrutor definieras med 4 värden - top, left, height och width. Dessa värden är på en skala från 0-1, vilket representerar positionerna som en procentandel av bildens storlek. Ursprungspunkten (positionen 0,0) är det övre vänstra hörnet av bilden, så top-värdet är avståndet från toppen, och botten av avgränsningsrutan är top plus height.
Bilden ovan är 600 pixlar bred och 800 pixlar hög. Avgränsningsrutan börjar 320 pixlar ner, vilket ger ett top-koordinat på 0.4 (800 x 0.4 = 320). Från vänster börjar avgränsningsrutan 240 pixlar in, vilket ger ett left-koordinat på 0.4 (600 x 0.4 = 240). Höjden på avgränsningsrutan är 240 pixlar, vilket ger ett height-värde på 0.3 (800 x 0.3 = 240). Bredden på avgränsningsrutan är 120 pixlar, vilket ger ett width-värde på 0.2 (600 x 0.2 = 120).
Koordinat | Värde |
---|---|
Top | 0.4 |
Left | 0.4 |
Height | 0.3 |
Width | 0.2 |
Att använda procentvärden från 0-1 innebär att oavsett vilken storlek bilden skalas till, börjar avgränsningsrutan 0.4 av vägen längs och ner, och är 0.3 av höjden och 0.2 av bredden.
Du kan använda avgränsningsrutor kombinerat med sannolikheter för att utvärdera hur korrekt en upptäckt är. Till exempel kan en objektdetektor upptäcka flera objekt som överlappar, till exempel upptäcka en burk inuti en annan. Din kod kan titta på avgränsningsrutorna, förstå att detta är omöjligt, och ignorera alla objekt som har en betydande överlappning med andra objekt.
I exemplet ovan indikerar en avgränsningsruta en förutsedd burk tomatpuré med 78.3%. En andra avgränsningsruta är något mindre och ligger inuti den första avgränsningsrutan med en sannolikhet på 64.3%. Din kod kan kontrollera avgränsningsrutorna, se att de överlappar helt, och ignorera den lägre sannolikheten eftersom det inte är möjligt att en burk är inuti en annan.
✅ Kan du tänka dig en situation där det är giltigt att upptäcka ett objekt inuti ett annat?
Träna om modellen
Precis som med bildklassificeraren kan du träna om din modell med data som samlats in av din IoT-enhet. Att använda denna verkliga data kommer att säkerställa att din modell fungerar bra när den används från din IoT-enhet.
Till skillnad från bildklassificeraren kan du inte bara tagga en bild. Istället måste du granska varje avgränsningsruta som upptäckts av modellen. Om rutan är runt fel sak måste den tas bort, om den är på fel plats måste den justeras.
Uppgift - träna om modellen
-
Se till att du har samlat in en mängd bilder med din IoT-enhet.
-
Från fliken Predictions, välj en bild. Du kommer att se röda rutor som indikerar avgränsningsrutorna för de upptäckta objekten.
-
Gå igenom varje avgränsningsruta. Välj den först så ser du en popup som visar taggen. Använd handtagen i hörnen på avgränsningsrutan för att justera storleken vid behov. Om taggen är fel, ta bort den med knappen X och lägg till rätt tagg. Om avgränsningsrutan inte innehåller ett objekt, ta bort den med papperskorgsknappen.
-
Stäng redigeraren när du är klar och bilden flyttas från fliken Predictions till fliken Training Images. Upprepa processen för alla prediktioner.
-
Använd knappen Train för att träna om din modell. När den har tränats, publicera iterationen och uppdatera din IoT-enhet för att använda URL:en för den nya iterationen.
-
Återimplementera din kod och testa din IoT-enhet.
Räkna lager
Med en kombination av antalet upptäckta objekt och avgränsningsrutorna kan du räkna lagret på en hylla.
Uppgift - räkna lager
Följ relevant guide nedan för att räkna lager med resultaten från objektdetektorn från din IoT-enhet:
🚀 Utmaning
Kan du upptäcka felaktigt lager? Träna din modell på flera objekt och uppdatera sedan din app för att varna dig om fel lager upptäcks.
Kanske ta detta ännu längre och upptäcka lager sida vid sida på samma hylla, och se om något har placerats på fel plats genom att definiera gränser för avgränsningsrutorna.
Quiz efter föreläsningen
Granskning & Självstudier
- Läs mer om hur man arkitekterar ett end-to-end lagerdetekteringssystem från Out of stock detection at the edge pattern guide på Microsoft Docs
- Lär dig andra sätt att bygga end-to-end lösningar för detaljhandeln genom att kombinera en rad IoT- och molntjänster genom att titta på denna Behind the scenes of a retail solution - Hands On! video på YouTube.
Uppgift
Använd din objektdetektor vid kanten
Ansvarsfriskrivning:
Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, vänligen notera att automatiska översättningar kan innehålla fel eller felaktigheter. Det ursprungliga dokumentet på dess originalspråk bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för eventuella missförstånd eller feltolkningar som uppstår vid användning av denna översättning.