Text Recognition v aplikacích — co to je, OCR a Vision

Autor: IT Sectr Publikováno: 2026-07-18 Doba čtení: 10 min

Text Recognition (OCR — Optical Character Recognition) — je technologie extrakce tištěného nebo ručně psaného textu z obrázků a video streamu. V mobilním vývoji se Text Recognition používá pro digitalizaci dokumentů, rozpoznávání poznávacích značek, čtení vizitek a překlad textu v reálném čase. Hlavní mobilní OCR řešení: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (open-source). Podle údajů Google ML Kit, 2025 zpracovává Text Recognition V2 snímek za 10–30 ms s přesností 96% pro latinku a 91% pro cyrilici.

Hlavní body

  • Text Recognition — extrakce textu z obrázků a videa (OCR)
  • ML Kit Text Recognition — 45+ jazyků, přesnost 96% (latinka), 10–30 ms
  • Apple Vision — VNRecognizeTextRequest, 13+ jazyků, nativní iOS
  • Tesseract — open-source OCR, 100+ jazyků, 50–200 ms, CPU
  • Real-time — až 30 FPS s CameraX/AVFoundation na moderních zařízeních

Co je Text Recognition: principy OCR

Text Recognition (OCR) — proces počítačového vidění, který převádí obraz textu na strojově čitelné znaky. OCR se skládá z fází: předzpracování obrazu (binarizace, deskew, korekce naklonění), segmentace (rozdělení na řádky, slova, znaky), rozpoznávání (klasifikace každého znaku) a následné zpracování (kontrola slovníkem, oprava chyb). Moderní OCR systémy (ML Kit, Vision) používají end-to-end neuronové sítě, které spojují všechny fáze.

Typy OCR: tištěný text (printed text) — rozpoznávání strojového textu z dokumentů, cedulí, obrazovek — přesnost 95–99%; ručně psaný text (handwriting) — rozpoznávání rukopisného vstupu — přesnost 80–90% pro latinku, 70–80% pro cyrilici; kontextový text (scene text) — text v přirozených scénách: čísla domů, dopravní značky, názvy obchodů — nejobtížnější kvůli perspektivním zkreslením a odleskům.

CRNN + CTC Loss — architektura používaná v moderních OCR modelech. Convolutional Recurrent Neural Network (CNN + LSTM) extrahuje rysy obrazu a Connectionist Temporal Classification dekóduje sekvenci znaků bez nutnosti předchozí segmentace. CRNN pracuje s texty libovolné délky, je odolný vůči naklonění a zkreslení. Podle arXiv (2025) poskytují modely CRNN 97.5% přesnost na benchmarku ICDAR 2019.

OCR ŘešeníPřesnostRychlostJazykyPlatforma
ML Kit V296%10–30 ms45+Android, iOS
Apple Vision95%10–40 ms13+iOS, macOS
Tesseract 590%50–200 ms100+Multiplatformní
Google Cloud Vision98%500–1000 ms200+Server (API)

CRNN pro mobilní zařízení — ML Kit používá model MobileNetV2 + CRNN s INT8 kvantizací. Model zabírá 2–5 MB (latent) a běží na GPU/NPU prostřednictvím TFLite Delegate. Na rozdíl od Tesseract (klasický pipeline) neuronové síťové OCR nevyžaduje oddělenou segmentaci znaků a je odolnější vůči šumu. Nevýhoda: vyžaduje GPU nebo NPU pro real-time — na čistém CPU rychlost klesá na 5–10 FPS.

ML Kit Text Recognition na Android a iOS

ML Kit Text Recognition — hlavní OCR nástroj pro mobilní aplikace. K dispozici ve dvou verzích: V2 (Latin-based — optimalizovaná pro latinku, cyrilici, číslice) a V1 (Latin + CJK — japonština, čínština, korejština, ale pomalejší). V2 používá end-to-end model CRNN, V1 — starší CNN + LSTM. Google doporučuje V2 pro všechny případy kromě potřeby rozpoznávání CJK.

