Datasyn anses å være et AI-komplett problem. Med andre ord, å løse det ville tilsvare å skape et program som er så smart som mennesker. Det er unødvendig å si at et slikt program ennå ikke skal opprettes. Men hvis du noen gang har brukt apper som Google Goggles eller Google Photos, eller så på segmentet på Google Lens i hovedinngangen til Google I / O 2017, forstår du sannsynligvis at datasynet har blitt veldig kraftig..
Gjennom en REST-basert API kalles Cloud Vision API, deler Google sin revolusjonerende visjonsrelaterte teknologier med alle utviklere. Ved å bruke API, kan du enkelt legge til imponerende funksjoner som ansiktsgjenkjenning, følelsesdeteksjon og optisk tegngjenkjenning til Android-appene dine. I denne veiledningen vil jeg vise deg hvordan.
For å kunne følge denne opplæringen må du ha:
Hvis noen av de ovennevnte kravene høres ukjent for deg, foreslår jeg at du leser følgende introduksjonsveiledning om Google Cloud Machine Learning-plattformen:
Du kan bruke Cloud Vision API i Android-appen din først etter at du har aktivert den i Google Cloud-konsollen og oppnådd en gyldig API-nøkkel. Så start med å logge inn på konsollen og navigere til API Manager> Bibliotek> Vision API. På siden som åpnes, trykk bare på Aktiver knapp.
Hvis du allerede har generert en API-nøkkel for Cloud-konsollprosjektet, kan du hoppe over til neste trinn fordi du vil kunne bruke den på nytt med Cloud Vision API. Ellers åpner du legitimasjon fanen og velg Opprett legitimasjon> API-nøkkel.
I dialogboksen som dukker opp, ser du API-nøkkelen din.
Som de fleste andre APIer som tilbys av Google, kan Cloud Vision API nås ved hjelp av Google API Client-biblioteket. For å bruke biblioteket i Android Studio-prosjektet, legg til følgende kompilere
avhengigheter i app
modulens build.gradle fil:
kompilere 'com.google.api-client: google-api-client-android: 1.22.0' compile 'com.google.apis: google-api-services-visjon: v1-rev357-1.22.0' compile 'com. google.code.findbugs: JSR305: 2.0.1'
Videre for å forenkle fil I / O-operasjoner, foreslår jeg at du også legger til en kompilere
avhengighet for Apache Commons IO biblioteket.
kompilere 'commons-io: commons-io: 2,5'
Fordi Google API-klienten kan fungere bare hvis appen din har INTERNETT
tillatelse, sørg for at følgende linje er tilstede i prosjektets manifestfil:
Du må konfigurere Google API-klienten før du bruker den til å samhandle med Cloud Vision API. Dette gjør primært med å spesifisere API-nøkkelen, HTTP-transporten og JSON-fabrikken den skal bruke. Som du kanskje forventer, er HTTP-transporten ansvarlig for kommunikasjon med Googles servere, og JSON-fabrikken vil blant annet være ansvarlig for å konvertere de JSON-baserte resultatene API genererer i Java-objekter.
For moderne Android-apper anbefaler Google at du bruker NetHttpTransport
klassen som HTTP-transport og AndroidJsonFactory
klasse som JSON fabrikk.
De Syn
klassen representerer Google API-klienten for Cloud Vision. Selv om det er mulig å lage en forekomst av klassen ved hjelp av sin konstruktør, gjør det ved å bruke Vision.Builder
Klassen i stedet er enklere og mer fleksibel.
Mens du bruker Vision.Builder
klasse, må du huske å ringe setVisionRequestInitializer ()
Metode for å angi API-nøkkelen din. Følgende kode viser deg hvordan:
Vision.Builder visionBuilder = ny Vision.Builder (ny NetHttpTransport (), ny AndroidJsonFactory (), null); visionBuilder.setVisionRequestInitializer (ny VisionRequestInitializer ("YOUR_API_KEY"));
Først når Vision.Builder
forekomsten er klar, du kan ringe den bygge()
metode for å generere en ny Syn
eksempel du kan bruke i hele appen din.
Visjon visjon = visionBuilder.build ();
På dette tidspunktet har du alt du trenger for å begynne å bruke Cloud Vision API.
Detektering av ansikter i fotografier er et meget vanlig krav i datamaskinselaterte applikasjoner. Med Cloud Vision API kan du opprette en svært nøyaktig ansiktsdetektor som også kan identifisere følelser, lysforhold og ansiktsmiljøer.
For demonstrasjons skyld kjører vi ansiktsgjenkjenning på følgende bilde, som inneholder besetningen til Apollo 9:
Jeg foreslår at du laster ned en høyoppløselig versjon av bildet fra Wikimedia Commons og legger det i prosjektets res / rå mappe.
Cloud Vision API forventer at inngangsbildet blir kodet som en Base64-streng som er plassert i en Bilde
gjenstand. Før du genererer et slikt objekt, må du imidlertid konvertere bildet du lastet ned, som for tiden er en rå bilderessurs, til en byte
array. Du kan raskt gjøre det ved å åpne inngangsstrømmen ved hjelp av openRawResource ()
metode av ressurser
klasse og passerer den til toByteArray ()
metode av IOUtils
klasse.
Fordi fil I / O-operasjoner ikke skal kjøres på brukergrensesnittet, må du sørge for at du får en ny tråd før du åpner inngangsstrømmen. Følgende kode viser deg hvordan:
// Opprett ny tråd AsyncTask.execute (ny Runnable () @Override public void run () // Konverter bilde til byte array InputStream inputStream = getResources (). OpenRawResource (R.raw.photo); byte [] photoData = IOUtils.toByteArray (inputStream); inputStream.close (); // Mer kode her);
Du kan nå opprette en Bilde
objekt ved å ringe sin standard konstruktør. For å legge til byte
array til den som en Base64-streng, alt du trenger å gjøre er å passere arrayet til det encodeContent ()
metode.
Bilde inputImage = nytt bilde (); inputImage.encodeContent (photoData);
Fordi Cloud Vision API inneholder flere forskjellige funksjoner, må du spesifikt spesifisere funksjonen du er interessert i mens du gjør en forespørsel. For å gjøre dette må du opprette en Trekk
objekt og ring det setType ()
metode. Følgende kode viser hvordan du lager en Trekk
bare motstand for ansiktsgjenkjenning:
Funksjon desiredFeature = ny funksjon (); desiredFeature.setType ( "FACE_DETECTION");
Bruker Bilde
og Trekk
Objekter, du kan nå komponere en AnnotateImageRequest
forekomst.
AnnotateImageRequest request = ny AnnotateImageRequest (); request.setImage (inputImage); request.setFeatures (Arrays.asList (desiredFeature));
Legg merke til at en AnnotateImageRequest
objekt må alltid tilhøre a BatchAnnotateImagesRequest
objekt fordi API for Cloud Vision er designet for å behandle flere bilder samtidig. For å initialisere en BatchAnnotateImagesRequest
forekomst som inneholder en enkelt AnnotateImageRequest
objekt, kan du bruke Arrays.asList ()
verktøymetode.
BatchAnnotateImagesRequest batchRequest = new BatchAnnotateImagesRequest (); batchRequest.setRequests (Arrays.asList (request));
For å faktisk gjøre ansiktsgjenkjenningsforespørselen, må du ringe henrette()
metode av en Kommenter
objekt som er initialisert ved hjelp av BatchAnnotateImagesRequest
Motta deg nettopp opprettet. For å generere et slikt objekt må du ringe merknader ()
Metode som tilbys av Google API-klienten for Cloud Vision. Dette er hvordan:
BatchAnnotateImagesResponse batchResponse = vision.images (). Annotate (batchRequest) .execute ();
Når forespørselen er behandlet, får du en BatchAnnotateImagesResponse
objekt som inneholder svaret fra API-en. For en ansiktsdeteksjonsforespørsel inneholder svaret a FaceAnnotation
objekt for hvert ansikt API har oppdaget. Du kan få en liste over alle FaceAnnotation
objekter som bruker getFaceAnnotations ()
metode.
Listeansikter = batchResponse.getResponses () .get (0) .getFaceAnnotations ();
EN FaceAnnotation
objekt inneholder mye nyttig informasjon om et ansikt, for eksempel dets plassering, dets vinkel og følelsene den uttrykker. Fra versjon 1 kan API bare oppdage følgende følelser: glede, sorg, sinne og overraskelse.
For å holde denne opplæringen kort, la oss nå bare vise følgende informasjon i en Skål
:
Du kan selvfølgelig få tellingen av ansiktene ved å ringe størrelse()
metode av Liste
inneholder FaceAnnotation
objekter. For å få sannsynligheten for at et ansikt uttrykker glede, kan du ringe det intuitivt navngitte getJoyLikelihood ()
metode for den tilknyttede FaceAnnotation
gjenstand.
Merk at fordi en enkel Skål
kan bare vise en enkelt streng, du må sammenkalle alle de ovennevnte detaljene. I tillegg a Skål
Kan bare vises fra brukergrensesnittet, så sørg for at du ringer det etter at du har ringt til runOnUiThread ()
metode. Følgende kode viser deg hvordan:
// Antall ansikter int numberOfFaces = faces.size (); // Få glede sannhet for hvert ansikt String sannsynlighet = ""; for (int i = 0; iDu kan nå gå videre og kjøre appen for å se følgende resultat:
5. Lesing av tekst
Prosessen med å trekke ut strenger fra bilder av tekst kalles optisk tegngjenkjenning, eller OCR for kort. Cloud Vision API lar deg enkelt lage en optisk tegnleser som kan håndtere bilder av både trykt og håndskrevet tekst. Dessuten vil leseren du lager, ikke ha problemer med å lese vinklet tekst eller tekst som er lagt på et fargerikt bilde.
API gir to forskjellige funksjoner for OCR:
TEXT_DETECTION
, for å lese små mengder tekst, for eksempel det som er tilstede på skilt eller bokomslag- og
DOCUMENT_TEXT_DETECTION
, for å lese store mengder tekst, for eksempel det som er tilstede på sidene til en romanTrinnene du må følge for å lage en OCR-forespørsel, er identiske med trinnene du fulgte for å foreta en ansiktsdeteksjonsforespørsel, unntatt hvordan du initialiserer
Trekk
gjenstand. For OCR må du sette sin type til entenTEXT_DETECTION
ellerDOCUMENT_TEXT_DETECTION
. For nå, la oss gå med den tidligere.Funksjon desiredFeature = ny funksjon (); desiredFeature.setType ( "TEXT_DETECTION");Du må selvfølgelig også legge inn et bilde som inneholder tekst inni prosjektet ditt res / rå mappe. Hvis du ikke har et slikt bilde, kan du bruke denne, som viser et gateskilt:
Du kan laste ned en høyoppløselig versjon av bildet ovenfor fra Wikimedia Commons.
For å begynne å behandle resultatene av en OCR-operasjon, etter at du har oppnådd
BatchAnnotateImagesResponse
objekt, må du ringegetFullTextAnnotation ()
metode for å få enTextAnnotation
objekt som inneholder all utvunnet tekst.Endelig TextAnnotation text = batchResponse.getResponses () .get (0) .getFullTextAnnotation ();Du kan da ringe til
GetText ()
metode avTextAnnotation
motsette seg faktisk å få en referanse til en streng som inneholder den ekstraherte teksten.Følgende kode viser hvordan du viser den uttrukne teksten ved hjelp av a
Skål
:Toast.makeText (getApplicationContext (), text.getText (), Toast.LENGTH_LONG) .show ();Hvis du kjører appen din nå, bør du se noe slikt:
Konklusjon
I denne opplæringen lærte du hvordan du bruker Cloud Vision API for å legge til ansiktsgjenkjenning, følelsesdeteksjon og muligheter for optisk tegngjenkjenning til Android-appene dine. Jeg er sikker på at du er enig med meg når jeg sier at disse nye funksjonene vil tillate at appene dine tilbyr mer intuitive og smartere brukergrensesnitt.
Det er verdt å nevne at det er en viktig funksjon som mangler i Cloud Vision API: ansiktsgjenkjenning. I sin nåværende form kan API bare oppdage ansikter, ikke identifisere dem.
For å lære mer om API, kan du se den offisielle dokumentasjonen.
Og i mellomtiden, sjekk ut noen av våre andre opplæringsprogrammer når du legger til datamaskinlæring i Android-appene dine!