Uygulamalarda Metin Tanıma — nedir, OCR ve Vision

Yazar: IT Sectr Yayınlanma: 2026-07-18 Okuma süresi: 10 dk

Metin Tanıma (OCR — Optik Karakter Tanıma), görüntülerden ve video akışlarından basılı veya el yazısı metinleri çıkaran bir teknolojidir. Mobil geliştirmede, Metin Tanıma belgeleri dijitalleştirmek, plaka tanımak, kartvizit okumak ve gerçek zamanlı metin çevirisi için kullanılır. Başlıca mobil OCR çözümleri: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (açık kaynak). Google ML Kit, 2025'e göre, Text Recognition V2 bir kareyi 10–30 ms'de işler ve Latin alfabesinde %96, Kiril alfabesinde %91 doğruluk sağlar.

Önemli Noktalar

  • Metin Tanıma — görüntü ve videodan metin çıkarma (OCR)
  • ML Kit Text Recognition — 45+ dil, %96 doğruluk (Latin), 10–30 ms
  • Apple Vision — VNRecognizeTextRequest, 13+ dil, yerel iOS
  • Tesseract — açık kaynak OCR, 100+ dil, 50–200 ms, CPU
  • Gerçek zamanlı — modern cihazlarda CameraX/AVFoundation ile 30 FPS'e kadar

Metin Tanıma Nedir: OCR İlkeleri

Metin Tanıma (OCR), metin görüntülerini makine tarafından okunabilir karakterlere dönüştüren bir bilgisayarlı görü sürecidir. OCR şu aşamalardan oluşur: görüntü ön işleme (ikilileştirme, deskew, eğrilik düzeltme), segmentasyon (satırlara, kelimelere, karakterlere ayırma), tanıma (her karakteri sınıflandırma) ve son işleme (sözlük kontrolü, hata düzeltme). Modern OCR sistemleri (ML Kit, Vision) tüm aşamaları birleştiren uçtan uca sinir ağları kullanır.

OCR Türleri: basılı metin — belgelerden, tabelalardan, ekranlardan daktilo metni tanıma — doğruluk %95–99%; el yazısı — el yazısı girişini tanıma — Latin alfabesinde %80–90, Kiril alfabesinde %70–80 doğruluk; sahne metni — doğal sahnelerdeki metin: ev numaraları, yol işaretleri, mağaza adları — perspektif bozulmaları ve parlamalar nedeniyle en zor olanı.

CRNN + CTC Loss — modern OCR modellerinde kullanılan mimari. Evrişimli Tekrarlayan Sinir Ağı (CNN + LSTM) görüntü özelliklerini çıkarırken, Bağlantıcı Zamansal Sınıflandırma ön segmentasyon gerektirmeden karakter dizisini çözer. CRNN her uzunluktaki metinle çalışır ve eğrilik ile bozulmalara karşı dayanıklıdır. arXiv (2025)'e göre, CRNN modelleri ICDAR 2019 benchmarkında %97.5 doğruluk elde eder.

OCR ÇözümüDoğrulukHızDilPlatform
ML Kit V2%9610–30 ms45+Android, iOS
Apple Vision%9510–40 ms13+iOS, macOS
Tesseract 5%9050–200 ms100+Platformlar arası
Google Cloud Vision%98500–1000 ms200+Sunucu (API)

Mobil cihazlar için CRNN — ML Kit, INT8 niceleme ile MobileNetV2 + CRNN modeli kullanır. Model 2–5 MB (gizli) boyutundadır ve TFLite Delegate aracılığıyla GPU/NPU'da çalışır. Tesseract'ın (klasik boru hattı) aksine, sinir ağı OCR'si ayrı karakter segmentasyonu gerektirmez ve gürültüye karşı daha dayanıklıdır. Dezavantajı: gerçek zamanlı için GPU veya NPU gerektirir — salt CPU'da hız 5–10 FPS'e düşer.

Android ve iOS'ta ML Kit Text Recognition

ML Kit Text Recognition, mobil uygulamalar için birincil OCR aracıdır. İki sürümde mevcuttur: V2 (Latin tabanlı — Latin, Kiril, rakamlar için optimize edilmiş) ve V1 (Latin + CJK — Japonca, Çince, Korece, ancak daha yavaş). V2 uçtan uca CRNN modeli kullanır, V1 daha eski bir CNN + LSTM kullanır. Google, CJK tanıma gerekmedikçe tüm durumlar için V2'yi önerir.

ML Kit sonuç yapısı: Text → TextBlock → Line → Element (Word/Symbol). Her seviyede sınırlayıcı kutu, güven (0..1) ve tanınan metin bulunur. Text, fullText (tüm tanınan metin tek satırda) ile kök nesnedir. TextBlock mantıksal bir metin bloğudur (paragraf, sütun). Line bir metin satırıdır. Element bir kelime veya semboldür. Hatalı tanımaları filtrelemek için confidence kullanın.

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'ta Metin Tanıma (ML Kit aracılığıyla): API Android'e benzer ancak InputImage yerine UIImage/CVPixelBuffer kullanır. ML Kit, Core ML Delegate aracılığıyla A12+'da Apple Neural Engine'i otomatik olarak kullanır. iOS için ML Kit Text Recognition V2, iPhone 15 Pro'da 15–30 ms hız gösterir. Maksimum performans için, geçirmeden önce UIImage'i CVPixelBuffer'a dönüştürün — bu dönüştürme yükünü azaltır.

Apple Vision Framework: VNRecognizeTextRequest

Apple Vision Framework, VNRecognizeTextRequest (iOS 13+) aracılığıyla yerel OCR sağlar. Vision OCR, Apple Neural Engine (ANE) kullanır ve ek SDK gerektirmez. 13 dili destekler (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Vision, metnin dilini otomatik olarak algılar (dil düzeltme) ve tek bir karede birden çok dili destekler. Hız — A16+'da 10–40 ms.

Vision OCR özellikleri: recognitionLevel (hızlı vs doğru), automaticLanguageDetection, customWords (belirli terimler ekleme), supportsTop candidates (bulanık metin için birden çok tanıma varyantı). Hızlı mod 10–20 ms'de %90 doğruluk, doğru mod 30–50 ms'de %95 doğruluk sağlar. Üretim için, confidence >= 0.5 ile filtreleyerek doğru modu kullanın.

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'ta Vision vs ML Kit: Vision, yerleşik ANE sayesinde eski cihazlarda (iPhone X–13) daha hızlıdır. ML Kit, milyonlarca sahne metni görüntüsü üzerinde eğitilmiş Google modeli sayesinde karmaşık sahnelerde (bozulma, eğrilik, parlama) daha doğrudur. Vision, tek tek karakterler için güveni desteklemez (yalnızca kelimeler için), bu da filtrelemeyi sınırlar. Belgeler için — Vision (daha hızlı), sahne metni için — ML Kit (daha doğru).

Tesseract OCR: Açık Kaynak Alternatif

Tesseract OCR, HP (1985–1998) tarafından geliştirilen ve Google (2006+) tarafından bakımı yapılan açık kaynaklı bir metin tanıma motorudur. Tesseract 5 (LSTM tabanlı), CRNN sinir ağı mimarisini kullanarak Tesseract 4'e (klasik + LSTM) kıyasla önemli bir doğruluk artışı sağlar. Tesseract, Kiril, Arapça, İbranice ve CJK dahil 100'den fazla dili destekler. Android için — tess-two (fork), iOS için — swift-tesseract.

Tesseract'ın dezavantajları: hız 50–200 ms/kare (yalnızca CPU, GPU hızlandırma yok), motora geçirmeden önce görüntü ön işleme (ikilileştirme, deskew, yön algılama) gerektirir, yerleşik metin algılama yok — görüntü bölgesinin geçirilmesi gerekir (genellikle OpenCV Text Detection veya EAST ile birlikte). Tesseract, temiz belgelerde %90 ve sahne metninde ~%70 doğruluk elde eder.

Tesseract ne zaman seçilmeli: uygulama Google Play olmayan cihazlarda (Huawei) çalışıyorsa, nadir dillerin (Sanskritçe, İbranice) desteği gerekiyorsa veya tam OCR boru hattı özelleştirmesi (özel yazı tiplerinde eğitim) gerekiyorsa. Diğer tüm durumlarda, ML Kit veya Vision daha hızlı, daha doğru ve daha az kod gerektirir. Tesseract yalnızca üçüncü taraf SDK'larda kısıtlama olduğunda haklı çıkar.

kotlin
// Tesseract OCR via 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) // İkilileştirme + deskew

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

Tesseract için ön işleme zorunludur: gri tonlamaya dönüştürme, ikilileştirme (Otsu veya Adaptive), deskew, gürültü giderme (median blur). Ön işleme olmadan Tesseract'ın doğruluğu %50–60'a düşer. Ön işleme için OpenCV kullanın: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Düzgün arka planlı belgeler için ikilileştirme yeterlidir, sahne metni için tam boru hattı gerekir.

OCR için Görüntü Ön İşleme

Görüntü kalitesi, OCR doğruluğu için ana faktördür. ML Kit ve Vision'da yerleşik ön işleme bulunur, ancak zor durumlarda (karanlık fotoğraflar, bulanıklık, aşırı pozlama) ek işleme, doğruluğu %10–15 artırır. Temel teknikler: kontrast iyileştirme (CLAHE), keskinleştirme (unsharp mask), perspektif düzeltme (perspective transform), gölge ve parlama giderme.

CLAHE (Kontrast Sınırlı Uyarlamalı Histogram Eşitleme) — yerel bölgelerdeki kontrastı iyileştiren uyarlamalı histogram eşitleme. CLAHE, eşit olmayan aydınlatmaya sahip belge fotoğrafları için etkilidir (kısmen gölge, kısmen aydınlık). clipLimit=2.0 ve tileGridSize=(8,8) ile OpenCV Core.createCLAHE, OCR için en uygun sonuçları verir. CLAHE sonrası, karanlık belgelerde ML Kit doğruluğu %70'ten %88'e yükselir.

Perspektif düzeltme — açılı çekilmiş belge fotoğrafları için zorunludur. Belgeyi hizalamak için OpenCV findHomography + warpPerspective kullanın. Otomatik belge sınırı algılama için Canny edge detection + findContours + approxPolyDP kullanın. Perspektif düzeltme sonrası, >30° açıyla çekilmiş fotoğraflarda OCR doğruluğu %20–30 artar.

kotlin
// CLAHE + OpenCV ön işleme
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 öncesi metin algılama — sahne metni için, OCR'ye geçirmeden önce EAST (Verimli Doğru Sahne Metni Dedektörü) veya CRAFT (Metin Algılama için Karakter Bölgesi Farkındalığı) kullanın. EAST, bir sahnedeki metin sınırlayıcı kutularını 5–15 ms'de algılar. CRAFT daha doğrudur (%97) ancak daha yavaştır (50–100 ms). Metin algılama, metin olmayan alanları filtrelemeye ve yalnızca ilgili bölgeleri OCR'ye geçirmeye izin vererek genel işlemeyi hızlandırır.

Mobil Uygulamalarda OCR Kullanım Alanları

Belge tarama — OCR'ın en yaygın uygulaması. Tarama uygulamaları (CamScanner, Adobe Scan, Google Drive), belge fotoğraflarından metin tanımak için ML Kit veya Vision kullanır. Tipik boru hattı: belge sınırı algılama → perspektif düzeltme → CLAHE işleme → OCR → biçimlendirme (PDF, DOCX). ML Kit Text Recognition V2, A4 sayfası başına 100–200 ms'de işler.

Gerçek zamanlı metin çevirisi — OCR ve makine çevirisinin birleşimi. Google Çeviri, Microsoft Translator, Yandex Çeviri, kameradan metin tanımak için ML Kit veya Vision kullanır ve çeviriyi orijinal metnin üzerine yerleştirir (AR çevirisi). Gereksinim: rahat bir UX için gecikme < 200 ms. ML Kit V2 + NNAPI, kare başına 30–80 ms sunarak çeviri ve işleme için pay bırakır.

Otomatik veri girişi — kartvizitlerden, banka kartlarından, kimliklerden veri çıkarmak için OCR. ML Kit metni tanır, ardından son işleme yapıyı ayrıştırır: ad, telefon, e-posta (kartvizitler) veya kart numarası, son kullanma tarihi, CVV (ödeme kartları). Kartvizitler için OCR sonrası düzenli ifadeler kullanın. Banka kartları için — uzmanlaşmış ML modelleri (ücretli, ~%99 doğruluk).

swift
// OCR + AR çevirisi (basitleştirilmiş)
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
        // Çeviri ve dikdörtgen üzerinde AR işleme
        DispatchQueue.main.async {
            overlayView.showTranslation(text, at: rect)
        }
    }
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false

