Vision i iOS 11 har alt du trenger for å lage en app som kan gjenkjenne teksttegn med implementering som skjer samtidig. Du trenger ikke en teknisk kodingskunnskap - det er ganske enkelt å navigere i funksjonen. Dessuten er implementeringen sømløs.
Visjonsrammeverk
Visjonsrammeverket lar deg enkelt implementere enhver oppgave som involverer datamaskindetaljer. Strukturen utfører gjenkjenning av ansikts- og ansiktslandemerker, strekkodegjenkjenning, bilderegistrering, generell funksjonssporing og tekstgjenkjenning. Vision lar deg også bruke tilpassede Core ML-modeller for oppgaver som klassifisering eller objektdeteksjon.
VN DetectTextRectanglesRequest
De VN DetectTextRectanglesRequest er en bildeanalyseforespørsel som finner områder med synlig tekst i et bilde; funksjonen returnerer teksttegn som en rektangulær avgrensningsramme med opprinnelse og størrelse.
Hvis du er vant til å bruke swift og har programmert en stund, så lurer du sannsynligvis på hva nytten av Vision er når det er andre funksjoner som image og AVFoundation. Vel, Vision er mer nøyaktig og mer grei. Funksjonen er også tilgjengelig på en rekke plattformer. Bruk av Vision kan imidlertid kreve mer prosessorkraft og behandlingstid.
For å bruke Vision for tekstgjenkjenning, trenger du Xcode 9 og en enhet som kjører iOS 11.
Opprette et kamera med Avcapture
Først må du lage et kamera med AVCapture; dette er ved å initialisere ett objekt AVcapturesession for å utføre sanntid eller offline fangst. Etter det gjør du økten til enhetstilkoblingen.
For å spare tid fra å bygge et brukergrensesnitt for appen din, bør du vurdere å ha et startprosjekt. Til å begynne med vil dette gi deg tid til å fokusere på å lære Vision-rammeverket.
- Åpne startprosjektet ditt. Visningene i storyboardet skal være klare og konfigurert for deg.
- På ViewController.swift, se etter kodedelen med funksjoner og uttak.
- Under stikkontakten-ImageView, derklære en økt for AVcapturesession – dette brukes når du vil at handlinger skal utføres basert på en direktestrøm.
- Sett AVcapturesession og AV-medietype til video siden du vil utføre kameraopptaket for å la det kjøre kontinuerlig
- Definer utdata- og inngangsenheten
- Inngangen er det kameraet vil se, og utgangen er videoen i et bestemt type format KCVPixelFormatType_32GRA.
- Til slutt legger du til en underlag som inneholder videoer til imageView og start økten. Funksjonen er kjent som inViewdidload. Du må også angi rammen til laget.
Ring opp funksjonen i viewWillVise metode.
Siden grensene ikke er endelige ennå, overstyr viewDidLayoutSubviews ( ) metode for å oppdatere lagene bundet.
Etter utgivelsen av iOS 10 er det nødvendig med en ekstra oppføring i Info.plist, dette gir en grunn til å bruke kameraet. Du bør også angi Privacy-Camera Usage Description.
Tekstgjenkjenning; Hvordan Vision Framework fungerer
Det er tre trinn for å implementere Vision på appen.
- Håndtere – dette er når du vil at rammeverket skal gjøre noe etter at forespørselen er kalt.
- Observasjoner – dette er hva du vil gjøre med dataene du har oppgitt, og begynner med én forespørsel
- Forespørsler - dette er når du ber om Detect framework
Ideelt sett oppretter du én tekstforespørsel som VNdetecttextrectanglesrequest. Dette er en slags VNrequest som grenser rundt teksten. Etter at rammeverket har fullført søknaden, fortsetter du å ringe til Detteksthandler funksjon. Du vil også vite den nøyaktige rammen som ble gjenkjent, sett den til Rapportkarakterbokser=Sant.
Deretter definerer du observasjonene som inneholder alle resultatene av VNdetecttextrectanglesrequest, husk å legge til Vision til utgangskameraet. Siden Vision avslører API-er på høyt nivå, er det sikkert å jobbe med det.
Funksjonen sjekker om Cmsamplebuffer eksisterer og PutOut Avcaptureoutput. Du bør deretter fortsette å lage én variabel Forespørsler som 1 ordboktype VNimageoption. De VNmage alternativet er en type struktur som inneholder egenskaper og data fra kameraet. Du bør da lage VNimagerequesthandler og utfør tekstforespørselen.
Tegne grenser rundt den oppdagede teksten
Du kan starte med å ha rammeverket for å tegne to bokser, en for hver bokstav den oppdager og den andre for hvert ord. Tabeller er kombinasjonen av alle tegnboksene som forespørselen din vil finne.
- Definer punktene på visningen for å hjelpe deg med å plassere boksene.
- Etter det oppretter du en CALayer; bruk VNrektangelobservasjon å definere begrensningene dine, noe som gjør prosessen med å skissere boksen enklere.
Du har nå lagt ut alle funksjonene dine.
For å koble sammen prikkene dine, start med å la koden kjøre asynkront. Du bør deretter sjekke om det finnes en region i resultatene dine fra din VNTextObservation.
Du kan nå kalle inn funksjonen din, som vil tegne en boks innenfor området. Sjekk om det er tegnbokser i regionen, og ring deretter inn tjenesten som bringer inn en boks rundt hver bokstav.
Etter det, lag en variabel RequestOptions. Du kan nå opprette en VNImageRequestHandler objekt og utføre tekstforespørselen du opprettet.
Til slutt er det siste trinnet å kjøre visjonskoden din med direktesendingen. Du må ta videoutgangen og konvertere den til Cmsamplebuffer.
Ytterligere tips
- Prøv alltid å beskjære bildet og behandle bare delen du trenger. Dette vil redusere behandlingstiden og minneavtrykket
- Slå på språkkorrigering når du arbeider med ikke-numeriske tegn, og slå den av når du arbeider med et numerisk tegn
- Inkluder validering for gjenkjente tallstrenger for å bekrefte nøyaktigheten og eliminere visning av falsk verdi til brukeren.
- Dokumentkamerakontrolleren er den beste følgesvennen for tekstgjenkjenning siden bildekvalitet spiller en betydelig rolle i tekstgjenkjenning.
- Vurder å angi en minste teksthøyde for å øke ytelsen.
Med Vision har du alt du trenger for tekstgjenkjenning. Siden Vision er enkel å bruke og tar kort tid å implementere, tilsvarer det nesten å spille med Legos. Prøv å teste appen din på forskjellige objekter, fonter, belysning og størrelser. Du kan også imponere deg selv ved å kombinere Vision med Core ML.