Text Recognition in apps — wat is het, OCR en Vision

Auteur: IT Sectr Gepubliceerd: 2026-07-18 Leestijd: 10 min

Text Recognition (OCR — Optical Character Recognition) — is de technologie om gedrukte of handgeschreven tekst uit afbeeldingen en videostreams te extraheren. In mobiele ontwikkeling wordt Text Recognition gebruikt voor het digitaliseren van documenten, het herkennen van kentekenplaten, het lezen van visitekaartjes en het realtime vertalen van tekst. De belangrijkste mobiele OCR-oplossingen: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (open-source). Volgens Google ML Kit, 2025 verwerkt Text Recognition V2 een frame in 10–30 ms met een nauwkeurigheid van 96% voor Latijns schrift en 91% voor Cyrillisch.

Belangrijkste punten

  • Text Recognition — tekst extraheren uit afbeeldingen en video (OCR)
  • ML Kit Text Recognition — 45+ talen, 96% nauwkeurigheid (Latijns), 10–30 ms
  • Apple Vision — VNRecognizeTextRequest, 13+ talen, native iOS
  • Tesseract — open-source OCR, 100+ talen, 50–200 ms, CPU
  • Real-time — tot 30 FPS met CameraX/AVFoundation op moderne apparaten

Wat is Text Recognition: OCR-principes

Text Recognition (OCR) — computer vision-proces dat een afbeelding van tekst omzet in machineleesbare tekens. OCR bestaat uit fasen: voorbewerking van de afbeelding (binarisatie, deskew, corrigeren van scheefstand), segmentatie (opsplitsen in regels, woorden, tekens), herkenning (classificatie van elk teken) en nabewerking (controleren met woordenboek, corrigeren van fouten). Moderne OCR-systemen (ML Kit, Vision) gebruiken end-to-end neurale netwerken die alle fasen combineren.

Soorten OCR: gedrukte tekst (printed text) — herkenning van machinaal geschreven tekst uit documenten, borden, schermen — nauwkeurigheid 95–99%; handgeschreven tekst (handwriting) — herkenning van handschrift — nauwkeurigheid 80–90% voor Latijns, 70–80% voor Cyrillisch; contexttekst (scene text) — tekst in natuurlijke scènes: huisnummers, verkeersborden, winkelnamen — het moeilijkst vanwege perspectivische vervormingen en reflecties.

CRNN + CTC Loss — architectuur gebruikt in moderne OCR-modellen. Convolutional Recurrent Neural Network (CNN + LSTM) extraheert kenmerken van de afbeelding, en Connectionist Temporal Classification decodeert de reeks tekens zonder voorafgaande segmentatie. CRNN werkt met teksten van elke lengte, is bestand tegen scheefstand en vervormingen. Volgens arXiv (2025) leveren CRNN-modellen 97.5% nauwkeurigheid op de ICDAR 2019 benchmark.

OCR-oplossingNauwkeurigheidSnelheidTalenPlatform
ML Kit V296%10–30 ms45+Android, iOS
Apple Vision95%10–40 ms13+iOS, macOS
Tesseract 590%50–200 ms100+Multiplatform
Google Cloud Vision98%500–1000 ms200+Server (API)

CRNN voor mobiele apparaten — ML Kit gebruikt het MobileNetV2 + CRNN-model met INT8-kwantificatie. Het model neemt 2–5 MB (latent) in beslag en wordt uitgevoerd op GPU/NPU via TFLite Delegate. In tegenstelling tot Tesseract (klassieke pipeline) heeft neuraal netwerk OCR geen aparte tekensegmentatie nodig en is het beter bestand tegen ruis. Nadeel: vereist GPU of NPU voor real-time — op pure CPU daalt de snelheid naar 5–10 FPS.

ML Kit Text Recognition op Android en iOS

ML Kit Text Recognition — het belangrijkste OCR-gereedschap voor mobiele apps. Beschikbaar in twee versies: V2 (Latin-based — geoptimaliseerd voor Latijns, Cyrillisch, cijfers) en V1 (Latin + CJK — Japans, Chinees, Koreaans, maar langzamer). V2 gebruikt een end-to-end CRNN-model, V1 — oudere CNN + LSTM. Google beveelt V2 aan voor alle gevallen behalve wanneer CJK-herkenning nodig is.

Structuur van het ML Kit-resultaat: Text → TextBlock → Line → Element (Word/Symbol). Elk niveau heeft een bounding box, confidence (0..1) en recognised text. Text — het hoofdobject met fullText (alle herkende tekst in één regel). TextBlock — een logisch tekstblok (alinea, kolom). Line — een tekstregel. Element — een woord of symbool. Gebruik confidence om onnauwkeurige herkenningen te filteren.

