Text Recognition în aplicații — ce este, OCR și Vision

Autor: IT Sectr Publicat: 2026-07-18 Timp de citire: 10 min

Text Recognition (OCR — Optical Character Recognition) — este tehnologia de extragere a textului tipărit sau scris de mână din imagini și flux video. În dezvoltarea mobilă, Text Recognition este utilizat pentru digitizarea documentelor, recunoașterea plăcuțelor de înmatriculare, citirea cărților de vizită și traducerea textului în timp real. Principalele soluții OCR mobile: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (open-source). Conform datelor Google ML Kit, 2025, Text Recognition V2 procesează un cadru în 10–30 ms cu o precizie de 96% pentru alfabetul latin și 91% pentru chirilic.

Principalele puncte

  • Text Recognition — extragerea textului din imagini și video (OCR)
  • ML Kit Text Recognition — 45+ limbi, precizie 96% (latină), 10–30 ms
  • Apple Vision — VNRecognizeTextRequest, 13+ limbi, iOS nativ
  • Tesseract — OCR open-source, 100+ limbi, 50–200 ms, CPU
  • Real-time — până la 30 FPS cu CameraX/AVFoundation pe dispozitive moderne

Ce este Text Recognition: principii OCR

Text Recognition (OCR) — proces de viziune computerizată care transformă imaginea textului în caractere citibile de mașină. OCR constă în etape: preprocesarea imaginii (binarizare, deskew, corectarea înclinării), segmentare (împărțire în rânduri, cuvinte, caractere), recunoaștere (clasificarea fiecărui caracter) și postprocesare (verificare cu dicționar, corectarea erorilor). Sistemele OCR moderne (ML Kit, Vision) utilizează rețele neuronale end-to-end care combină toate etapele.

Tipuri de OCR: text tipărit (printed text) — recunoașterea textului mașinărit din documente, panouri, ecrane — precizie 95–99%; text scris de mână (handwriting) — recunoașterea scrierii de mână — precizie 80–90% pentru latină, 70–80% pentru chirilic; text de scenă (scene text) — text pe scene naturale: numere de case, semne rutiere, nume de magazine — cel mai dificil din cauza distorsiunilor de perspectivă și a reflexiilor.

CRNN + CTC Loss — arhitectura utilizată în modelele OCR moderne. Convolutional Recurrent Neural Network (CNN + LSTM) extrage caracteristicile imaginii, iar Connectionist Temporal Classification decodifică secvența de caractere fără necesitatea segmentării prealabile. CRNN funcționează cu texte de orice lungime, este rezistent la înclinări și distorsiuni. Conform arXiv (2025), modelele CRNN oferă 97.5% precizie pe benchmark-ul ICDAR 2019.

Soluție OCRPrecizieVitezăLimbiPlatformă
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 pentru dispozitive mobile — ML Kit utilizează modelul MobileNetV2 + CRNN cu cuantizare INT8. Modelul ocupă 2–5 MB (latent) și se execută pe GPU/NPU prin TFLite Delegate. Spre deosebire de Tesseract (pipeline clasic), OCR-ul pe rețea neuronală nu necesită segmentare separată a caracterelor și este mai rezistent la zgomot. Dezavantaj: necesită GPU sau NPU pentru timp real — pe CPU pur, viteza scade la 5–10 FPS.

ML Kit Text Recognition pe Android și iOS

ML Kit Text Recognition — principalul instrument OCR pentru aplicații mobile. Disponibil în două versiuni: V2 (Latin-based — optimizată pentru latină, chirilică, cifre) și V1 (Latin + CJK — japoneză, chineză, coreeană, dar mai lentă). V2 utilizează modelul CRNN end-to-end, V1 — CNN + LSTM mai vechi. Google recomandă V2 pentru toate cazurile, cu excepția necesității de recunoaștere CJK.

Structura rezultatului ML Kit: Text → TextBlock → Line → Element (Word/Symbol). Fiecare nivel are bounding box, confidence (0..1) și recognised text. Text — obiectul rădăcină cu fullText (tot textul recunoscut într-un singur rând). TextBlock — bloc logic de text (paragraf, coloană). Line — rând de text. Element — cuvânt sau simbol. Utilizați confidence pentru filtrarea recunoașterilor inexacte.

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 pe iOS prin ML Kit: API similar cu Android, dar utilizează UIImage/CVPixelBuffer în loc de InputImage. ML Kit utilizează automat Apple Neural Engine pe A12+ prin Core ML Delegate. Pentru iOS, ML Kit Text Recognition V2 arată o viteză de 15–30 ms pe iPhone 15 Pro. Pentru performanță maximă, convertiți UIImage în CVPixelBuffer înainte de transmitere — aceasta reduce overhead-ul de conversie.

Apple Vision Framework: VNRecognizeTextRequest

