Komme i gang med Firebase ML Kit for Android

Takket være TensorFlow Mobile og TensorFlow Lite, har det blitt veldig enkelt å legge inn dype modeller i Android-applikasjoner. Imidlertid krever design og opplæring av modellene fortsatt mye ferdighet, tid og innsats, for ikke å nevne datakraft. Av denne grunn er de fleste uformelle utviklere unenthusiastic om å legge til maskinlæringsmuligheter til sine apper. Med Firebase ML Kit håper Google å endre det.

Firebase ML Kit er et bibliotek som lar deg enkelt og med minimal kode, bruke en rekke svært nøyaktige, forhåndsutdannede dype modeller i Android-appene dine. De fleste modellene den tilbyr er tilgjengelige både lokalt og på Google Cloud.

Foreløpig er modellene begrenset til kun datasyn relaterte oppgaver, for eksempel optisk tegngjenkjenning, strekkodeskanning og objektdeteksjon.

I denne opplæringen skal jeg vise deg hvordan du legger til Firebase ML Kit til et Android Studio-prosjekt, og bruk noen av de grunnleggende API-ene.

Forutsetninger

Før du går videre, må du kontrollere at du har tilgang til følgende:

  • den nyeste versjonen av Android Studio
  • En enhet eller emulator som kjører Android API nivå 21 eller høyere
  • en Firebase-konto
  • en Google Cloud-konto

1. Lag et Firebase-prosjekt

For å aktivere Firebase-tjenester for appen din må du opprette et Firebase-prosjekt for det. Så logg inn i Firebase-konsollen, og velg på velkomstskjermbildet Legg til prosjekt knapp.


I dialogboksen som dukker opp, gi prosjektet et navn som er lett å huske og trykk på Opprett prosjekt knapp.


Etter flere sekunder bør du se et varsel som forteller deg at det nye prosjektet er klart. trykk Fortsette knappen for å fortsette.

På neste skjermbilde, gå til Utvikle delen og klikk på ML Kit lenke for å se alle tjenestene ML Kit tilbyr.

I denne opplæringen bruker vi tre tjenester: tekstgjenkjenning, ansiktsgjenkjenning og bildemerking. Du trenger ikke å gjøre noe for å eksplisitt aktivere dem hvis du har tenkt å jobbe med bare de lokale modellene som følger med ML Kit. I denne opplæringen bruker vi imidlertid både lokale og skybaserte modeller. Så klikk på Cloud API bruk lenke neste.

Du blir nå tatt til Google Cloud-konsollen, der du bare kan trykke på Aktiver knappen som vises i Cloud Vision API-delen for å aktivere de skybaserte modellene. Vær oppmerksom på at dette bare vil fungere hvis du har fakturering aktivert for Google Cloud-kontoen din.

2. Konfigurer ditt Android Studio-prosjekt

Før du begynner å bruke Firebase ML Kit-APIer, må du etablere en forbindelse mellom Android Studio-prosjektet og Firebase-prosjektet du opprettet i forrige trinn. For å gjøre det, åpner du Firebase Assistant-panelet ved å gå til Verktøy> Brannbase.

Firebase Assistant har ingen støtte for ML Kit i øyeblikket. Likevel, ved å bruke den til å legge til Firebase Analytics i stedet, kan du likevel unngå å opprette tilkoblingen manuelt. Utvider derfor Analytics delen, klikk på Logg på en Analytics-hendelse lenke, og trykk på Koble til Firebase knapp.

I dialogboksen som dukker opp, må du kontrollere at du velger Velg et eksisterende Firebase- eller Google-prosjekt alternativet og velg Firebase-prosjektet du opprettet.

trykk Koble til Firebase knappen neste. På dette tidspunktet vil assistenten automatisk laste ned en google-services.json fil, inneholder API-nøkler og prosjekt-IDer, og legg den til i app modul.

Når tilkoblingen er etablert, må du passe på at du trykker på Legg til Analytics i appen din knappen for å legge til ulike kjernevirksomhetsavhengigheter til din app modulens build.gradle fil.

For å legge til ML Kit-biblioteket, åpne deretter build.gradle fil og skriv inn følgende gjennomføring avhengigheter:

implementering 'com.google.firebase: firebase-ml-vision: 16.0.0' implementering 'com.google.firebase: firebase-ml-vision-image-label-modell: 15.0.0'

For å forenkle prosessen med å laste ned bilder fra Internett og vise dem i appen din, foreslår jeg at du også legger til en avhengighet for Picasso-biblioteket.

implementering 'com.squareup.picasso: picasso: 2.5.2'

I tillegg legger du til Anko som en avhengighet for å sørge for at Kotlin-koden er både konsis og intuitiv.

implementering 'org.jetbrains.anko: anko-commons: 0.10.5'

Firebase ML Kit's lokale modeller lastes som standard automatisk ned til brukerens enheter bare når det er nødvendig. Hvis du vil at de skal lastes ned så snart appen din er installert, legger du til følgende kode i AndroidManifest.xml fil:

3. Definer en layout

I denne opplæringen lager vi en app som lar brukerne skrive inn nettadresser til bilder og utføre tekstgjenkjenning, ansiktsgjenkjenning og bildemerking på dem. Derfor må oppsettet til appen ha en EditText widget, der brukerne kan skrive inn nettadressene og tre Knapp widgets, som lar dem velge hvilken operasjon de vil utføre. 

Eventuelt kan du inkludere en Imageview widget for å vise bildene.

Hvis du plasserer alle ovennevnte widgets ved hjelp av en RelativeLayout Widget, din layout-XML-fil burde like dette:

     

Her er en mer visuell fremstilling av oppsettet:

I XML ovenfor kan du ha lagt merke til at hver knapp har en ved trykk attributt som peker på en metode for håndtering av hendelser på klikk. Disse metodene eksisterer ikke ennå, så lag dem inn i aktiviteten din nå.

morsom gjenkjenningText (v: Vis) // For å gjøre fun detectFaces (v: View) // For å gjøre morsom generasjonLabels (v: View) // For å gjøre

4. Legg inn et bilde

Når brukeren trykker på Ferdig nøkkel etter at du har skrevet et bilde URL til EditText widget, vår app må laste ned bildet og vise det inni Imageview widget.

For å oppdage handlinger utført på brukerens virtuelle tastatur assosierer du en OnEditorActionListener objekt med EditText widget. Innenfor lytteren, etter å ha bekreftet at IME_ACTION_DONE Handlingen ble utført, du kan bare ringe til Picassos laste() og inn i() metoder for å laste og vise bildet henholdsvis.

Følgelig legger du til følgende kode inne i onCreate () Metode for aktiviteten din:

image_url_field.setOnEditorActionListener _, action, _ -> hvis (handling == EditorInfo.IME_ACTION_DONE) Picasso.with (ctx) .load (image_url_field.text.toString ()) .into (image_holder) true false

5. Gjenkjenne tekst

Firebase ML Kit har separate detektorklasser for alle de ulike bildegenkjenningsoperasjonene som tilbys. For å gjenkjenne tekst må du enten bruke FirebaseVisionTextDetector klassen, som avhenger av en lokal modell, eller bruk FirebaseVisionCloudTextDetector klassen, som avhenger av en skybasert modell. For nå, la oss bruke den tidligere. Det er langt raskere, men det kan bare håndtere tekst skrevet i det latinske alfabetet.

En ML Kit detektor forventer at inngangen skal være i form av a FirebaseVisionImage gjenstand. For å opprette et slikt objekt, er alt du trenger å gjøre å ringe fromBitmap () bruksmetode av FirebaseVisionImage klasse og passere en bitmap til den. Følgende kode, som må legges til i recognizeText () Event Handler vi opprettet tidligere, viser deg hvordan du konverterer bildet som vises i layoutet Imageview widget i en bitmap, og opprett deretter en FirebaseVisionImage motsette seg det:

val textImage = FirebaseVisionImage.fromBitmap ((image_holder.drawable som BitmapDrawable) .bitmap)

Neste, for å få en referanse til a FirebaseVisionTextDetector objekt, du må bruke en FirebaseVision forekomst.

val detector = FirebaseVision.getInstance (). visionTextDetector

Du kan nå starte tekstgjenkjenningsprosessen ved å ringe detectInImage () metode og passerer FirebaseVisionImage protestere mot det. Fordi metoden går asynkront, returnerer den a Oppgave gjenstand. Derfor, for å kunne behandle resultatet når det er tilgjengelig, må du legge ved en OnCompleteListener eksempel på det. Dette er hvordan:

detector.detectInImage (textImage) .addOnCompleteListener // Mer kode her

Innenfor lytteren har du tilgang til en liste over Blokkere objekter. Generelt kan hver blokk betraktes som et eget avsnitt oppdaget i bildet. Ved å ta en titt på tekst egenskaper av alle Blokkere objekter, kan du bestemme all tekst som har blitt oppdaget. Følgende kode viser hvordan du gjør det:

var detectedText = "" it.result.blocks.forEach detectedText + = it.text + "\ n"

Hvordan du bruker den oppdagede teksten, er selvfølgelig opp til deg. For nå, la oss bare vise det ved hjelp av en varslingsdialog. Takk til Ankos varsling() funksjon, det tar veldig liten kode.

runOnUiThread alert (detectedText, "Text"). show ()

I ovennevnte kode, den runOnUiThread () metode sikrer at varsling() funksjonen kjøres på hovedtråden i applikasjonen.

Til slutt, når du er ferdig med å bruke detektoren, må du huske å ringe den Lukk() metode for å frigjøre alle ressursene den har.

detector.close ()

Hvis du kjører appen nå, skriver du inn nettadressen til et bilde som inneholder mye tekst, og trykker på Tekst knappen, bør du kunne se ML Kits tekstgjenkjenningsservice i aksjon.

ML Kit's lokale modell for tekstgjenkjenning er rimelig nøyaktig med de fleste typer trykt tekst.

6. Oppdag ansikter

Selv om de ikke deler noe felles grensesnitt på høyt nivå, har de fleste av detektorklassene identiske metoder. Det betyr at detektere ansikter i et bilde ikke er så annerledes enn å gjenkjenne tekst. Vær imidlertid oppmerksom på at ML Kit for øyeblikket kun tilbyr en lokal modell for ansiktsgjenkjenning, som kan nås med FirebaseVisionFaceDetector klasse. Du kan få en referanse til en forekomst av den ved hjelp av FirebaseVision klasse.

Legg til følgende kode i detectFaces () metode:

val detector = FirebaseVision.getInstance (). visionFaceDetector

Ved å ringe detectInImage () metode igjen og overlater en bitmap til det, kan du starte ansiktsgjenkjenningsprosessen asynkront. Ved å bruke en OnCompleteListener eksempel knyttet til Oppgave objekt det returnerer, kan du enkelt vite når prosessen er fullført.

detector.detectInImage (FirebaseVisionImage.fromBitmap ((image_holder.drawable som BitmapDrawable) .bitmap)). addOnCompleteListener // Mer kode her

Innenfor lytteren har du tilgang til en liste over FirebaseVisionFace objekter som inneholder koordinatene til rektangler som omkranser de oppdagede ansikter. Så la oss nå tegne disse rektanglene over en kopi av det opprinnelige bildet som ble behandlet.

Hvis du vil lage en kopi av det originale bildens bitmap, må du bruke det kopiere() metode som vist nedenfor:

var markedBitmap = (image_holder.drawable som BitmapDrawable) .bitmap .copy (Bitmap.Config.ARGB_8888, true)

For å kunne tegne på den nye bitmappen må du opprette Lerret og Maling gjenstander for det. Å bruke en litt gjennomsiktig farge for rektanglene ville være ideell.

val lerret = lerret (merketBitmap) valmaling = Maling (Paint.ANTI_ALIAS_FLAG) paint.color = Color.parseColor ("# 99003399") // halv gjennomsiktig blå

På dette punktet kan du bare gå gjennom listen over FirebaseVisionFace objekter og bruk deres boundingBox Egenskaper for å tegne rektangler over de oppdagede ansikter.

it.result.forEach canvas.drawRect (it.boundingBox, paint)

Til slutt, ikke glem å passere den nye bitmappen til Imageview widget når den er klar.

runOnUiThread image_holder.setImageBitmap (markedBitmap)

Hvis du kjører appen nå, bør du kunne utføre ansiktsgjenkjenning på ethvert bilde som har folk i det.

Jeg er sikker på at du vil bli imponert over hvor raskt og nøyaktig ML Kit er ansiktsgjenkjenningsoperasjoner.

7. Generer etiketter

For å generere etiketter for et bilde må du enten bruke den lokale modellbaserte FirebaseVisionLabelDetector klassen eller skyen modellbasert FirebaseVisionCloudLabelDetector klasse. Fordi vi bare har brukt lokale modeller gjennom denne opplæringen, la oss bruke skymodellen nå. For å få en referanse til en forekomst av FirebaseVisionCloudLabelDetector klasse, må du igjen bruke FirebaseVision klasse.

Legg til følgende kode i generateLabels () metode:

val detector = FirebaseVision.getInstance (). visionCloudLabelDetector

Neste, som vanlig, ring til detectInImage () metode og tilordne en OnCompleteListener eksempel på returverdi.

detector.detectInImage (FirebaseVisionImage.fromBitmap ((image_holder.drawable som BitmapDrawable) .bitmap)). addOnCompleteListener // Mer kode her

Denne gangen, inne i lytteren, får du tilgang til en liste over FirebaseVisionCloudLabel objekter, som hver har a merkelapp eiendom som inneholder en potensiell etikett for bildet. Hver etikett har også en tillit Eiendom knyttet til den, og angir hvorvidt ML Kit handler om etiketten.

Følgende kode viser hvordan du går gjennom listen over etiketter og genererer en varslingsdialog som bare viser de etikettene som har tillitsklasser over 70%.

var output = "" it.result.forEach if (it.confidence> 0.7) output + = it.label + "\ n" runOnUiThread alarm (utdata, "etiketter").

Gå videre og kjør appen igjen for å se hvilke etiketter appen din genererer for bildene du kaster på den.

Konklusjon

Med Firebase ML Kit ønsker Google å gjøre maskinlæring så tilgjengelig og vanlig som enklere oppgaver som analytikk og krasjrapportering. I denne innledende veiledningen lærte du hvordan du arbeider med noen av baseprogrammer i Android-apper. Du lærte også hvordan du bruker både skyen og de lokale modellene den tilbyr.

For å lære mer, se den offisielle dokumentasjonen.