Text Recognition (OCR — Optical Character Recognition) — је технологија издвајања штампаног или рукописног текста из слика и видео тока. У мобилном развоју Text Recognition се користи за дигитализацију докумената, препознавање регистарских таблица, читање визиткарти и превођење текста у реалном времену. Главна мобилна OCR решења: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (open-source). Према подацима Google ML Kit, 2025, Text Recognition V2 обрађује кадар за 10–30 ms са тачношћу 96% на латиници и 91% на ћирилици.
Главно
Text Recognition (OCR) — процес компјутерског вида који претвара слику текста у машински читљиве знакове. OCR се састоји од фаза: предобрада слике (бинаризација, дескју, уклањање нагиба), сегментација (подела на редове, речи, знакове), препознавање (класификација сваког знака) и обрада после (провера речником, исправљање грешака). Савремени OCR системи (ML Kit, Vision) користе енд-ту-енд неуронске мреже које обједињују све фазе.
Типови OCR: штампани текст (printed text) — препознавање машинског текста из докумената, натписа, екрана — тачност 95–99%; рукописни текст (handwriting) — препознавање рукописног уноса — тачност 80–90% на латиници, 70–80% на ћирилици; контекстни текст (scene text) — текст на природним сценама: бројеви кућа, саобраћајни знаци, називи продавница — најсложенији због перспективних изобличења и одсјаја.
CRNN + CTC Loss — архитектура која се користи у савременим OCR моделима. Convolutional Recurrent Neural Network (CNN + LSTM) издваја карактеристике слике, а Connectionist Temporal Classification декодира секвенцу знакова без потребе за претходном сегментацијом. CRNN ради са текстовима било које дужине, отпоран је на нагибе и изобличења. Према arXiv (2025), CRNN модели дају 97.5% тачности на benchmark ICDAR 2019.
| OCR Решење | Тачност | Брзина | Језици | Платформа |
|---|---|---|---|---|
| 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+ | Вишеплатформско |
| Google Cloud Vision | 98% | 500–1000 ms | 200+ | Сервер (API) |
CRNN за мобилне уређаје — ML Kit користи модел MobileNetV2 + CRNN са INT8 квантовањем. Модел заузима 2–5 MB (latent) и извршава се на GPU/NPU преко TFLite Delegate. За разлику од Tesseract-а (класични pipeline), неуронски OCR не захтева одвојену сегментацију знакова и отпорнији је на шум. Недостатак: захтева GPU или NPU за real-time — на чистом CPU брзина пада на 5–10 FPS.
ML Kit Text Recognition — главни OCR алат за мобилне апликације. Доступан у две верзије: V2 (Latin-based — оптимизована за латиницу, ћирилицу, цифре) и V1 (Latin + CJK — јапански, кинески, корејски, али спорији). V2 користи енд-ту-енд CRNN модел, V1 — старију CNN + LSTM. Google препоручује V2 за све случајеве осим потребе за CJK препознавањем.
Структура резултата ML Kit-а: Text → TextBlock → Line → Element (Word/Symbol). Сваки ниво има bounding box, confidence (0..1) и recognised text. Text — основни објекат са fullText (цео препознати текст у једном реду). TextBlock — логички блок текста (параграф, колона). Line — ред текста. Element — реч или симбол. Користите confidence за филтрирање нетачних препознавања.
// 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 на iOS преко ML Kit-а: API аналоган Android-у, али користи UIImage/CVPixelBuffer уместо InputImage. ML Kit аутоматски користи Apple Neural Engine на A12+ преко Core ML Delegate. За iOS ML Kit Text Recognition V2 показује брзину 15–30 ms на iPhone 15 Pro. За максималне перформансе конвертујте UIImage у CVPixelBuffer пре слања — ово смањује overhead конверзије.
Apple Vision Framework пружа нативни OCR преко VNRecognizeTextRequest (iOS 13+). Vision OCR користи Apple Neural Engine (ANE) и не захтева додатне SDK. Подржава 13 језика (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Vision аутоматски одређује језик текста (language correction) и подржава више језика у једном кадру. Брзина — 10–40 ms на A16+.
Карактеристике Vision OCR: recognitionLevel (fast vs accurate), automaticLanguageDetection, customWords (додавање специфичних термина), подршка за top candidates (више варијанти препознавања за нејасан текст). Fast режим даје 90% тачности при 10–20 ms, accurate — 95% при 30–50 ms. За продукцију користите accurate са филтрирањем по 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 на iOS: Vision је бржи на старијим уређајима (iPhone X–13) захваљујући уграђеном ANE. ML Kit је прецизнији на сложеним сценама (изобличења, нагиби, одсјаји) захваљујући Google моделу обученом на милионима scene text слика. Vision не подржава confidence за појединачне знакове (само за речи), што ограничава филтрирање. За документе — Vision (брже), за scene text — ML Kit (прецизније).
Tesseract OCR — open-source мотор за препознавање текста, развијен од HP-а (1985–1998) а настављен од Google-а (2006+). Tesseract 5 (LSTM-based) користи неуронску архитектуру CRNN, што даје значајан пораст тачности у поређењу са Tesseract 4 (класични + LSTM). Tesseract подржава 100+ језика, укључујући ћирилицу, арапски, хебрејски и CJK. За Android — tess-two (fork), за iOS — swift-tesseract.
Недостаци Tesseract-а: брзина 50–200 ms по кадру (CPU-only, нема GPU убрзања), захтева предобраду слике (бинаризација, дескју, одређивање оријентације) пре слања у мотор, нема уграђену детекцију текста — потребно је послати област слике (често у пару са OpenCV Text Detection или EAST). Tesseract даје 90% тачности на чистим документима и ~70% на scene text.
Када изабрати Tesseract: ако апликација ради на уређајима без Google Play (Huawei), потребна је подршка за ретке језике (санскрит, хебрејски) или је потребна потпуна прилагодба OCR pipeline-а (тренинг на сопственим фонтовима). За све остале случајеве ML Kit или Vision су бржи, прецизнији и захтевају мање кода. Tesseract је оправдан избор само када постоје ограничења на треће стране SDK.
// Tesseract OCR преко 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) // Бинаризација + deskew
tess.setImage(gray)
val result = tess.utF8Text
tess.recycle()
Предобрада за Tesseract је обавезна: конверзија у grayscale, бинаризација (Otsu или Adaptive), уклањање нагиба (deskew), уклањање шума (median blur). Без предобраде тачност Tesseract-а пада на 50–60%. Користите OpenCV за предобраду: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). За документе са равномерном позадином довољна је бинаризација, за scene text — комплетан pipeline.
Квалитет слике — главни фактор тачности OCR. ML Kit и Vision имају уграђену предобраду, али за сложене случајеве (тамне фотографије, замућење, пресветљења) додатна обрада повећава тачност за 10–15%. Основне технике: повећање контраста (CLAHE), уклањање замућења (unsharp mask), корекција перспективе (perspective transform), уклањање сенки и одсјаја.
CLAHE (Contrast Limited Adaptive Histogram Equalization) — адаптивно изједначавање хистограма, побољшава контраст локалних области. CLAHE је ефикасан за фотографије докумената са неравномерним осветљењем (део у сенци, део на светлу). OpenCV Core.createCLAHE са clipLimit=2.0 и tileGridSize=(8,8) даје оптималан резултат за OCR. После CLAHE, тачност ML Kit на тамним документима расте са 70% на 88%.
Корекција перспективе — обавезна за фотографије докумената под углом. Користите OpenCV findHomography + warpPerspective за поравнање документа. За аутоматско детектовање ивица документа користите Canny edge detection + findContours + approxPolyDP. После корекције перспективе, тачност OCR расте за 20–30% за снимке под углом >30°.
// CLAHE + OpenCV preprocessing
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)
Детекција текста пре OCR — за scene text користите EAST (Efficient Accurate Scene Text Detector) или CRAFT (Character Region Awareness for Text Detection) пре слања у OCR. EAST детектује bounding box текста на сцени за 5–15 ms. CRAFT је прецизнији (97%), али спорији (50–100 ms). Детекција текста омогућава одсецање области без текста и слање у OCR само релевантних делова, што убрзава укупну обраду.
Сканирање докумената — најмасовнија примена OCR. Апликације за скенирање (CamScanner, Adobe Scan, Google Drive) користе ML Kit или Vision за препознавање текста са фотографија докумената. Типичан pipeline: детекција ивица документа → корекција перспективе → CLAHE обрада → OCR → форматирање (PDF, DOCX). ML Kit Text Recognition V2 обрађује страницу A4 за 100–200 ms.
Превођење текста у реалном времену — комбинација OCR и машинског превођења. Google Translate, Microsoft Translator, Yandex Translate користе ML Kit или Vision за препознавање текста са камере и постављају превод преко оригиналног текста (AR превод). Захтев: latency < 200 ms за удобан UX. ML Kit V2 + NNAPI даје 30–80 ms по кадру, остављајући простор за превод и рендеровање.
Аутоматски унос података — OCR за издвајање података са визиткарти, банковних картица, личних докумената. ML Kit препознаје текст, затим post-processing парсира структуру: име, телефон, email (визиткарте) или број картице, рок, CVV (платне картице). За визиткарте користите регуларне изразе после OCR. За банковне картице — специјализоване ML моделе (плаћене, ~99% тачности).
// OCR + AR превод (поједностављено)
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
// Превод и AR рендеровање изнад правоугаоника
DispatchQueue.main.async {
overlayView.showTranslation(text, at: rect)
}
}
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false
OCR за особе са оштећењем вида — Assistive Technology: апликације читају текст са паковања, менија, натписа. Користе ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer). Кључни захтев — real-time са малим кашњењем (< 100 ms). Seeing AI (Microsoft) и Envision AI користе овај приступ. За accessibility апликације користите fast recognition режим и не филтрирајте по confidence — кориснику је важан сваки текст.
Често постављана питања
Text Recognition (OCR) — технологија која омогућава апликацији да „чита" текст са фотографија и видеа. Камера паметног телефона снима слику, неуронска мрежа на уређају препознаје знакове и враћа машински читљив текст. У мобилним апликацијама OCR се користи за скенирање докумената, превођење са камере, унос података са визиткарти и креирање приступачних интерфејса за особе са оштећењем вида.
ML Kit Text Recognition — најбољи избор за Android: 96% тачност, 10–30 ms брзина, 45 језика, GPU убрзање преко NNAPI, проналази текст било које оријентације. Tesseract — open-source алтернатива (90% тачност, 100+ језика, CPU), погодна за уређаје без Google Play или ретке језике. За 95% пројеката бирајте ML Kit — бржи је, прецизнији и не захтева предобраду слике.
Не, ML Kit Text Recognition, Apple Vision и Tesseract раде потпуно on-device. ML Kit може преузети модел при првом покретању (downloaded mode), након чега ради офлајн. Apple Vision је уграђен у iOS, не захтева интернет. Tesseract је потпуно офлајн. Cloud OCR (Google Cloud Vision, AWS Textract) раде преко интернета, али се не користе у мобилним real-time апликацијама.
ML Kit Text Recognition V2 подржава 45+ језика латинске и ћириличне групе: енглески, руски, немачки, француски, шпански, италијански, португалски, пољски, украјински, румунски, турски и друге. V1 (CJK) додатно подржава кинески, јапански, корејски. Комплетна листа — у документацији TextRecognizerOptions. За препознавање арапског или хебрејског користите Tesseract (>100 језика).
Основне методе: поравнање документа (perspective correction преко OpenCV), побољшање контраста (CLAHE), уклањање замућења (unsharp mask), добро осветљење (continuous auto-exposure), стабилизација камере (OIS/EIS). ML Kit сам обрађује основна изобличења, али за документе са перспективним изобличењима (>30°) предобрада повећава тачност за 20–30%. Користите fast recognition режим за видео.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође