7) Ett fiktivt uppdrag

I följande lektioner lär du dig hur man kan skapa AI-appar.

Vi tittar på en app för att bestämma hundraser, hur en utvecklingsmiljö kan installeras och hur appen kan byggas och köras på din maskin.

De två sista lektionerna är bonuslektioner men jag rekommenderar att du studerar dom ändå. Bara för att se att det inte är alltför svårt.

Om du är nördigt lagd gör övningarna i bonuslektionerna.

OBS: Jag förstår att du kanske tycker att de här lektionerna är svåra. Men ge inte upp nu! Efter de här lektionerna blir det lättare!

I den här lektionen låtsas vi att du är en IT-konsult och att du har fått ditt första uppdrag inom AI: Att utveckla en app som utgående från en bild av en hund kan bestämma hundrasen.

Förutsättningar

Kraven från kunden är att appen bara behöver vara en prototyp. Kunden kan själv snygga till appen.

Däremot måste resten vara klart: Klassificeringen (vilken hundras) måste vara bra och det ska vara lätt att få in nya bilder till appen.

Hur ska du nu göra appen?

Appen image från lektion 5 kan vara en bra start. Appen använder MobileNet som modell och med ImageNet som dataset.

Det finns 118 klasser för hundar (olika hundraser). Det kanske räcker?

Appen image klassificerar tre bilder och är sedan klar – det är för dåligt.

Du måste utöka appen så att:

  1. Användaren kopierar en bild på en hund från Internet. Sedan klistrar användaren in bilden i appen.
  2. Och klickar sedan på knappen Klassificera för att få ett resultat.
  3. Resultatet måste vara synligt och inte via Javascript-konsolen som för appen image.

Videon överst på sidan visar hur den färdiga appen kan användas.

”Klistra in” (paste) är ganska nytt för webbappar så din webbläsare måste vara uppdaterad (ny) för att det ska funka.

”Klistra in” funkar inte för webbläsaren Firefox.

Den färdig appen imagecp

Vi kallar appen imagecp. Så här ser den ut när den är klar:

index.html

HTML-koden (index.html) definierar vilka element (knappar/button, text, bild osv) som ska finnas i appen. Den talar också om vilken Javascript-fil som ska användas.

Det här är HTML-koden:

index.js

index.js innehåller programkoden till appen. Programspråket är Javascript.

I index.js finns logiken i appen. Den bestämmer till exempel vad som ska hända när du trycker på en knapp.

Javascript-koden (index.js) ser ut så här:

Kommentarer:
  1. När användaren trycker på knappen Klassificera så körs funktionen predict()
  2. När användaren har klistrat in så körs funktionen pastedImage()
  3. Knappen Klassificera (predict) går inte att trycka på innan modellen är laddad. Knappen är ’disabled’. Blir ’enabled’ i funktionen loadModel().
  4. Resultatet av klassificeringen läggs i fältet results.
  5. Funktionen pastedImage() anropas när användaren har klistrat in bilden. Funktionen plockar upp bilden och uppdaterar den synliga bilden med den inklistrade bilden. Lite krånglig kod.

Ramverk och modell

Det AI-ramverk som används i appen är TensorFlow.js som är en avknoppning av TensorFlow. TensorFlow är det mest använda ramverket för AI (Deep Learning) och är skapat av Google. TensorFlow.js är en variant av TensorFlow där Javascript används som programmeringsspråk.

Modellen med tillhörande mjukvara beskrivs på https://github.com/tensorflow/tfjs-models/tree/master/mobilenet

Är kunden nöjd?

Du har testat appen med lite hundbilder och det verkar funka.

Du lämnar över appen till kunden och väntar på resultatet.

Jag gissar att kunden kanske anmärker på några saker:

  • Rasens namn är på engelska. Kunden vill ha svenska namn.
  • Kunden vill att bara bilder av hundar ska accepteras av appen.
  • För några raser blir det fel resultat.
  • Kunden vill ha ytterligare raser.

Hundraser på svenska

Bilderna i ImageNet användes för att träna MobileNet som vår app använder.

Det är alltså ImageNet som bestämmer vilka hundraser (klasser) som vår app klarar.

Hundraserna i ImageNet finns med index från 151 (’Chihuahua’) till och med 268 (’Mexican hairless’).

Alltså 118 raser.

Tyvärr ger model.classify() som vi använder inte index (klassnummer) utan bara texten för klassen t.ex. ’Mexican hairless’.

Vi kan (med hjälp av hundexperter) bygga en översättningstabell engelskt namn -> svenskt namn. På så vis kan vi få det svenska namnet från det engelska. Blir en del jobb.

Bara hundar

Om vi inte hittar det engelska namnet i vår översättningstabell så är klassen inte en hundklass och vi ger resultatet ”Det här är inte en hund”.

Bättre resultat för några raser samt ytterligare raser

I båda fallen måste vi träna modellen med mer bilder. Träning ingår inte i den här kursen men vi kan göra så här:

  • Vi behöver mer bilder för raserna med dåliga resultat eller för nya raser. Kanske kunden kan bidra? Så många bilder som möjligt.
  • Vi sätter rätt etikett på bilderna (klassnumret för rasen). De nya raserna får nya klassnummer.
  • Åtminstone om nya raser tillkommer måste modellen modifieras.
  • Modellen tränas med de nya bilderna.

Summering

I den här lektionen har du bekantat dig med en mer lättanvänd app där vi använder kopiera och klistra för att få nya bilder.

Vi tittade också på förbättringar av appen.

I nästa lektion får du lära dig lite mera om Javascript.

<< Bakåt Framåt >>