Tətbiqlərdə Text Recognition — bu nədir, OCR və Vision

Müəllif: IT Sectr Dərc olunub: 2026-07-18 Oxuma vaxtı: 10 dəq

Text Recognition (OCR — Optical Character Recognition) — bu, şəkillərdən və video axınından çap edilmiş və ya əlyazma mətninin çıxarılması texnologiyasıdır. Mobil proqramlaşdırmada Text Recognition sənədlərin rəqəmsallaşdırılması, nömrə nişanlarının tanınması, vizit kartlarının oxunması və real vaxtda mətnin tərcüməsi üçün istifadə olunur. Əsas mobil OCR həlləri: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (open-source). Google ML Kit, 2025 məlumatlarına görə, Text Recognition V2 kadrı 10–30 ms-də emal edir, latın əlifbasında 96% və kiril əlifbasında 91% dəqiqliklə.

Əsas məqamlar

  • Text Recognition — şəkillərdən və videodan mətnin çıxarılması (OCR)
  • ML Kit Text Recognition — 45+ dil, 96% dəqiqlik (latın), 10–30 ms
  • Apple Vision — VNRecognizeTextRequest, 13+ dil, native iOS
  • Tesseract — open-source OCR, 100+ dil, 50–200 ms, CPU
  • Real-time — müasir cihazlarda CameraX/AVFoundation ilə 30 FPS-dək

Text Recognition nədir: OCR prinsipləri

Text Recognition (OCR) — mətn şəklini maşın oxuya bilən simvollara çevirən kompüter görmə prosesidir. OCR mərhələlərdən ibarətdir: şəklin ilkin emalı (binarizasiya, deskew, əyilmənin düzəldilməsi), seqmentasiya (sətirlərə, sözlərə, simvollara bölmə), tanıma (hər bir simvolun təsnifatı) və son emal (lüğətlə yoxlama, səhvlərin düzəldilməsi). Müasir OCR sistemləri (ML Kit, Vision) bütün mərhələləri birləşdirən end-to-end neyron şəbəkələrindən istifadə edir.

OCR növləri: çap mətni (printed text) — sənədlərdən, lövhələrdən, ekranlardan maşın mətninin tanınması — dəqiqlik 95–99%; əlyazma mətni (handwriting) — əlyazma girişinin tanınması — latın əlifbasında 80–90%, kiril əlifbasında 70–80% dəqiqlik; kontekst mətni (scene text) — təbii səhnələrdə mətn: ev nömrələri, yol nişanları, mağaza adları — perspektiv təhriflər və parlama səbəbindən ən çətinidir.

CRNN + CTC Loss — müasir OCR modellərində istifadə olunan arxitektura. Convolutional Recurrent Neural Network (CNN + LSTM) şəklin xüsusiyyətlərini çıxarır, Connectionist Temporal Classification isə ilkin seqmentasiyaya ehtiyac olmadan simvol ardıcıllığını dekodlaşdırır. CRNN istənilən uzunluqdakı mətnlərlə işləyir, əyilmə və təhriflərə davamlıdır. arXiv (2025) məlumatlarına görə, CRNN modelləri ICDAR 2019 benchmarkında 97.5% dəqiqlik verir.

OCR HəlliDəqiqlikSürətDillərPlatforma
ML Kit V296%10–30 ms45+Android, iOS
Apple Vision95%10–40 ms13+iOS, macOS
Tesseract 590%50–200 ms100+Çarpaz platforma
Google Cloud Vision98%500–1000 ms200+Server (API)

Mobil cihazlar üçün CRNN — ML Kit INT8 kvantlaşdırması ilə MobileNetV2 + CRNN modelindən istifadə edir. Model 2–5 MB (latent) yer tutur və TFLite Delegate vasitəsilə GPU/NPU-da icra olunur. Tesseract-dan (klassik pipeline) fərqli olaraq, neyron şəbəkə OCR ayrıca simvol seqmentasiyası tələb etmir və səs-küyə daha davamlıdır. Çatışmazlıq: real-time üçün GPU və ya NPU tələb olunur — təmiz CPU-da sürət 5–10 FPS-dək düşür.

Android və iOS-da ML Kit Text Recognition

ML Kit Text Recognition — mobil tətbiqlər üçün əsas OCR alətidir. İki versiyada mövcuddur: V2 (Latin-based — latın əlifbası, kiril, rəqəmlər üçün optimallaşdırılıb) və V1 (Latin + CJK — yapon, çin, koreya, lakin daha yavaş). V2 end-to-end CRNN modelindən, V1 isə daha köhnə CNN + LSTM-dən istifadə edir. Google CJK tanınması ehtiyacı olmayan bütün hallar üçün V2-ni tövsiyə edir.