Görme engelli kullanıcılar için OCR — Yardımcı Teknoloji: uygulamalar paketlerden, menülerden, tabelalardan metni sesli okur. ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer) kullanır. Temel gereksinim — düşük gecikmeli (< 100 ms) gerçek zamanlı. Seeing AI (Microsoft) ve Envision AI bu yaklaşımı kullanır. Erişilebilirlik uygulamaları için hızlı tanıma modu kullanın ve güvene göre filtrelemeyin — herhangi bir metin kullanıcı için değerlidir.

Sıkça Sorulan Sorular

Mobil uygulamalarda Metin Tanıma (OCR) nedir?

Metin Tanıma (OCR), bir uygulamanın fotoğraflardan ve videolardan metin okumasını sağlayan bir teknolojidir. Akıllı telefon kamerası bir görüntü yakalar, cihazdaki sinir ağı karakterleri tanır ve makine tarafından okunabilir metin döndürür. Mobil uygulamalarda OCR, belge tarama, kamera çevirisi, kartvizitlerden veri girişi ve görme engelli kullanıcılar için erişilebilir arayüzler oluşturmak için kullanılır.

Android için hangi OCR daha iyidir: ML Kit mi Tesseract mı?

ML Kit Text Recognition Android için en iyi seçimdir: %96 doğruluk, 10–30 ms hız, 45 dil, NNAPI ile GPU hızlandırma, metni her yönde bulur. Tesseract açık kaynaklı bir alternatiftir (%90 doğruluk, 100+ dil, CPU), Google Play olmayan cihazlar veya nadir diller için uygundur. Projelerin %95'i için ML Kit'i seçin — daha hızlı, daha doğru ve görüntü ön işleme gerektirmez.

Mobil cihazda OCR için internet gerekli mi?

Hayır, ML Kit Text Recognition, Apple Vision ve Tesseract tamamen cihazda çalışır. ML Kit, ilk başlatmada modeli indirebilir (indirilen mod), ardından çevrimdışı çalışır. Apple Vision, iOS'a entegredir ve internet gerektirmez. Tesseract tamamen çevrimdışıdır. Bulut OCR (Google Cloud Vision, AWS Textract) internet üzerinden çalışır ancak mobil gerçek zamanlı uygulamalarda kullanılmaz.

ML Kit Text Recognition hangi dilleri destekler?

ML Kit Text Recognition V2, Latin ve Kiril gruplarından 45'ten fazla dili destekler: İngilizce, Rusça, Almanca, Fransızca, İspanyolca, İtalyanca, Portekizce, Lehçe, Ukraynaca, Rumence, Türkçe ve diğerleri. V1 (CJK) ayrıca Çince, Japonca, Koreceyi destekler. Tam liste — TextRecognizerOptions dokümantasyonunda. Arapça veya İbranice tanımak için Tesseract (>100 dil) kullanın.

Belge fotoğraflarında OCR doğruluğu nasıl artırılır?

Temel yöntemler: belge hizalama (OpenCV ile perspektif düzeltme), kontrast iyileştirme (CLAHE), keskinleştirme (unsharp mask), iyi aydınlatma (sürekli otomatik pozlama), kamera sabitleme (OIS/EIS). ML Kit temel bozulmaları kendi başına halleder, ancak perspektif bozulmaları (>30°) olan belgelerde ön işleme doğruluğu %20–30 artırır. Video için hızlı tanıma modu kullanın.

Özet

  • Metin Tanıma — mobil cihazlarda OCR: basılı, el yazısı, sahne metni
  • ML Kit V2 — %96 doğruluk, 45+ dil, 10–30 ms, GPU/NPU hızlandırma
  • Apple Vision — yerel iOS OCR (iOS 13+), 13 dil, ANE aracılığıyla
  • Tesseract 5 — açık kaynak, 100+ dil, 50–200 ms (CPU), Huawei için alternatif
  • Ön işleme — CLAHE, deskew, perspektif düzeltme doğruluğu %10–30 artırır
  • Gerçek zamanlı — ML Kit veya Vision ile CameraX/AVFoundation üzerinden 30 FPS'e kadar
  • Cihazda — tüm hesaplama yerel, veri gizliliği garanti

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun