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 се състои от етапи: предварителна обработка на изображението (бинаризация, deskew, коригиране на наклон), сегментация (разделяне на редове, думи, знаци), разпознаване (класификация на всеки знак) и последваща обработка (проверка с речник, коригиране на грешки). Съвременните OCR системи (ML Kit, Vision) използват end-to-end невронни мрежи, които обединяват всички етапи.
Типове 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 използва end-to-end 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 срещу 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 ускорение), изисква предварителна обработка на изображението (бинаризация, deskew, определяне на ориентация) преди подаване към двигателя, няма вградена детекция на текст — трябва да се подаде областта на изображението (често в комбинация с 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 предварителна обработка
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 превод). Изискване: латентност < 200 ms за комфортно потребителско изживяване. ML Kit V2 + NNAPI дава 30–80 ms на кадър, оставяйки резерв за превод и рендериране.
Автоматично въвеждане на данни — OCR за извличане на данни от визитки, банкови карти, лични документи. ML Kit разпознава текста, след това последващата обработка парсира структурата: име, телефон, имейл (визитки) или номер на карта, срок, 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 за хора с увредено зрение — Асистираща технология: приложенията четат текст от опаковки, менюта, табели. Използват ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer). Ключово изискване — реално време с ниска латентност (< 100 ms). Seeing AI (Microsoft) и Envision AI използват този подход. За приложения за достъпност използвайте 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) работят чрез интернет, но не се използват в мобилни приложения в реално време.
ML Kit Text Recognition V2 поддържа 45+ езика от латинската и кирилската група: английски, руски, немски, френски, испански, италиански, португалски, полски, украински, румънски, турски и други. V1 (CJK) допълнително поддържа китайски, японски, корейски. Пълният списък е в документацията на TextRecognizerOptions. За разпознаване на арабски или иврит използвайте Tesseract (>100 езика).
Основни методи: изравняване на документа (корекция на перспектива чрез OpenCV), подобряване на контраста (CLAHE), премахване на размазване (unsharp mask), добро осветление (continuous auto-exposure), стабилизиране на камерата (OIS/EIS). ML Kit сам обработва основните изкривявания, но за документи с перспективни изкривявания (>30°) предварителната обработка повишава точността с 20–30%. За видео използвайте fast recognition режим.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също