SayWelcome

SayWelcome a.k.a Kiosken. Ett PoC – Androidprojekt som jag bidragit till att utveckla under min LIA-period, våren 2018. Mina tjugo veckor praktik  (LIA) “Lärande i Arbete”, gjorde jag på konsultbolaget Cybercom Group i Malmö. Jag och en kurskompis Christoffer Wiregren, var de två utvecklarna i projektet. Projektet ska producera en prototyp (s.k. PoC) och som sådan är den riktad mot en specifik kund till Cybercom, nämligen Bravida. Bravida är en stor aktör inom fastighetsservice i Norden. Denna PoC är ett, av Cybercom, internt initierat projekt inom divisionen Innovation Zone i Malmö. Denna PoC är således varken initierat eller finansierat av Bravida, men Cybercom vill förstås att projektet ska väcka intresse hos Bravida. Läget medför att jag inte i nuläget (180527) får publicera bildmaterial från Appen. Endast beskrivande text. Inga skärmdumpar, eller video i nuläget.

Bakgrund:
Fler och fler företag söker någon form av automatiserad och AI-assisterad mottagande av besökare, både bland bevakade och obevakade entréer. Bravida har bl.a en sådan produkt på marknaden där Cybercom har bidragit med att utveckla hela dess backend. Den befintliga produkten kan jag kalla för “Kiosken 1.0”. Den är en taktil skärm, varpå en besökare kan knappa in sina besöksuppgifter och kontakta en värd, samt därefter få en besöksbricka utskriven. De exakta uppgifterna kan förstås anpassas till olika företag och behov. Cybercom i Malmö har just en sådan skärm. Det är den och vissa av dess uppgifter som våran PoC ska försöka förnya. I den kontexten är det intressant för Cybercom att utveckla en iteration med nya tekniker, dels för att utöka kompetenser inom nya tekniker internt, samt dessutom att erbjuda Bravida en prototyp av en möjlig röststyrd incheckningsassistent. Jag kallar den för tex “Kiosken 2.0”, eller arbetsnamnet “SayWelcome”.

Uppdrag:
Att få till ett välkomnande och en inregistrering, av en besökare till Cybercom, helt utförd genom en röstkonversation mellan besökaren och Kiosken. Kan det gå, hur långt kommer vi på tjugo veckor och vilka erfarenheter kan vi ta med oss från projektet?

Metoder och tekniker:
Vi anammade Scrum metoder, med Product Owner, Scrum Master, Developer Team, Sprint Planning, Sprint Demo, Daily Standups, Jira, Planning Poker o.s.v. Jag och Christoffer var alltså de två utvecklarna. Dessutom höll vi koden uppdaterad genom Git, Bitbucket och tillämpade Gitflow i vårt dagliga arbete. Som chatbot valde vi Dialogflow från Google.  Dialogflow processar dialoger genom deras Natural Language vilken utnyttjar Machine Learning på alla användares uttryck och fraser för att bättre gissa vad användaren vill uttrycka. I mitten av våren släpptes dessutom stöd för det svenska språket. Vilket får mig till att spekulera i att detta kan vara bland de första Dialogflow-projekten som har utvecklats i Sverige med stöd för svenska språket?

Dessutom implementerade vi Google Vision för ansiktsdetektering och -tracking. Samt Microsoft Cognitive Services API för ansiktsidentifiering. Vårt backend var det av Cyberom sedan tidigare utvecklade Check In backend, vilket används i skarpt läge för vissa produkter från Bravida. Applikationen är en Android applikation skriven i Java med Android Studio som IDE, Vi körde ut på tablets och telefoner under vår utvecklingsfas. Den färdiga prototypen är tänkt att köra på en större (tex 24”) skärm. Vi utnyttjar enhetens inbyggda kamera, mikrofon, högtalare och taktila skärm.

Vårt projekt tillämpar arkitekturen MVVM och implementerar Googles nyaste verktyg; Lifecycle, Model, View, ViewModel samt ett fjärde lager Repositories, vilka är singletons som svarar för kontakt med dataklasser, backend och övriga molntjänster. Med siktet att göra strukturen modulär, flexibel, livscykelbeständig och testbar i enlighet med Googles tankegångar.

Resultat:
Bra! Vi har lyckats med att genomföra; detektera och följa ett ansikte, beroende på om ansiktet därefter identifieras eller ej tas konversationen vidare därifrån. Kiosken initierar en konversation när gästen är tillräckligt nära (i nuläget ca en meter). Avståndet uppskattas med hur brett en överlagrad ruta på ansiktet är. Genom konversationen säkerställer Kiosken att den fått de obligatoriska uppgifterna. Obligatoriska uppgifter är gästens förnamn, efternamn och organisation, samt förnamn och efternamn på den anställde som gästen vill träffa. Konversationen avslutas med att ett Kiosken skickar ett SMS till den anställde, samt bekräftar till gästen att “jag skriver ut en besöksbricka, ta gärna en kopp kaffe medan du väntar på n.n”. -Verkar ju enkelt. Det var det inte…

Flödet i appen är förenklat; tal-till-text, text-till-Dialogflow, Dialogflow-till-text, text-till-tal.

Dessutom lade vi såklart in lite sidospår i konversationen; erbjuder kaffe, informerar om gratis WiFi, tillkallar en medarbetare (om gästen inte vill prata med en AI) m.m. Det var också skoj att utnyttja en röstkonversation till att navigera i appen, växla vyer, bekräfta/göra val, visa/dölja fragment m.m.

Utmaningar och reflektioner:
***  UI och UX: – hur genomför Kiosken sitt uppdrag utan att besvära gästen?
Inte alla gäster vill prata, utan föredrar istället att i tystnad mata in sina uppgifter? Hur växlar vi smidigt mellan röst till taktil och tillbaks? Hur upplever gästen konversationen?
Hur tar vi hand om alla missförstånd i översättningen tal-till-text, utan att göra gästen besvärad och otålig?

*** Namn, namn och åter namn. Tal-till-text missar ofta på namn och dess stavning. Vilket vi måste hantera. Vi lyckades från SCB få tag i för- och efternamn för samtliga folkbokförda i Sverige med fler än tio användare. Ca 90.000 plus 50.000 namn. Namnen laddades upp till Dialogflow. Dialogflow returnerade endast bästa matchning mot denna databas, aldrig returer utanför databasen. Vilket resulterade i att Kiosken aldrig försökte ge (pinsamma) gissningar på vad gäster heter. Nu visade det sig att folkbokförda ibland kan heta besynnerliga saker… Gästen kan alltid, genom taktil inmatning, redigera den stavning som Dialogflow föreslår.

*** Hur ställer vi följdfrågor på de fem obligatoriska parametrarna på ett naturligt sätt?
Dialogflow kan genom s.k. Slottfilling, nativt genomföra följdfrågor, fast bara EN saknad parameter åt gången; “Vad heter du i förnamn?” och “Vilken organisation kommer du från?” -mycket krystat. Vi lyckades hantera detta genom att i vår applikation hjälpa konversationen på traven med sammansatta frågor utifrån hur konversationen löper; “Vad heter du i förnamn och vilken organisation kommer du ifrån?”. Våra fem parametrar kan saknas på drygt trettio olika sätt (delpermutationer). Vi löste detta genom att behandla vissa delpermutationer i kod, utanför Dialogflow. Med bra resultat.

Jag tar bl.a med mig att jag, förutom programmering i Java för Android, har fördjupat mina färdigheter i en AI-driven röststyrd assistent, chatbot, ansiktsdetektering och -identifiering. Tekniker som kommer att möta ökad efterfrågan, tror jag. Dessutom är detta förhoppningsvis extra fördelaktigt i mitt CV, eftersom chatagenter utvecklade i Googles Dialogflow kan användas av Google Assistant samt att Google Assistan, under innevarande år, förväntas få stöd för svenska språket. Detta torde i sin tur öppnar stort för efterfrågan på röstdrivna lösningar inom AI och IoT på den Svenska marknaden!

Tack Cybercom för en mycket givande praktikperiod!