Apple Vision Framework oferă OCR nativ prin VNRecognizeTextRequest (iOS 13+). Vision OCR utilizează Apple Neural Engine (ANE) și nu necesită SDK-uri suplimentare. Suportă 13 limbi (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Vision detectează automat limba textului (language correction) și suportă mai multe limbi într-un singur cadru. Viteză — 10–40 ms pe A16+.

Caracteristici Vision OCR: recognitionLevel (fast vs accurate), automaticLanguageDetection, customWords (adăugarea termenilor specifici), suport pentru top candidates (mai multe variante de recunoaștere pentru text neclar). Modul fast oferă 90% precizie la 10–20 ms, accurate — 95% la 30–50 ms. Pentru producție, utilizați accurate cu filtrare după 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 pe iOS: Vision este mai rapid pe dispozitivele mai vechi (iPhone X–13) datorită ANE-ului încorporat. ML Kit este mai precis pe scene complexe (distorsiuni, înclinări, reflexii) datorită modelului Google antrenat pe milioane de imagini scene text. Vision nu suportă confidence pentru caractere individuale (doar pentru cuvinte), ceea ce limitează filtrarea. Pentru documente — Vision (mai rapid), pentru scene text — ML Kit (mai precis).

Tesseract OCR: alternativă open-source

Tesseract OCR — motor de recunoaștere a textului open-source, dezvoltat de HP (1985–1998) și continuat de Google (2006+). Tesseract 5 (LSTM-based) utilizează arhitectura de rețea neuronală CRNN, ceea ce oferă o creștere semnificativă a preciziei în comparație cu Tesseract 4 (clasic + LSTM). Tesseract suportă 100+ limbi, inclusiv chirilică, arabă, ebraică și CJK. Pentru Android — tess-two (fork), pentru iOS — swift-tesseract.

Dezavantajele Tesseract: viteza 50–200 ms per cadru (CPU-only, fără accelerare GPU), necesită preprocesarea imaginii (binarizare, deskew, determinarea orientării) înainte de transmiterea către motor, nu are detecție încorporată a textului — trebuie transmisă zona imaginii (adesea în pereche cu OpenCV Text Detection sau EAST). Tesseract oferă 90% precizie pe documente curate și ~70% pe scene text.

Când să alegeți Tesseract: dacă aplicația funcționează pe dispozitive fără Google Play (Huawei), este necesar suportul pentru limbi rare (sanscrită, ebraică) sau este necesară personalizarea completă a pipeline-ului OCR (antrenament pe propriile fonturi). În toate celelalte cazuri, ML Kit sau Vision sunt mai rapide, mai precise și necesită mai puțin cod. Tesseract este o alegere justificată doar atunci când există restricții privind SDK-urile terțe.

kotlin
// Tesseract OCR prin 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) // Binarizare + deskew

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

Preprocesarea pentru Tesseract este obligatorie: conversia în grayscale, binarizare (Otsu sau Adaptive), corectarea înclinării (deskew), eliminarea zgomotului (median blur). Fără preprocesare, precizia Tesseract scade la 50–60%. Utilizați OpenCV pentru preprocesare: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Pentru documente cu fond uniform, binarizarea este suficientă, pentru scene text — pipeline complet.

Preprocesarea imaginilor pentru OCR

Calitatea imaginii — factorul principal al preciziei OCR. ML Kit și Vision au preprocesare încorporată, dar pentru cazuri complexe (fotografii întunecate, estompare, supralumini) procesarea suplimentară crește precizia cu 10–15%. Tehnici principale: creșterea contrastului (CLAHE), eliminarea estompării (unsharp mask), corectarea perspectivei (perspective transform), eliminarea umbrelor și a reflexiilor.

CLAHE (Contrast Limited Adaptive Histogram Equalization) — egalizarea adaptivă a histogramei limitată la contrast, care îmbunătățește contrastul zonelor locale. CLAHE este eficient pentru fotografiile documentelor cu iluminare neuniformă (o parte în umbră, o parte în lumină). OpenCV Core.createCLAHE cu clipLimit=2.0 și tileGridSize=(8,8) oferă rezultatul optim pentru OCR. După CLAHE, precizia ML Kit pe documente întunecate crește de la 70% la 88%.

Corectarea perspectivei — obligatorie pentru fotografiile documentelor în unghi. Utilizați OpenCV findHomography + warpPerspective pentru alinierea documentului. Pentru detectarea automată a marginilor documentului, utilizați Canny edge detection + findContours + approxPolyDP. După corectarea perspectivei, precizia OCR crește cu 20–30% pentru fotografiile la unghi >30°.

kotlin
// CLAHE + preprocesare 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)

Detecția textului înainte de OCR — pentru scene text, utilizați EAST (Efficient Accurate Scene Text Detector) sau CRAFT (Character Region Awareness for Text Detection) înainte de transmiterea către OCR. EAST detectează bounding box-ul textului pe scenă în 5–15 ms. CRAFT este mai precis (97%), dar mai lent (50–100 ms). Detecția textului permite eliminarea zonelor fără text și transmiterea către OCR doar a fragmentelor relevante, ceea ce accelerează procesarea generală.

Aplicarea OCR în aplicațiile mobile

Scanarea documentelor — cea mai răspândită aplicare a OCR. Aplicațiile de scanare (CamScanner, Adobe Scan, Google Drive) utilizează ML Kit sau Vision pentru recunoașterea textului din fotografiile documentelor. Pipeline tipic: detecția marginilor documentului → corectarea perspectivei → procesare CLAHE → OCR → formatare (PDF, DOCX). ML Kit Text Recognition V2 procesează o pagină A4 în 100–200 ms.

Traducerea textului în timp real — combinație de OCR și traducere automată. Google Translate, Microsoft Translator, Yandex Translate utilizează ML Kit sau Vision pentru recunoașterea textului de la cameră și suprapun traducerea peste textul original (traducere AR). Cerință: latență < 200 ms pentru o experiență confortabilă. ML Kit V2 + NNAPI oferă 30–80 ms per cadru, lăsând rezervă pentru traducere și randare.

Introducerea automată a datelor — OCR pentru extragerea datelor de pe cărți de vizită, carduri bancare, acte de identitate. ML Kit recunoaște textul, apoi post-procesarea parsează structura: nume, telefon, email (cărți de vizită) sau număr card, termen, CVV (carduri de plată). Pentru cărți de vizită, utilizați expresii regulate după OCR. Pentru carduri bancare — modele ML specializate (plătite, ~99% precizie).

swift
// OCR + traducere AR (simplificată)
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
        // Traducere și randare AR peste dreptunghi
        DispatchQueue.main.async {
            overlayView.showTranslation(text, at: rect)
        }
    }
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false

