PowerAppsin hallintasivulle ilmestyi AI Builder, josta kaikki ovat innoissaan.

Miksi?

Koska sen avulla voi rakentaa helposti erilaisia tekoälymalleja, joita taas voi hyödyntää PowerAppsissa ja Flow:ssa.

ai builder.png

Katsotaan tarkemmin miten helppoa (tai vaikeaa) AI Builderin hyödyntäminen on.

Esimerkki – Hyllyinventaario

Kuvitellaan että meillä on myyntiedustaja, joka kiertää myymälöitä. Yksi hänen tehtävistään on tarkistamaa, miten moni yrityksen tuotteista löytyy hyllystä.

Mitä jos tämän voisi tehdä automaattisesti kuvaamalla hyllyt?

Tarvitsemme ainoastaan

  • Tuotetiedot, jotka on tallennettu Common Data Serviceen
  • Riittävästi esimerkkikuvia tuotteista
  • Yhden PowerAppsin
  • Hieman aikaa

Aloitetaan!

Mallin luominen

Ensin tulee luoda käytettävä malli. Etsimme kohteita valokuvasta, jolloin valitsemme pohjalle Object Detection -mallin.

Hyllyistä etsimämme tuotteet ovat tietenkin makeisia, joten nimetään malli sen mukaan (Candies).

ai maker 2png.png

Etsittäviä kohteita vastaava entiteetti

Tunnistettaville kohteille tulee löytyä vastine Common Data Servicestä. Luodaan uusi entiteetti (Candy). Karkeista ylläpidetään seuraavia tietoja

  • Tuotteen nimi (Name)
  • Hinta (Price)
  • Pakkauskoko (Size (g))

ai maker candy entity.png

Lisätään sopivaksi katsomamme määrä eri makeisia. Voit ladata tiedot excelistä tai tehdä yksinkertaisen Powerappsin, jolla tiedot syötät.

Tämän jälkeen voimme jatkaa varsinaisen mallin kanssa.

Mallin liittäminen Common Data Servicen entiteettiin

Seuraavaksi valitaan, mitä CDS:n entiteettiä olemme tunnistamassa.

ai maker pick entity.png

Valitaan Candies-entiteetti ja käytetään kuvien luokittelussa sen nimi-kenttää (Name).

ai maker pick entity2.png

Seuraavaksi määritellään, mitä tuotteista olemme tunnistamassa. Jotta tästä tulee joskus valmista, opetetaan malli tunnistamaan ainoastaan Re-Mix, Ässä Mix ja Missä X -karkkipussit.

ai maker pick entity3.png

Mallin opettaminen esimerkkivalokuvien avulla

Tekoälymalli vaatii toimiakseen esimerkkidataa. Tässä tapauksessa se tarkoittaa valokuvia karkkipusseista.

Käydään lähikaupassa napsimassa sopivia kuvia. Loput kuvamateriaalista haetaan netistä.

ai maker images1.png

Seuraavaksi jokaiseen kuvaan merkitään kaikki tunnistettavat tuotteet.

ai maker images2.png

Jokaista tunnistettavaa tuotetta kohden tulee olla vähintäään 15 kuvaa. Suositus on 50. Kuvien merkitseminen on sitten käsityötä.

100 tuotetta tunnistavan mallin rakentamiseen menee siis hetki. Ei koneelta vaan sinulta.

Siihen on syynsä että esimerkkisovelluksemme tunnistaa ainoastaan kolme erilaista karkkipussia.

Valmis malli

Mallia pitää ensin harjoittaa (train), jonka jälkeen sen voi julkaista.

Näyttökuva 2019-6-11 kello 20.59.00.png

Ainoastaan julkaistut mallit ovat PowerAppsin ja Flow:n hyödynnettävisä.

Näyttökuva 2019-6-11 kello 19.59.38.png

Kone arpoo myös mallin hyvyyttä kuvaavan luvun (kuvassa 81%). Sitä ei kannata liikaa tuijottaa, vaan testata itse miten malli suoriutuu.  Se onnistuu helpoiten saman sivun pikatestin (Quick test) avulla.

Lataa koneelta esimerkkikuva.

Näyttökuva 2019-6-11 kello 20.06.42.png

Ja palvelu näyttää mitä kohteita se kuvasta tunnisti ja millä varmuudella.

Näyttökuva 2019-6-11 kello 20.07.02.png

Ässä mix 91% varmuudella. Lupaavaa. Voimme siirtyä seuraavaan vaiheeseen, eli varsinaisen työkalun rakentamiseen.

PowerApps

Luodaan tyhjä PowerApps mobiililayoutilla ja lisätään siihen AI Builder -valikosta objektintunnistustoiminto.

Näyttökuva 2019-6-11 kello 18.53.52.png

Valitaan ObjectDetector -kontrolli käyttämään luomaamme mallia (Candies).

Näyttökuva 2019-6-11 kello 18.55.36.png

Kontrollia klikkaamalla käyttäjä voi joko valita puhelimestaan kuvan tai ottaa uuden.

Kuva analysoidaan mallin avulla ja tunnistetut kohteet löytyvät kontrollin VisionObjects-ominaisuuden takaa. Kustakin kohteesta löytyy nimi, sekä montako kappaletta niitä kuvasta löytyi.

Näyttökuva 2019-6-11 kello 18.58.46.png

Sovellusta käytetään kartoittamaan, onko hyllyssä kaikki myyntiedustajan vastuulla olevat tuotteet.

Lisätään galleria, jossa esitetään kaikki Candies -entiteetin tietueen tietueet. Kuvitellaan että myyntiedustaja vastaa niistä kaikista.

Näyttökuva 2019-6-11 kello 19.03.29.png

Esitetään gallerian sisältö kahdessa sarakkeessa ja lisätään kunkin tuotteen kohdalle symboli tuotteen löytymisen merkiksi.

Lisätään samalla gallerialle otsikko.

Näyttökuva 2019-6-11 kello 19.09.10.png

Seuraavaksi lisätään näytölle painike, jonka teksti kertoo montako karkkipussia kuvasta löytyi.

Näyttökuva 2019-6-12 kello 20.28.02.png

Mikäli karkkipusseja ei löytynyt, ei painiketta voi painaa (DisplayMode = Disabled).

DisplayMode = If(CountRows(Filter(ObjectDetector1.VisionObjects; count > 0)) > 0;
                 DisplayMode.Edit;
                 DisplayMode.Disabled)

Painiketta painamalla lisätään löydetyt kohteet erilliseen kokoelmaan (colFoundProducts).

Näyttökuva 2019-6-12 kello 20.26.55

Nyt voimme visualisoida, mitkä tuotteet ovat hyllyssä ja mitkä eivät.

Näyttökuva 2019-6-11 kello 19.26.32.png

Vaihdetaan vielä ikonin väri riippumaan näytettävästä symbolista.

Color = If(Icon1.Icon = Icon.Cancel; 
           RGBA(255; 0; 0; 1); 
           Green)

Valmista.

Näyttökuva 2019-6-11 kello 19.32.50.png

Olemme rakentaneet sovelluksen, jolla myyntiedustaja voi ottaa hyllystä kuvia. Jokaisen kuvan jälkeen hän voi päivittää sovelluksen tuotelistaa.

Lopetettuaan hän näkee suoraan listasta, mitkä hänen edustamistaan tuotteista löytyi hyllystä ja mitkä ei.

Yhteenveto

Onko tällaisista sovelluksista mitään todellista hyötyä?

On. Mieti jos myyntiedustaja tarkistaakin 100 erilaista makeistuotetta Prisman hyllystä. Tuotteiden automaattisenen tunnistaminen kuvista on varmasti nopeampaa kuin niiden manuaalinen läpikäynti.

Mallin rakentamisessa on samat haasteet kuin kaikissa kohteiden tunnistamis -malleissa. Esimerkkikuvien pitää olla oikeanlaisia ja riittävän kattavia, jotta malli toimisi oikein.

PowerAppsin ObjectDetector -kontrolli on ominaisuuksiltaan vielä aika kevyt. Omaa logiikkaa sen ympärille voi rakentaa vielä varsin rajallisesti.

Hieman vastaava (kohteen tunnistus) esimerkki löytyy aiemmasta kirjoituksesta. Silloin hyödynnettiin Azuren Custom Vision -palvelua.

Kumpi tapa tuntuu helpommalta?