kotlin
// ML Kit Text Recognition V2
val recognizer = TextRecognition.getClient(
    TextRecognizerOptions.DEFAULT_OPTIONS
)

recognizer.process(inputImage)
    .addOnSuccessListener { text ->
        val fullText = text.text
        text.textBlocks.forEach { block ->
            val blockText = block.text
            val blockRect = block.boundingBox
            block.lines.forEach { line ->
                line.elements.forEach { element ->
                    val word = element.text
                    val confidence = element.confidence
                }
            }
        }
    }
    .addOnFailureListener { error -> /* error */ }

Text Recognition op iOS via ML Kit: API vergelijkbaar met Android, maar gebruikt UIImage/CVPixelBuffer in plaats van InputImage. ML Kit maakt automatisch gebruik van Apple Neural Engine op A12+ via Core ML Delegate. Voor iOS toont ML Kit Text Recognition V2 een snelheid van 15–30 ms op iPhone 15 Pro. Converteer UIImage naar CVPixelBuffer vóór verzending voor maximale prestaties — dit vermindert de conversie-overhead.

Apple Vision Framework: VNRecognizeTextRequest

Apple Vision Framework biedt native OCR via VNRecognizeTextRequest (iOS 13+). Vision OCR maakt gebruik van Apple Neural Engine (ANE) en heeft geen extra SDK's nodig. Ondersteunt 13 talen (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Vision detecteert automatisch de taal van de tekst (language correction) en ondersteunt meerdere talen in één frame. Snelheid — 10–40 ms op A16+.

Kenmerken van Vision OCR: recognitionLevel (fast vs accurate), automaticLanguageDetection, customWords (toevoegen van specifieke termen), ondersteuning voor top candidates (meerdere herkenningsvarianten voor onduidelijke tekst). Fast-modus geeft 90% nauwkeurigheid bij 10–20 ms, accurate — 95% bij 30–50 ms. Gebruik voor productie accurate met filtering op confidence >= 0.5.

swift
import Vision

let request = VNRecognizeTextRequest { request, error in
    guard let observations = request.results as? [VNRecognizedTextObservation] else { return }
    for observation in observations {
        let topCandidate = observation.topCandidates(1).first
        let text = topCandidate?.string ?? ""
        let confidence = topCandidate?.confidence ?? 0
        let boundingBox = observation.boundingBox
    }
}
request.recognitionLevel = .accurate
request.usesLanguageCorrection = true

let handler = VNImageRequestHandler(cgImage: cgImage, orientation: .up)
try handler.perform([request])

Vision vs ML Kit op iOS: Vision is sneller op oudere apparaten (iPhone X–13) dankzij ingebouwde ANE. ML Kit is nauwkeuriger op complexe scènes (vervormingen, scheefstand, reflecties) dankzij het Google-model getraind op miljoenen scene text-afbeeldingen. Vision ondersteunt geen confidence voor individuele tekens (alleen voor woorden), wat filtering beperkt. Voor documenten — Vision (sneller), voor scene text — ML Kit (nauwkeuriger).

Tesseract OCR: open-source alternatief

Tesseract OCR — open-source tekstherkenningsengine, ontwikkeld door HP (1985–1998) en voortgezet door Google (2006+). Tesseract 5 (LSTM-based) gebruikt de CRNN-neurale netwerkarchitectuur, wat een aanzienlijke nauwkeurigheidstoename geeft in vergelijking met Tesseract 4 (klassiek + LSTM). Tesseract ondersteunt 100+ talen, waaronder Cyrillisch, Arabisch, Hebreeuws en CJK. Voor Android — tess-two (fork), voor iOS — swift-tesseract.

Nadelen van Tesseract: snelheid 50–200 ms per frame (CPU-only, geen GPU-versnelling), vereist voorbewerking van de afbeelding (binarisatie, deskew, oriëntatiebepaling) vóór verzending naar de engine, geen ingebouwde tekstdetectie — het afbeeldingsgebied moet worden doorgegeven (vaak in combinatie met OpenCV Text Detection of EAST). Tesseract geeft 90% nauwkeurigheid op schone documenten en ~70% op scene text.

Wanneer Tesseract kiezen: als de app werkt op apparaten zonder Google Play (Huawei), ondersteuning voor zeldzame talen (Sanskriet, Hebreeuws) nodig is, of volledige aanpassing van de OCR-pipeline (trainen op eigen lettertypen) vereist is. In alle andere gevallen zijn ML Kit of Vision sneller, nauwkeuriger en hebben ze minder code nodig. Tesseract is alleen gerechtvaardigd bij beperkingen op SDK's van derden.

kotlin
// Tesseract OCR via tess-two
val tess = TessBaseAPI()
tess.init(dataPath, "rus+eng")
tess.pageSegMode = TessBaseAPI.PageSegMode.PSM_AUTO