Struktura výsledku ML Kit: Text → TextBlock → Line → Element (Word/Symbol). Každá úroveň má bounding box, confidence (0..1) a recognised text. Text — kořenový objekt s fullText (všechen rozpoznaný text v jednom řádku). TextBlock — logický blok textu (odstavec, sloupec). Line — řádek textu. Element — slovo nebo symbol. Použijte confidence k filtrování nepřesných rozpoznání.

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 na iOS přes ML Kit: API podobné Androidu, ale používá UIImage/CVPixelBuffer místo InputImage. ML Kit automaticky používá Apple Neural Engine na A12+ přes Core ML Delegate. Pro iOS vykazuje ML Kit Text Recognition V2 rychlost 15–30 ms na iPhone 15 Pro. Pro maximální výkon převeďte UIImage na CVPixelBuffer před odesláním — to snižuje režii konverze.

Apple Vision Framework: VNRecognizeTextRequest

Apple Vision Framework poskytuje nativní OCR prostřednictvím VNRecognizeTextRequest (iOS 13+). Vision OCR využívá Apple Neural Engine (ANE) a nevyžaduje další SDK. Podporuje 13 jazyků (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Vision automaticky určuje jazyk textu (language correction) a podporuje více jazyků v jednom snímku. Rychlost — 10–40 ms na A16+.

Vlastnosti Vision OCR: recognitionLevel (fast vs accurate), automaticLanguageDetection, customWords (přidání specifických termínů), podpora top candidates (více variant rozpoznání pro nejasný text). Rychlý režim poskytuje 90% přesnost při 10–20 ms, accurate — 95% při 30–50 ms. Pro produkci používejte accurate s filtrováním podle 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 na iOS: Vision je rychlejší na starších zařízeních (iPhone X–13) díky vestavěnému ANE. ML Kit je přesnější na složitých scénách (zkreslení, naklonění, odlesky) díky modelu Google trénovanému na milionech obrázků scene text. Vision nepodporuje confidence pro jednotlivé znaky (pouze pro slova), což omezuje filtrování. Pro dokumenty — Vision (rychlejší), pro scene text — ML Kit (přesnější).

Tesseract OCR: open-source alternativa

Tesseract OCR — open-source engine pro rozpoznávání textu, vyvinutý HP (1985–1998) a rozvíjený Googlem (2006+). Tesseract 5 (LSTM-based) používá architekturu neuronové sítě CRNN, což poskytuje výrazné zvýšení přesnosti oproti Tesseract 4 (klasický + LSTM). Tesseract podporuje 100+ jazyků, včetně cyrilice, arabštiny, hebrejštiny a CJK. Pro Android — tess-two (fork), pro iOS — swift-tesseract.

Nevýhody Tesseract: rychlost 50–200 ms na snímek (CPU-only, bez GPU akcelerace), vyžaduje předzpracování obrazu (binarizace, deskew, určení orientace) před odesláním do enginu, nemá vestavěnou detekci textu — je třeba odeslat oblast obrazu (často v kombinaci s OpenCV Text Detection nebo EAST). Tesseract poskytuje 90% přesnost na čistých dokumentech a ~70% na scene text.

Kdy zvolit Tesseract: pokud aplikace běží na zařízeních bez Google Play (Huawei), je potřeba podpora vzácných jazyků (sanskrt, hebrejština) nebo je vyžadováno úplné přizpůsobení OCR pipeline (trénování na vlastních fontech). Ve všech ostatních případech je ML Kit nebo Vision rychlejší, přesnější a vyžaduje méně kódu. Tesseract je oprávněnou volbou pouze při omezeních na SDK třetích stran.

kotlin
// Tesseract OCR přes 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) // Binarizace + deskew

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

Předzpracování pro Tesseract je povinné: převod do grayscale, binarizace (Otsu nebo Adaptive), korekce naklonění (deskew), odstranění šumu (median blur). Bez předzpracování klesá přesnost Tesseract na 50–60%. Použijte OpenCV pro předzpracování: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Pro dokumenty s rovnoměrným pozadím stačí binarizace, pro scene text — plný pipeline.

Předzpracování obrázků pro OCR

Kvalita obrazu — hlavní faktor přesnosti OCR. ML Kit a Vision mají vestavěné předzpracování, ale pro složité případy (tmavé fotografie, rozmazání, přeexponování) zvyšuje dodatečné zpracování přesnost o 10–15%. Hlavní techniky: zvýšení kontrastu (CLAHE), odstranění rozmazání (unsharp mask), korekce perspektivy (perspective transform), odstranění stínů a odlesků.

CLAHE (Contrast Limited Adaptive Histogram Equalization) — adaptivní vyrovnání histogramu s omezením kontrastu, které zlepšuje kontrast lokálních oblastí. CLAHE je účinný pro fotografie dokumentů s nerovnoměrným osvětlením (část ve stínu, část na světle). OpenCV Core.createCLAHE s clipLimit=2.0 a tileGridSize=(8,8) poskytuje optimální výsledek pro OCR. Po CLAHE se přesnost ML Kit na tmavých dokumentech zvyšuje ze 70% na 88%.

Korekce perspektivy — povinná pro fotografie dokumentů pořízených pod úhlem. Použijte OpenCV findHomography + warpPerspective pro zarovnání dokumentu. Pro automatickou detekci okrajů dokumentu použijte Canny edge detection + findContours + approxPolyDP. Po korekci perspektivy se přesnost OCR zvyšuje o 20–30% pro snímky pod úhlem >30°.

kotlin
// CLAHE + předzpracování OpenCV
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)