ML Kit nəticəsinin strukturu: Text → TextBlock → Line → Element (Word/Symbol). Hər səviyyənin bounding box, confidence (0..1) və recognised text dəyəri var. Text — fullText ilə kök obyekt (bütün tanınmış mətn bir sətirdə). TextBlock — mətnin məntiqi bloku (abzas, sütun). Line — mətn sətri. Element — söz və ya simvol. Qeyri-dəqiq tanımaları filtrləmək üçün confidence istifadə edin.

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 */ }

iOS-da ML Kit vasitəsilə Text Recognition: API Android-ə bənzəyir, lakin InputImage əvəzinə UIImage/CVPixelBuffer istifadə edir. ML Kit avtomatik olaraq Core ML Delegate vasitəsilə A12+ də Apple Neural Engine-dən istifadə edir. iOS üçün ML Kit Text Recognition V2 iPhone 15 Pro-da 15–30 ms sürət göstərir. Maksimum performans üçün UIImage-ni ötürmədən əvvəl CVPixelBuffer-a çevirin — bu, çevirmə yükünü azaldır.

Apple Vision Framework: VNRecognizeTextRequest

Apple Vision Framework VNRecognizeTextRequest (iOS 13+) vasitəsilə native OCR təmin edir. Vision OCR Apple Neural Engine (ANE) istifadə edir və əlavə SDK tələb etmir. 13 dili dəstəkləyir (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Vision avtomatik olaraq mətnin dilini təyin edir (language correction) və bir kadrda çox dilli mətnləri dəstəkləyir. Sürət — A16+ da 10–40 ms.

Vision OCR xüsusiyyətləri: recognitionLevel (fast vs accurate), automaticLanguageDetection, customWords (spesifik terminlərin əlavə edilməsi), top candidates dəstəyi (qeyri-seli mətn üçün bir neçə tanıma variantı). Fast rejimi 10–20 ms-də 90% dəqiqlik, accurate isə 30–50 ms-də 95% dəqiqlik verir. İstehsalatda confidence >= 0.5 ilə filtrləmə ilə accurate istifadə edin.

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])

iOS-da Vision vs ML Kit: Vision köhnə cihazlarda (iPhone X–13) daxili ANE sayəsində daha sürətlidir. ML Kit milyonlarla scene text şəkli üzərində təlim keçmiş Google modeli sayəsində mürəkkəb səhnələrdə (təhriflər, əyilmələr, parlamalar) daha dəqiqdir. Vision fərdi simvollar üçün confidence dəstəkləmir (yalnız sözlər üçün), bu da filtrləməni məhdudlaşdırır. Sənədlər üçün — Vision (daha sürətli), scene text üçün — ML Kit (daha dəqiq).

Tesseract OCR: open-source alternativ

Tesseract OCR — HP tərəfindən işlənib hazırlanmış (1985–1998) və Google tərəfindən inkişaf etdirilən (2006+) open-source mətn tanıma mühərrikidir. Tesseract 5 (LSTM-based) CRNN neyron şəbəkə arxitekturasından istifadə edir ki, bu da Tesseract 4 (klassik + LSTM) ilə müqayisədə əhəmiyyətli dəqiqlik artımı verir. Tesseract 100+ dili, o cümlədən kiril, ərəb, ivrit və CJK dəstəkləyir. Android üçün — tess-two (fork), iOS üçün — swift-tesseract.

Tesseract-ın çatışmazlıqları: kadr başına 50–200 ms sürət (CPU-only, GPU sürətləndirməsi yoxdur), mühərrikə ötürmədən əvvəl şəklin ilkin emalını tələb edir (binarizasiya, deskew, oriyentasiyanın təyini), daxili mətn deteksiyası yoxdur — şəklin sahəsini ötürmək lazımdır (tez-tez OpenCV Text Detection və ya EAST ilə birlikdə). Tesseract təmiz sənədlərdə 90% və scene text-də ~70% dəqiqlik verir.

Nə vaxt Tesseract seçməli: tətbiq Google Play olmayan cihazlarda işləyirsə (Huawei), nadir dillərə (sanskrit, ivrit) dəstək lazımdırsa və ya OCR pipeline-nin tam fərdiləşdirilməsi tələb olunursa (öz şriftlərinizdə öyrənmə). Qalan bütün hallarda ML Kit və ya Vision daha sürətli, daha dəqiq və daha az kod tələb edir. Tesseract yalnız üçüncü tərəf SDK-larına məhdudiyyətlər olduqda haqlı seçimdir.