val bitmap = BitmapFactory.decodeResource(resources, R.drawable.text)
val gray = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)
OpenCV.process(bitmap, gray) // Binarisatie + deskew

tess.setImage(gray)
val result = tess.utF8Text
tess.recycle()

Voorbewerking voor Tesseract is verplicht: conversie naar grayscale, binarisatie (Otsu of Adaptive), corrigeren van scheefstand (deskew), ruisverwijdering (median blur). Zonder voorbewerking daalt de nauwkeurigheid van Tesseract naar 50–60%. Gebruik OpenCV voor voorbewerking: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Voor documenten met een egale achtergrond is binarisatie voldoende, voor scene text — volledige pipeline.

Voorbewerking van afbeeldingen voor OCR

Beeldkwaliteit — de belangrijkste factor voor OCR-nauwkeurigheid. ML Kit en Vision hebben ingebouwde voorbewerking, maar voor complexe gevallen (donkere foto's, vervaging, overbelichting) verhoogt extra verwerking de nauwkeurigheid met 10–15%. Belangrijkste technieken: contrastverhoging (CLAHE), vervaging verwijderen (unsharp mask), perspectiefcorrectie (perspective transform), verwijderen van schaduwen en reflecties.

CLAHE (Contrast Limited Adaptive Histogram Equalization) — adaptieve histogramegalisatie met contrastbegrenzing, die het contrast van lokale gebieden verbetert. CLAHE is effectief voor foto's van documenten met ongelijkmatige verlichting (deel in schaduw, deel in licht). OpenCV Core.createCLAHE met clipLimit=2.0 en tileGridSize=(8,8) geeft het optimale resultaat voor OCR. Na CLAHE stijgt de nauwkeurigheid van ML Kit op donkere documenten van 70% naar 88%.

Perspectiefcorrectie — verplicht voor foto's van documenten onder een hoek. Gebruik OpenCV findHomography + warpPerspective om het document uit te lijnen. Gebruik Canny edge detection + findContours + approxPolyDP voor automatische detectie van documentranden. Na perspectiefcorrectie neemt de OCR-nauwkeurigheid toe met 20–30% voor opnamen onder een hoek >30°.

kotlin
// CLAHE + OpenCV voorbewerking
val mat = Mat()
Utils.bitmapToMat(bitmap, mat)
Imgproc.cvtColor(mat, mat, Imgproc.COLOR_RGB2GRAY)

val clahe = Imgproc.createCLAHE(2.0, Size(8.0, 8.0))
clahe.apply(mat, mat)

Imgproc.GaussianBlur(mat, mat, Size(3.0, 3.0), 0.0)
Imgproc.threshold(mat, mat, 0.0, 255.0, Imgproc.THRESH_BINARY or Imgproc.THRESH_OTSU)

val processedBitmap = Bitmap.createBitmap(mat.cols(), mat.rows(), Bitmap.Config.ARGB_8888)
Utils.matToBitmap(mat, processedBitmap)

Tekstdetectie vóór OCR — gebruik voor scene text EAST (Efficient Accurate Scene Text Detector) of CRAFT (Character Region Awareness for Text Detection) vóór verzending naar OCR. EAST detecteert de bounding box van tekst in de scène in 5–15 ms. CRAFT is nauwkeuriger (97%), maar langzamer (50–100 ms). Tekstdetectie maakt het mogelijk gebieden zonder tekst weg te snijden en alleen relevante delen naar OCR te sturen, wat de totale verwerking versnelt.

Toepassing van OCR in mobiele apps

Documenten scannen — de meest gebruikte toepassing van OCR. Scan-apps (CamScanner, Adobe Scan, Google Drive) gebruiken ML Kit of Vision voor tekstherkenning van documentfoto's. Typische pipeline: detectie van documentranden → perspectiefcorrectie → CLAHE-verwerking → OCR → opmaak (PDF, DOCX). ML Kit Text Recognition V2 verwerkt een A4-pagina in 100–200 ms.

Realtime tekstvertaling — combinatie van OCR en machinevertaling. Google Translate, Microsoft Translator, Yandex Translate gebruiken ML Kit of Vision voor tekstherkenning van de camera en plaatsen de vertaling over de originele tekst (AR-vertaling). Vereiste: latency < 200 ms voor comfortabele UX. ML Kit V2 + NNAPI geeft 30–80 ms per frame, met ruimte voor vertaling en rendering.

Automatische gegevensinvoer — OCR voor het extraheren van gegevens van visitekaartjes, bankpassen, identiteitsbewijzen. ML Kit herkent de tekst, vervolgens parseert post-processing de structuur: naam, telefoon, e-mail (visitekaartjes) of kaartnummer, vervaldatum, CVV (betaalkaarten). Gebruik reguliere expressies na OCR voor visitekaartjes. Voor bankpassen — gespecialiseerde ML-modellen (betaald, ~99% nauwkeurigheid).

swift
// OCR + AR-vertaling (vereenvoudigd)
let request = VNRecognizeTextRequest { req, _ in
    guard let results = req.results as? [VNRecognizedTextObservation] else { return }
    for observation in results {
        let text = observation.topCandidates(1).first?.string ?? ""
        let rect = observation.boundingBox
        // Vertaling en AR-rendering over rechthoek
        DispatchQueue.main.async {
            overlayView.showTranslation(text, at: rect)
        }
    }
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false

OCR voor mensen met een visuele beperking — Ondersteunende Technologie: apps lezen tekst van verpakkingen, menu's, borden voor. Ze gebruiken ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer). Belangrijkste vereiste — real-time met lage latentie (< 100 ms). Seeing AI (Microsoft) en Envision AI gebruiken deze benadering. Gebruik voor toegankelijkheidsapps de fast recognition-modus en filter niet op confidence — alle tekst is belangrijk voor de gebruiker.

Veelgestelde vragen

Wat is Text Recognition (OCR) in mobiele apps?

Text Recognition (OCR) — technologie waarmee een app tekst van foto's en video kan "lezen". De camera van de smartphone legt een afbeelding vast, het neurale netwerk op het apparaat herkent de tekens en retourneert machineleesbare tekst. In mobiele apps wordt OCR gebruikt voor het scannen van documenten, vertalen met de camera, invoeren van gegevens van visitekaartjes en het creëren van toegankelijke interfaces voor mensen met een visuele beperking.

Welke OCR is beter voor Android: ML Kit of Tesseract?

ML Kit Text Recognition — de beste keuze voor Android: 96% nauwkeurigheid, 10–30 ms snelheid, 45 talen, GPU-versnelling via NNAPI, vindt tekst in elke oriëntatie. Tesseract — open-source alternatief (90% nauwkeurigheid, 100+ talen, CPU), geschikt voor apparaten zonder Google Play of zeldzame talen. Kies voor 95% van de projecten ML Kit — het is sneller, nauwkeuriger en vereist geen voorbewerking van de afbeelding.

Is internet nodig voor OCR op een mobiel apparaat?

Nee, ML Kit Text Recognition, Apple Vision en Tesseract werken volledig on-device. ML Kit kan het model bij de eerste keer opstarten downloaden (downloaded mode), waarna het offline werkt. Apple Vision is ingebouwd in iOS en heeft geen internet nodig. Tesseract is volledig offline. Cloud OCR (Google Cloud Vision, AWS Textract) werken via internet, maar worden niet gebruikt in real-time mobiele apps.

Welke talen ondersteunt ML Kit Text Recognition?

ML Kit Text Recognition V2 ondersteunt 45+ talen uit de Latijnse en Cyrillische groepen: Engels, Russisch, Duits, Frans, Spaans, Italiaans, Portugees, Pools, Oekraïens, Roemeens, Turks en andere. V1 (CJK) ondersteunt daarnaast Chinees, Japans en Koreaans. De volledige lijst staat in de documentatie van TextRecognizerOptions. Gebruik Tesseract (>100 talen) voor herkenning van Arabisch of Hebreeuws.

Hoe verbeter ik de OCR-nauwkeurigheid op documentfoto's?

Belangrijkste methoden: het document uitlijnen (perspectiefcorrectie via OpenCV), contrast verbeteren (CLAHE), vervaging verwijderen (unsharp mask), goede verlichting (continuous auto-exposure), camera stabiliseren (OIS/EIS). ML Kit verwerkt zelf basisvervormingen, maar voor documenten met perspectivische vervormingen (>30°) verhoogt voorbewerking de nauwkeurigheid met 20–30%. Gebruik de fast recognition-modus voor video.

Samenvatting

  • Text Recognition — OCR op mobiele apparaten: gedrukt, handgeschreven, scene text
  • ML Kit V2 — 96% nauwkeurigheid, 45+ talen, 10–30 ms, GPU/NPU-versnelling
  • Apple Vision — native iOS OCR (iOS 13+), 13 talen, via ANE
  • Tesseract 5 — open-source, 100+ talen, 50–200 ms (CPU), fallback voor Huawei
  • Voorbewerking — CLAHE, deskew, perspectiefcorrectie verhogen nauwkeurigheid met 10–30%
  • Real-time — tot 30 FPS via CameraX/AVFoundation met ML Kit of Vision
  • On-device — alle berekeningen lokaal, gegevensprivacy gegarandeerd

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook