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.
Før du går videre, må du kontrollere at du har tilgang til følgende:
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.
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:
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
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
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.
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.
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.
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.