Text Recognition (OCR — Optical Character Recognition) — bu tasvirlar va video oqimidan bosma yoki qo'lyozma matnni ajratib olish texnologiyasidir. Mobil dasturlashda Text Recognition hujjatlarni raqamlashtirish, davlat raqam belgilarini aniqlash, vizitka kartalarini o'qish va matnni real vaqtda tarjima qilish uchun ishlatiladi. Asosiy mobil OCR yechimlari: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (open-source). Google ML Kit, 2025 ma'lumotlariga ko'ra, Text Recognition V2 kadrni 10–30 ms da qayta ishlaydi, lotin alifbosida 96% va kirill alifbosida 91% aniqlik bilan.
Asosiy fikrlar
Text Recognition (OCR) — matn tasvirini mashina o'qiy oladigan belgilarga aylantiruvchi kompyuter ko'rish jarayonidir. OCR bosqichlardan iborat: tasvirni oldindan qayta ishlash (binarizatsiya, deskew, qiyalikni tuzatish), segmentatsiya (qatorlar, so'zlar, belgilarga bo'lish), aniqlash (har bir belgini tasniflash) va keyingi ishlov berish (lug'at bilan tekshirish, xatolarni tuzatish). Zamonaviy OCR tizimlari (ML Kit, Vision) barcha bosqichlarni birlashtirgan end-to-end neyron tarmoqlaridan foydalanadi.
OCR turlari: bosma matn (printed text) — hujjatlar, belgilar, ekranlardan mashina matnini aniqlash — aniqlik 95–99%; qo'lyozma matn (handwriting) — qo'lda yozilgan matnni aniqlash — lotin alifbosida 80–90%, kirillda 70–80% aniqlik; kontekst matni (scene text) — tabiiy sahnalardagi matn: uy raqamlari, yo'l belgilari, do'kon nomlari — perspektiv buzilishlar va yorqinlik tufayli eng murakkab.
CRNN + CTC Loss — zamonaviy OCR modellarida qo'llaniladigan arxitektura. Convolutional Recurrent Neural Network (CNN + LSTM) tasvir xususiyatlarini ajratadi, Connectionist Temporal Classification esa oldindan segmentatsiyaga ehtiyoj sezmasdan belgilar ketma-ketligini dekodlaydi. CRNN istalgan uzunlikdagi matnlar bilan ishlaydi, qiyalik va buzilishlarga chidamli. arXiv (2025) ma'lumotlariga ko'ra, CRNN modellari ICDAR 2019 benchmarkida 97.5% aniqlik beradi.
| OCR Yechimi | Aniqlik | Tezlik | Tillar | Platforma |
|---|---|---|---|---|
| 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+ | Ko'p platformali |
| Google Cloud Vision | 98% | 500–1000 ms | 200+ | Server (API) |
Mobil qurilmalar uchun CRNN — ML Kit INT8 kvantlash bilan MobileNetV2 + CRNN modelidan foydalanadi. Model 2–5 MB (latent) joy egallaydi va TFLite Delegate orqali GPU/NPU da bajariladi. Tesseract-dan (klassik pipeline) farqli o'laroq, neyron tarmoq OCR alohida belgi segmentatsiyasini talab qilmaydi va shovqinga chidamliroq. Kamchilik: real-time uchun GPU yoki NPU talab qilinadi — sof CPU da tezlik 5–10 FPS gacha tushadi.
ML Kit Text Recognition — mobil ilovalar uchun asosiy OCR vositasidir. Ikki versiyada mavjud: V2 (Latin-based — lotin, kirill, raqamlar uchun optimallashtirilgan) va V1 (Latin + CJK — yapon, xitoy, koreys, lekin sekinroq). V2 end-to-end CRNN modelidan, V1 esa eskiroq CNN + LSTM dan foydalanadi. Google CJK aniqlash zarurati bo'lmagan barcha hollar uchun V2 ni tavsiya qiladi.
ML Kit natijasining tuzilishi: Text → TextBlock → Line → Element (Word/Symbol). Har bir daraja bounding box, confidence (0..1) va recognised text ga ega. Text — fullText bilan ildiz obyekt (barcha aniqlangan matn bir qatorda). TextBlock — matnning mantiqiy bloki (paragraf, ustun). Line — matn qatori. Element — so'z yoki belgi. Noto'g'ri aniqlashlarni filtrlash uchun confidence dan foydalaning.
// 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 */ }
iOS da ML Kit orqali Text Recognition: API Android ga o'xshaydi, lekin InputImage o'rniga UIImage/CVPixelBuffer ishlatadi. ML Kit avtomatik ravishda Core ML Delegate orqali A12+ da Apple Neural Engine dan foydalanadi. iOS uchun ML Kit Text Recognition V2 iPhone 15 Pro da 15–30 ms tezlikni ko'rsatadi. Maksimal ishlash uchun UIImage ni uzatishdan oldin CVPixelBuffer ga aylantiring — bu konvertatsiya yukini kamaytiradi.
Apple Vision Framework VNRecognizeTextRequest (iOS 13+) orqali native OCR ni ta'minlaydi. Vision OCR Apple Neural Engine (ANE) dan foydalanadi va qo'shimcha SDK talab qilmaydi. 13 tilni qo'llab-quvvatlaydi (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Vision avtomatik ravishda matn tilini aniqlaydi (language correction) va bir kadrda bir nechta tilni qo'llab-quvvatlaydi. Tezlik — A16+ da 10–40 ms.
Vision OCR xususiyatlari: recognitionLevel (fast vs accurate), automaticLanguageDetection, customWords (maxsus atamalarni qo'shish), top candidates qo'llab-quvvatlashi (noaniq matn uchun bir nechta aniqlash varianti). Fast rejimi 10–20 ms da 90% aniqlik, accurate esa 30–50 ms da 95% aniqlik beradi. Ishlab chiqarishda confidence >= 0.5 bilan filtrlash bilan accurate dan foydalaning.
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])
iOS da Vision vs ML Kit: Vision eski qurilmalarda (iPhone X–13) o'rnatilgan ANE tufayli tezroq. ML Kit millionlab scene text tasvirlari ustida o'qitilgan Google modeli tufayli murakkab sahnalarda (buzilishlar, qiyaliklar, yorqinliklar) aniqroq. Vision alohida belgilar uchun confidence ni qo'llab-quvvatlamaydi (faqat so'zlar uchun), bu filtrlashni cheklaydi. Hujjatlar uchun — Vision (tezroq), scene text uchun — ML Kit (aniqroq).
Tesseract OCR — HP tomonidan ishlab chiqilgan (1985–1998) va Google tomonidan rivojlantirilgan (2006+) open-source matnni aniqlash mexanizmidir. Tesseract 5 (LSTM-based) CRNN neyron tarmoq arxitekturasidan foydalanadi, bu Tesseract 4 (klassik + LSTM) bilan solishtirganda sezilarli aniqlik o'sishini beradi. Tesseract 100+ tilni, jumladan kirill, arab, ivrit va CJK ni qo'llab-quvvatlaydi. Android uchun — tess-two (fork), iOS uchun — swift-tesseract.
Tesseract ning kamchiliklari: kadr uchun 50–200 ms tezlik (CPU-only, GPU tezlashuvi yo'q), mexanizmga uzatishdan oldin tasvirni oldindan qayta ishlashni talab qiladi (binarizatsiya, deskew, orientatsiyani aniqlash), o'rnatilgan matn deteksiyasi yo'q — tasvir maydonini uzatish kerak (ko'pincha OpenCV Text Detection yoki EAST bilan birga). Tesseract toza hujjatlarda 90% va scene text da ~70% aniqlik beradi.
Qachon Tesseract ni tanlash kerak: agar ilova Google Play bo'lmagan qurilmalarda (Huawei) ishlasa, noyob tillarni (sanskrit, ivrit) qo'llab-quvvatlash zarur bo'lsa yoki OCR pipeline ini to'liq sozlash talab qilinsa (o'z shriftlarida o'qitish). Boshqa barcha hollarda ML Kit yoki Vision tezroq, aniqroq va kamroq kod talab qiladi. Tesseract faqat uchinchi tomon SDK lariga cheklovlar mavjud bo'lganda oqlangan tanlovdir.
// Tesseract OCR tess-two orqali
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) // Binarizatsiya + deskew
tess.setImage(gray)
val result = tess.utF8Text
tess.recycle()
Tesseract uchun oldindan qayta ishlash majburiy: grayscale ga aylantirish, binarizatsiya (Otsu yoki Adaptive), qiyalikni tuzatish (deskew), shovqinni olib tashlash (median blur). Oldindan qayta ishlashsiz Tesseract ning aniqligi 50–60% gacha tushadi. Qayta ishlash uchun OpenCV dan foydalaning: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Bir tekis fonli hujjatlar uchun binarizatsiya yetarli, scene text uchun — to'liq pipeline.
Tasvir sifati — OCR aniqligining asosiy omilidir. ML Kit va Vision o'rnatilgan oldindan qayta ishlashga ega, ammo murakkab hollarda (qorong'i fotosuratlar, xiralik, yorqinlik) qo'shimcha ishlov berish aniqlikni 10–15% oshiradi. Asosiy texnikalar: kontrastni oshirish (CLAHE), xiralikni bartaraf etish (unsharp mask), perspektivni tuzatish (perspective transform), soya va yorqinliklarni olib tashlash.
CLAHE (Contrast Limited Adaptive Histogram Equalization) — kontrast bilan cheklangan adaptiv histogram tenglashtirish, mahalliy hududlarning kontrastini yaxshilaydi. CLAHE notekis yoritilgan hujjat fotosuratlari uchun samarali (bir qismi soyada, bir qismi yorug'likda). clipLimit=2.0 va tileGridSize=(8,8) bilan OpenCV Core.createCLAHE OCR uchun optimal natija beradi. CLAHE dan keyin qorong'i hujjatlarda ML Kit aniqligi 70% dan 88% gacha ko'tariladi.
Perspektivni tuzatish — burchak ostida olingan hujjat fotosuratlari uchun majburiy. Hujjatni tekislash uchun OpenCV findHomography + warpPerspective dan foydalaning. Hujjat chegaralarini avtomatik aniqlash uchun Canny edge detection + findContours + approxPolyDP dan foydalaning. Perspektivni tuzatishdan keyin OCR aniqligi >30° burchak ostidagi suratlar uchun 20–30% ga oshadi.
// 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 dan oldin matn deteksiyasi — scene text uchun OCR ga uzatishdan oldin EAST (Efficient Accurate Scene Text Detector) yoki CRAFT (Character Region Awareness for Text Detection) dan foydalaning. EAST sahnadagi matnning bounding box ini 5–15 ms da aniqlaydi. CRAFT aniqroq (97%), lekin sekinroq (50–100 ms). Matn deteksiyasi matnsiz hududlarni kesish va OCR ga faqat tegishli qismlarni uzatish imkonini beradi, bu umumiy ishlov berishni tezlashtiradi.
Hujjatlarni skanerlash — OCR ning eng ommaviy qo'llanilishi. Skanerlash ilovalari (CamScanner, Adobe Scan, Google Drive) hujjat fotosuratlaridan matnni aniqlash uchun ML Kit yoki Vision dan foydalanadi. Odatdagi pipeline: hujjat chegaralarini deteksiya qilish → perspektivni tuzatish → CLAHE ishlov berish → OCR → formatlash (PDF, DOCX). ML Kit Text Recognition V2 A4 sahifasini 100–200 ms da qayta ishlaydi.
Matnni real vaqtda tarjima qilish — OCR va mashina tarjimasining kombinatsiyasi. Google Translate, Microsoft Translator, Yandex Translate kameradan matnni aniqlash uchun ML Kit yoki Vision dan foydalanadi va tarjimani asl matn ustiga qo'yadi (AR tarjima). Talab: qulay UX uchun latency < 200 ms. ML Kit V2 + NNAPI kadr uchun 30–80 ms beradi, tarjima va render uchun zaxira qoldiradi.
Avtomatik ma'lumot kiritish — vizitkalar, bank kartalari, shaxsiy guvohnomalardan ma'lumotlarni ajratish uchun OCR. ML Kit matnni aniqlaydi, keyin post-processing tuzilmani tahlil qiladi: ism, telefon, email (vizitkalar) yoki karta raqami, muddat, CVV (to'lov kartalari). Vizitkalar uchun OCR dan keyin muntazam ifodalardan foydalaning. Bank kartalari uchun — ixtisoslashtirilgan ML modellari (pullik, ~99% aniqlik).
// OCR + AR tarjima (soddalashtirilgan)
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
// Tarjima va AR render to'rtburchak ustida
DispatchQueue.main.async {
overlayView.showTranslation(text, at: rect)
}
}
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false
Ko'rish qobiliyati cheklangan odamlar uchun OCR — Assistive Technology: ilovalar paketlar, menyular, belgilardan matnni ovozli o'qishni ta'minlaydi. ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer) dan foydalanadi. Asosiy talab — past kechikish bilan real vaqt (< 100 ms). Seeing AI (Microsoft) va Envision AI bu yondashuvdan foydalanadi. Mavjudlik ilovalari uchun fast recognition rejimidan foydalaning va confidence bo'yicha filtrlashmang — foydalanuvchi uchun har qanday matn muhim.
Ko'p beriladigan savollar
Text Recognition (OCR) — ilovaga fotosuratlar va videodan matnni "o'qish" imkonini beruvchi texnologiya. Smartfon kamerasi tasvirni oladi, qurilmadagi neyron tarmoq belgilarni aniqlaydi va mashina o'qiy oladigan matnni qaytaradi. Mobil ilovalarda OCR hujjatlarni skanerlash, kamera orqali tarjima qilish, vizitkalardan ma'lumot kiritish va ko'rish qobiliyati cheklangan odamlar uchun qulay interfeyslar yaratish uchun ishlatiladi.
ML Kit Text Recognition — Android uchun eng yaxshi tanlov: 96% aniqlik, 10–30 ms tezlik, 45 til, NNAPI orqali GPU tezlashuvi, istalgan yo'nalishdagi matnni topadi. Tesseract — open-source alternativa (90% aniqlik, 100+ til, CPU), Google Play bo'lmagan qurilmalar yoki noyob tillar uchun mos. Loyihalarning 95 foizida ML Kit ni tanlang — u tezroq, aniqroq va tasvirni oldindan qayta ishlashni talab qilmaydi.
Yo'q, ML Kit Text Recognition, Apple Vision va Tesseract to'liq on-device ishlaydi. ML Kit modelni birinchi ishga tushirishda yuklab olishi mumkin (downloaded mode), keyin esa oflayn ishlaydi. Apple Vision iOS ga o'rnatilgan, internet talab qilmaydi. Tesseract to'liq oflayn. Cloud OCR (Google Cloud Vision, AWS Textract) internet orqali ishlaydi, lekin mobil real vaqt ilovalarida ishlatilmaydi.
ML Kit Text Recognition V2 lotin va kirill guruhidan 45+ tilni qo'llab-quvvatlaydi: ingliz, rus, nemis, fransuz, ispan, italyan, portugal, polyak, ukrain, rumin, turk va boshqalar. V1 (CJK) qo'shimcha ravishda xitoy, yapon, koreys tillarini qo'llab-quvvatlaydi. To'liq ro'yxat TextRecognizerOptions hujjatlarida. Arab yoki ivrit tilini aniqlash uchun Tesseract dan foydalaning (>100 til).
Asosiy usullar: hujjatni tekislash (OpenCV orqali perspective correction), kontrastni yaxshilash (CLAHE), xiralikni bartaraf etish (unsharp mask), yaxshi yoritish (continuous auto-exposure), kamera stabilizatsiyasi (OIS/EIS). ML Kit asosiy buzilishlarni o'zi qayta ishlaydi, lekin perspektiv buzilishlari bo'lgan hujjatlar uchun (>30°) oldindan qayta ishlash aniqlikni 20–30% oshiradi. Video uchun fast recognition rejimidan foydalaning.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.