kotlin
// Tesseract OCR tess-two vasitəsilə
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) // Binarizasiya + deskew

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

Tesseract üçün ilkin emal məcburidir: grayscale-ə çevirmə, binarizasiya (Otsu və ya Adaptive), əyilmənin düzəldilməsi (deskew), səs-küyün silinməsi (median blur). İlkin emal olmadan Tesseract-ın dəqiqliyi 50–60%-dək düşür. Emal üçün OpenCV istifadə edin: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Bərabər fonlu sənədlər üçün binarizasiya kifayətdir, scene text üçün — tam pipeline.

OCR üçün şəkillərin ilkin emalı

Şəkil keyfiyyəti — OCR dəqiqliyinin əsas amilidir. ML Kit və Vision daxili ilkin emala malikdir, lakin mürəkkəb hallarda (qaranlıq fotolar, bulanıqlıq, parlama) əlavə emal dəqiqliyi 10–15% artırır. Əsas texnikalar: kontrastın artırılması (CLAHE), bulanıqlığın aradan qaldırılması (unsharp mask), perspektiv korreksiyası (perspective transform), kölgə və parlamaların silinməsi.

CLAHE (Contrast Limited Adaptive Histogram Equalization) — adaptiv histogram bərabərləşdirməsi, lokal sahələrin kontrastını yaxşılaşdırır. CLAHE qeyri-bərabər işıqlandırma ilə sənəd fotoları üçün effektivdir (bir hissə kölgədə, bir hissə işıqda). clipLimit=2.0 və tileGridSize=(8,8) ilə OpenCV Core.createCLAHE OCR üçün optimal nəticə verir. CLAHE-dən sonra qaranlıq sənədlərdə ML Kit dəqiqliyi 70%-dən 88%-ə yüksəlir.

Perspektiv korreksiyası — bucaq altında çəkilmiş sənəd fotoları üçün məcburidir. Sənədi düzləşdirmək üçün OpenCV findHomography + warpPerspective istifadə edin. Sənədin sərhədlərini avtomatik aşkarlamaq üçün Canny edge detection + findContours + approxPolyDP istifadə edin. Perspektiv korreksiyasından sonra OCR dəqiqliyi >30° bucaq altında çəkilmiş şəkillər üçün 20–30% artır.

kotlin
// 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-dən əvvəl mətn deteksiyası — scene text üçün OCR-ə ötürmədən əvvəl EAST (Efficient Accurate Scene Text Detector) və ya CRAFT (Character Region Awareness for Text Detection) istifadə edin. EAST səhnədə mətnin bounding box-nı 5–15 ms-də aşkarlayır. CRAFT daha dəqiqdir (97%), lakin daha yavaşdır (50–100 ms). Mətn deteksiyası mətnsiz sahələri kəsməyə və OCR-ə yalnız müvafiq hissələri ötürməyə imkan verir ki, bu da ümumi emalı sürətləndirir.

OCR-nin mobil tətbiqlərdə tətbiqi

Sənədlərin skan edilməsi — OCR-nin ən kütləvi tətbiqidir. Skan etmə tətbiqləri (CamScanner, Adobe Scan, Google Drive) sənəd fotolarından mətn tanınması üçün ML Kit və ya Vision istifadə edir. Tipik pipeline: sənəd sərhədlərinin deteksiyası → perspektiv korreksiyası → CLAHE emalı → OCR → formatlaşdırma (PDF, DOCX). ML Kit Text Recognition V2 A4 səhifəsini 100–200 ms-də emal edir.

Real vaxtda mətn tərcüməsi — OCR və maşın tərcüməsinin kombinasiyası. Google Translate, Microsoft Translator, Yandex Translate kameradan mətn tanınması üçün ML Kit və ya Vision istifadə edir və tərcüməni orijinal mətn üzərində göstərir (AR tərcümə). Tələb: rahat UX üçün latency < 200 ms. ML Kit V2 + NNAPI kadr başına 30–80 ms verir, tərcümə və render üçün ehtiyat buraxır.

Avtomatik məlumat daxil etmə — vizit kartlarından, bank kartlarından, şəxsiyyət vəsiqələrindən məlumatların çıxarılması üçün OCR. ML Kit mətni tanıyır, sonra post-processing strukturu pars edir: ad, telefon, email (vizit kartları) və ya kart nömrəsi, müddət, CVV (ödəniş kartları). Vizit kartları üçün OCR-dən sonra müntəzəm ifadələrdən istifadə edin. Bank kartları üçün — ixtisaslaşdırılmış ML modelləri (pullu, ~99% dəqiqlik).

swift
// OCR + AR tərcümə (sadələşdirilmiş)
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
        // Tərcümə və AR render düzbucaqlı üzərində
        DispatchQueue.main.async {
            overlayView.showTranslation(text, at: rect)
        }
    }
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false

Görmə məhdudiyyəti olan insanlar üçün OCR — Assistive Technology: tətbiqlər qablaşdırmalardan, menyulardan, lövhələrdən mətni səsləndirir. ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer) istifadə edirlər. Əsas tələb — aşağı gecikmə ilə real vaxt (< 100 ms). Seeing AI (Microsoft) və Envision AI bu yanaşmadan istifadə edir. Əlçatanlıq tətbiqləri üçün fast recognition rejimindən istifadə edin və confidence-ə görə filtrləməyin — istifadəçi üçün hər mətn vacibdir.

Tez-tez verilən suallar

Mobil tətbiqlərdə Text Recognition (OCR) nədir?

Text Recognition (OCR) — tətbiqə şəkillərdən və videodan mətni "oxumağa" imkan verən texnologiyadır. Smartfon kamerası şəkli çəkir, cihazdakı neyron şəbəkə simvolları tanıyır və maşın oxuya bilən mətni qaytarır. Mobil tətbiqlərdə OCR sənədlərin skan edilməsi, kameradan tərcümə, vizit kartlarından məlumat daxil etmə və görmə məhdudiyyəti olan insanlar üçün əlçatan interfeyslərin yaradılması üçün istifadə olunur.

Android üçün hansı OCR daha yaxşıdır: ML Kit yoxsa Tesseract?

ML Kit Text Recognition — Android üçün ən yaxşı seçimdir: 96% dəqiqlik, 10–30 ms sürət, 45 dil, NNAPI vasitəsilə GPU sürətləndirməsi, istənilən oriyentasiyada mətn tapır. Tesseract — open-source alternativdir (90% dəqiqlik, 100+ dil, CPU), Google Play olmayan cihazlar və ya nadir dillər üçün uyğundur. Layihələrin 95%-də ML Kit seçin — daha sürətli, daha dəqiq və ilkin şəkil emalı tələb etmir.

Mobil cihazda OCR üçün internet tələb olunurmu?

Xeyr, ML Kit Text Recognition, Apple Vision və Tesseract tam on-device işləyir. ML Kit modeli ilk işə salmada yükləyə bilər (downloaded mode), bundan sonra offline işləyir. Apple Vision iOS-a daxildir, internet tələb etmir. Tesseract tamamilə offlinedır. Cloud OCR (Google Cloud Vision, AWS Textract) internet üzərindən işləyir, lakin mobil real vaxt tətbiqlərində istifadə olunmur.

ML Kit Text Recognition hansı dilləri dəstəkləyir?

ML Kit Text Recognition V2 latın və kiril qrupundan 45+ dili dəstəkləyir: ingilis, rus, alman, fransız, ispan, italyan, portuqal, polyak, ukrayna, rumın, türk və digərləri. V1 (CJK) əlavə olaraq çin, yapon, koreya dillərini dəstəkləyir. Tam siyahı TextRecognizerOptions sənədləşməsindədir. Ərəb və ya ivrit tanınması üçün Tesseract istifadə edin (>100 dil).

Sənəd fotolarında OCR dəqiqliyini necə yaxşılaşdırmaq olar?

Əsas üsullar: sənədin düzləşdirilməsi (OpenCV ilə perspective correction), kontrastın yaxşılaşdırılması (CLAHE), bulanıqlığın aradan qaldırılması (unsharp mask), yaxşı işıqlandırma (continuous auto-exposure), kamera stabilizasiyası (OIS/EIS). ML Kit əsas təhrifləri özü emal edir, lakin perspektiv təhrifləri olan sənədlər üçün (>30°) ilkin emal dəqiqliyi 20–30% artırır. Video üçün fast recognition rejimindən istifadə edin.

Nəticə

  • Text Recognition — mobil cihazlarda OCR: çap, əlyazma, scene text
  • ML Kit V2 — 96% dəqiqlik, 45+ dil, 10–30 ms, GPU/NPU sürətləndirməsi
  • Apple Vision — native iOS OCR (iOS 13+), 13 dil, ANE vasitəsilə
  • Tesseract 5 — open-source, 100+ dil, 50–200 ms (CPU), Huawei üçün fallback
  • İlkin emal — CLAHE, deskew, perspektiv korreksiyası dəqiqliyi 10–30% artırır
  • Real-time — ML Kit və ya Vision ilə CameraX/AVFoundation vasitəsilə 30 FPS-dək
  • On-device — bütün hesablamalar lokal, məlumat məxfiliyi təmin olunur

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun