Teachable Machine er et interessant verktøy fra Google, hvor en får en enkel tilnærming til maskinlæring. I TM bruker en lyd eller bilder til å bygge ens egne modeller og trene dem opp til å registrere ulike hendelser. I dette innlegget skal vi se litt på hvordan modeller opprettet i Teachable Machine kan brukes som et redskap sammen med ulike programmeringsverktøy.
Steg 1 – Opprette en modell i Teachable Machine
For å lage en modell og trene denne opp, går vi inn på https://teachablemachine.withgoogle.com/

Velg om du vil lage en modell som bruker lyd, bilde eller poseringsprosjekt. Tenk deretter hvor mange klasser eller kategorier du ønsker modellen skal inneholde. En klasse er det samme som en kategori med bilder eller lyder som hører sammen. F.eks. kan det være en klasse som inneholder bilder av deg selv, og en klasse som ikke har bilder av noe, mens en tredje klasse være andre mennesker.
Navngi klassene slik at de er unike og unngå bokstaver som æøå og spesialtegn.
Steg 2 – Trene modellen
Tren modellen ved å gjøre mange opptak av det som hører til i klassen. Skal du ha bilder av en gjenstand eller person i klassen, kan det være nyttig å ta bilder av gjenstanden eller personen fra ulike vinkler. Skal du bruke lyd, må du være nøye med å variere stemmen litt slik at den oppfatter ulike varianter.
Hvor mange bilder eller lyder du trenger, er ikke lett å si, men den trenger en del varianter for å bli god. Om du ønsker å klasser/kategorier av en gjenstand du ikke har, kan du finne bilder på internett og laste inn i modellen.
Det kan også være lurt å ha en «Annet» klasse som ikke er det en skal gjenkjenne.
Steg 3 – Test modellen
Når modellen er trent, må en teste ut modellen om den fungerer som den skal. Dette gjøres enkelt ved å teste de ulike klassene både med det de skal gjenkjenne og andre ting.

Du ser kvaliteten på modellen under Output. Om den ikke fungerer, må du trene den mer ved å legge inn flere bilder eller mer lyd den kan trenes med.
Steg 4 – eksporter modell
Når du er fornøyd med modellen er det på tide å eksportere den. Det kan gjøres på flere måter. Du kan laste den opp i skyen, og få en URL som du kan bruke i prosjektet ditt eller dele med andre. Eller du kan laste modellen ned, og gjenbruke den slik du ønsker i andre prosjekter.

Steg 5 – Alternativ 1: bruke modellen i Scratch
Det finnes flere varianter av Scratch, og Scratch sin AI Playground er tilgjengelig på https://playground.raise.mit.edu/create/ og har en del spennende verktøy for bruk av AI sammen med Scratch. Det har blant annet en mulighet for å bruke Teachable Machine sammen med Scratch.
Ved å legge til Teachable Machine fra tilleggene får vi noen ekstra blokker som vi kan bruke for å utnytte informasjonen som kommer fra modellen vi laget i steg 1-4.

Legg inn nettadressen du fikk fra Teachable Machine i den første blokken. Når modellen er lastet inn, vil du få tilgang til klassene og kan bruke dem for å initiere andre hendelser. I dette tilfellet skal den si hva som vises til kameraet.

Et enkelt lite program, men det fungerer!!
Her er det mange spennende muligheter, da du kan bruke alle de andre blokkene som allerede finnes i Scratch. Men husk at du ikke kan logge inn i AI Playground, slik at du må laste ned og lagre lokalt på maskinen din om du ønsker å ta vare på prosjektet ditt.
Steg 5 – Alternativ 2: bruke modellen med Microbit
Microbit har den senere tid fått mange spennende utvidelser. Blant kan en bruke standard tilkobling med USB fra Microbiten til PCen, og lese data som kommer fra f.eks. microbiten eller noe annet som er koblet til, direkte i nettleseren. Dette gjøres via et grensesnitt som kalles WebUSB.
Det er også dette grensesnittet vi skal bruke, når vi skal bruke modellen vi laget i WebUSB sammen med microbiten.
Vi starter med å koble til microbiten og starte opp MakeCode for Microbit via https://makecode.microbit.org Deretter kobler vi sammen microbiten og nettleseren via WebUSB grensesnittet. Dette gjøres ved å trykke på de tre knappene til høyre for nedlastingsknappen, og følge oppskriften.
Deretter legger vi inn litt kode som gjør det mulig å levere data utenfra inn på microbiten. Vi skal bruke noen blokkene vi finner i kategorien «Serieport».

Ved oppstart kobler vi microbiten til serieporten. For å vise at det gikk bra, viser vi et «Check» symbol. Deretter legger vi inn kode, som kjøres hver gang det kommer en ny linje sendt til microbiten. Denne linjen skal inneholde informasjon som forteller hvilken klasse som blir gjenkjent i modellen.
Last ned koden på microbiten. Vi får ikke testet den noe særlig enda, da vi trenger en kobling mellom modellen fra Teachable Machine og Microbiten. Denne koblingen skal vi opprette gjennom https://makeairobots.com
På denne nettsiden, så kan vi hoppe over steg 1 og 2, da vi allerede har laget modellen i Teachable Machine og kodet det vi trenger i MakeCode.
Vi oppretter koblingen mellom Teachable Machine og microbiten i steg 3. Legg inn nettadressen til modellen fra Teachable Machine. Sjekk at du får tilgang til kamera/mikrofon og trykk på «Ready».
Modellen lastes inn og du får tilgang til modellens resultater i samtid. Hver gang den ser noe nytt/hører noe nytt sender den en ny melding avgårde. Disse kan du se i meldingsloggen nede til høyre.

Om alt er gjort riktig skal microbiten reagere på meldingene som Teachable Machine sender.
NB! Om du endrer koden og laster ned koden på microbiten på nytt, må du gjenopprette koblingen på knappen oppe til høyre.
Muligheten med microbit og Teachable Machine er ganske store. En kan koble til eksterne motorer eller LED-lys og skape ganske mye spennende.
Steg 5 – Alternativ 3: bruke modellen med P5.js
P5.js, tilgjengelig fra https://p5.js, er en JavaScript variant som er laget for kreativ koding. Det har en del ferdigkodede objekter som gjør det lettere å skape visuelle objekter som geometriske former. P5.js har også støtte for å bruke modeller fra Teachable Machine.
NB! Det ligger et eksempel direkte for nedlasting på eksportsiden til Teachable Machine, men jeg har ikke fått den til å fungere tilfredsstillende. Derimot finnes flere andre eksempler på bruk av Teachable Machine sammen med P5.js, blant annet denne fra codingtrain: https://editor.p5js.org/codingtrain/sketches/PoZXqbu4v
I dette eksempelet må jeg kunne inn å gjøre noen små endringer for at det skal fungere med min modell.

Anbefaler likevel de som ønsker å arbeide med p5.js å sette seg inn i hvordan det fungerer først, og kanskje tilpasse koden enda mer til sine ønsker.