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 (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 OCR | Precizie | Viteză | Limbi | Platformă |
|---|---|---|---|---|
| ML Kit V2 | 96% | 10–30 ms | 45+ | Android, iOS |
| Apple Vision | 95% | 10–40 ms | 13+ | iOS, macOS |
| Tesseract 5 | 90% | 50–200 ms | 100+ | Multiplatformă |
| Google Cloud Vision | 98% | 500–1000 ms | 200+ | 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 — 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.
// 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 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.
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 — 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.
// 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.
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°.
// 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ă.
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).
// 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
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.
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.
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.
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).
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
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.
Citiți și