Detekce textu před OCR — pro scene text použijte EAST (Efficient Accurate Scene Text Detector) nebo CRAFT (Character Region Awareness for Text Detection) před odesláním do OCR. EAST detekuje bounding box textu na scéně za 5–15 ms. CRAFT je přesnější (97%), ale pomalejší (50–100 ms). Detekce textu umožňuje oříznout oblasti bez textu a odesílat do OCR pouze relevantní části, což urychluje celkové zpracování.

Použití OCR v mobilních aplikacích

Skener dokumentů — nejmasivnější použití OCR. Skenovací aplikace (CamScanner, Adobe Scan, Google Drive) používají ML Kit nebo Vision pro rozpoznávání textu z fotografií dokumentů. Typický pipeline: detekce okrajů dokumentu → korekce perspektivy → zpracování CLAHE → OCR → formátování (PDF, DOCX). ML Kit Text Recognition V2 zpracuje stránku A4 za 100–200 ms.

Překlad textu v reálném čase — kombinace OCR a strojového překladu. Google Translate, Microsoft Translator, Yandex Translate používají ML Kit nebo Vision pro rozpoznávání textu z kamery a umísťují překlad přes původní text (AR překlad). Požadavek: latence < 200 ms pro pohodlné UX. ML Kit V2 + NNAPI poskytuje 30–80 ms na snímek, ponechávajíc rezervu pro překlad a vykreslování.

Automatický vstup dat — OCR pro extrakci dat z vizitek, bankovních karet, průkazů totožnosti. ML Kit rozpozná text, poté následné zpracování parsuje strukturu: jméno, telefon, email (vizitky) nebo číslo karty, expirace, CVV (platební karty). Pro vizitky použijte regulární výrazy po OCR. Pro bankovní karty — specializované ML modely (placené, ~99% přesnost).

swift
// OCR + AR překlad (zjednodušený)
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
        // Překlad a AR vykreslování nad obdélníkem
        DispatchQueue.main.async {
            overlayView.showTranslation(text, at: rect)
        }
    }
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false

OCR pro osoby se zrakovým postižením — Asistenční technologie: aplikace předčítají text z obalů, menu, cedulí. Používají ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer). Klíčový požadavek — reálný čas s nízkou latencí (< 100 ms). Seeing AI (Microsoft) a Envision AI používají tento přístup. Pro aplikace pro přístupnost používejte režim fast recognition a nefiltrujte podle confidence — každý text je pro uživatele důležitý.

Často kladené otázky

Co je Text Recognition (OCR) v mobilních aplikacích?

Text Recognition (OCR) — technologie, která umožňuje aplikaci „číst" text z fotografií a videa. Kamera smartphonu zachytí obraz, neuronová síť na zařízení rozpozná znaky a vrátí strojově čitelný text. V mobilních aplikacích se OCR používá pro skenování dokumentů, překlad pomocí kamery, vkládání dat z vizitek a vytváření přístupných rozhraní pro osoby se zrakovým postižením.

Které OCR je lepší pro Android: ML Kit nebo Tesseract?

ML Kit Text Recognition — nejlepší volba pro Android: 96% přesnost, 10–30 ms rychlost, 45 jazyků, GPU akcelerace přes NNAPI, najde text v libovolné orientaci. Tesseract — open-source alternativa (90% přesnost, 100+ jazyků, CPU), vhodná pro zařízení bez Google Play nebo vzácné jazyky. Pro 95% projektů zvolte ML Kit — je rychlejší, přesnější a nevyžaduje předzpracování obrazu.

Je vyžadován internet pro OCR na mobilním zařízení?

Ne, ML Kit Text Recognition, Apple Vision a Tesseract fungují zcela on-device. ML Kit si může stáhnout model při prvním spuštění (downloaded mode), poté funguje offline. Apple Vision je vestavěn do iOS, nevyžaduje internet. Tesseract je plně offline. Cloud OCR (Google Cloud Vision, AWS Textract) fungují přes internet, ale nepoužívají se v mobilních aplikacích v reálném čase.

Které jazyky podporuje ML Kit Text Recognition?

ML Kit Text Recognition V2 podporuje 45+ jazyků z latinské a cyrilské skupiny: angličtinu, ruštinu, němčinu, francouzštinu, španělštinu, italštinu, portugalštinu, polštinu, ukrajinštinu, rumunštinu, turečtinu a další. V1 (CJK) navíc podporuje čínštinu, japonštinu, korejštinu. Úplný seznam je v dokumentaci TextRecognizerOptions. Pro rozpoznávání arabštiny nebo hebrejštiny použijte Tesseract (>100 jazyků).

Jak zlepšit přesnost OCR na fotografiích dokumentů?

Hlavní metody: zarovnání dokumentu (korekce perspektivy přes OpenCV), zlepšení kontrastu (CLAHE), odstranění rozmazání (unsharp mask), dobré osvětlení (continuous auto-exposure), stabilizace kamery (OIS/EIS). ML Kit sám zpracovává základní zkreslení, ale pro dokumenty s perspektivním zkreslením (>30°) zvyšuje předzpracování přesnost o 20–30%. Pro video používejte režim fast recognition.

Shrnutí

  • Text Recognition — OCR na mobilních zařízeních: tištěný, ručně psaný, scene text
  • ML Kit V2 — 96% přesnost, 45+ jazyků, 10–30 ms, GPU/NPU akcelerace
  • Apple Vision — nativní iOS OCR (iOS 13+), 13 jazyků, přes ANE
  • Tesseract 5 — open-source, 100+ jazyků, 50–200 ms (CPU), fallback pro Huawei
  • Předzpracování — CLAHE, deskew, korekce perspektivy zvyšují přesnost o 10–30%
  • Real-time — až 30 FPS přes CameraX/AVFoundation s ML Kit nebo Vision
  • On-device — všechny výpočty lokálně, soukromí dat zaručeno

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také