OCR pentru persoane cu deficiențe de vedere — Tehnologie Asistivă: aplicațiile citesc textul de pe ambalaje, meniuri, panouri. Utilizează ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer). Cerința cheie — timp real cu latență redusă (< 100 ms). Seeing AI (Microsoft) și Envision AI utilizează această abordare. Pentru aplicațiile de accesibilitate, utilizați modul fast recognition și nu filtrați după confidence — orice text este important pentru utilizator.

Întrebări frecvente

Ce este Text Recognition (OCR) în aplicațiile mobile?

Text Recognition (OCR) — tehnologia care permite aplicației să „citească" textul din fotografii și video. Camera smartphone-ului capturează imaginea, rețeaua neuronală de pe dispozitiv recunoaște caracterele și returnează text lizibil de mașină. În aplicațiile mobile, OCR este utilizat pentru scanarea documentelor, traducerea cu camera, introducerea datelor de pe cărți de vizită și crearea de interfețe accesibile pentru persoanele cu deficiențe de vedere.

Care OCR este mai bun pentru Android: ML Kit sau Tesseract?

ML Kit Text Recognition — cea mai bună alegere pentru Android: 96% precizie, 10–30 ms viteză, 45 limbi, accelerare GPU prin NNAPI, găsește text în orice orientare. Tesseract — alternativă open-source (90% precizie, 100+ limbi, CPU), potrivit pentru dispozitive fără Google Play sau limbi rare. Pentru 95% dintre proiecte, alegeți ML Kit — este mai rapid, mai precis și nu necesită preprocesarea imaginii.

Este necesar internetul pentru OCR pe un dispozitiv mobil?

Nu, ML Kit Text Recognition, Apple Vision și Tesseract funcționează complet on-device. ML Kit poate descărca modelul la prima lansare (downloaded mode), după care funcționează offline. Apple Vision este încorporat în iOS, nu necesită internet. Tesseract este complet offline. Cloud OCR (Google Cloud Vision, AWS Textract) funcționează prin internet, dar nu sunt utilizate în aplicații mobile de timp real.

Ce limbi suportă ML Kit Text Recognition?

ML Kit Text Recognition V2 suportă 45+ limbi din grupurile latin și chirilic: engleză, rusă, germană, franceză, spaniolă, italiană, portugheză, poloneză, ucraineană, română, turcă și altele. V1 (CJK) suportă suplimentar chineză, japoneză, coreeană. Lista completă se află în documentația TextRecognizerOptions. Pentru recunoașterea arabă sau ebraică, utilizați Tesseract (>100 limbi).

Cum să îmbunătățim precizia OCR pe fotografiile documentelor?

Metode principale: alinierea documentului (corectarea perspectivei prin OpenCV), îmbunătățirea contrastului (CLAHE), eliminarea estompării (unsharp mask), iluminare bună (continuous auto-exposure), stabilizarea camerei (OIS/EIS). ML Kit procesează singur distorsiunile de bază, dar pentru documente cu distorsiuni de perspectivă (>30°) preprocesarea crește precizia cu 20–30%. Utilizați modul fast recognition pentru video.

Rezumat

  • Text Recognition — OCR pe dispozitive mobile: tipărit, scris de mână, scene text
  • ML Kit V2 — 96% precizie, 45+ limbi, 10–30 ms, accelerare GPU/NPU
  • Apple Vision — OCR nativ iOS (iOS 13+), 13 limbi, prin ANE
  • Tesseract 5 — open-source, 100+ limbi, 50–200 ms (CPU), fallback pentru Huawei
  • Preprocesare — CLAHE, deskew, corectarea perspectivei cresc precizia cu 10–30%
  • Real-time — până la 30 FPS prin CameraX/AVFoundation cu ML Kit sau Vision
  • On-device — toate calculele local, confidențialitatea datelor garantată

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și