Flutter & Mobil İle Görüntü İşleme Tabanlı Metin Tarayıcı Nasıl Yapılır?

Flutter & Mobil İle Görüntü İşleme Tabanlı Metin Tarayıcı Nasıl Yapılır?
Flutter & Mobil İle Görüntü İşleme Tabanlı Metin Tarayıcı Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Projeye başlamadan önce geliştirme ortamınızın güncel olduğundan emin olmalısınız. 2026 yılı standartları gereği, Flutter 3.24 veya üzeri bir sürüm kullanmanız, performans ve güvenlik güncellemelerinden yararlanmanızı sağlar.

  • Flutter SDK 3.24+
  • Dart 3.5+
  • Android Studio veya VS Code (En güncel eklentilerle)
  • Test cihazı (Fiziksel kamera erişimi için emülatör yerine gerçek cihaz önerilir)

Projenizin pubspec.yaml dosyasına gerekli paketleri ekleyerek işe başlıyoruz. Görüntü işleme süreçlerinde Google'ın google_mlkit_text_recognition kütüphanesi endüstri standardıdır.

dependencies:
  flutter:
    sdk: flutter
  google_mlkit_text_recognition: ^0.13.0
  image_picker: ^1.1.0
  permission_handler: ^11.3.0

Yukarıdaki bağımlılıklar, sırasıyla metin tanıma motoru, cihazdan fotoğraf seçme ve kamera/galeri izinlerini yönetme görevlerini üstlenir.

Adım Adım Kamera ve Galeri İzinlerinin Yönetimi

Mobil uygulamalarda donanım erişimi, güvenlik ve kullanıcı gizliliği açısından kritik öneme sahiptir. Android ve iOS platformlarında gerekli izinleri yapılandırmadan kamera fonksiyonlarını çağıramazsınız.

Android tarafında android/app/src/main/AndroidManifest.xml dosyanıza şu satırları ekleyin:

Flutter tarafında ise kullanıcıdan izin istemek için permission_handler paketini kullanırız. İşte izin kontrolü için örnek kod yapısı:

Future requestCameraPermission() async {
  var status = await Permission.camera.status;
  if (!status.isGranted) {
    status = await Permission.camera.request();
  }
  return status.isGranted;
}

Bu fonksiyon, kamera izni verilip verilmediğini kontrol eder. Eğer izin yoksa kullanıcıya sistem diyalog penceresini açar.

Görüntü İşleme ve Metin Tanıma Motorunun Kurulumu

Metin tarayıcı uygulamamızın kalbi, TextRecognizer sınıfıdır. Bu sınıf, görüntü verisini alır ve içerisindeki metin bloklarını analiz ederek bir RecognizedText nesnesi döndürür.

import 'package:google_mlkit_text_recognition/google_mlkit_text_recognition.dart';

final textRecognizer = TextRecognizer(script: TextRecognitionScript.latin);

Future processImage(String imagePath) async {
  final inputImage = InputImage.fromFilePath(imagePath);
  final RecognizedText recognizedText = await textRecognizer.processImage(inputImage);
  
  return recognizedText.text;
}

Burada InputImage, ML Kit'in işleyebileceği formata görüntüyü dönüştürür. processImage metodu ise asenkron olarak çalışarak görüntüdeki tüm metin verilerini ayıklar.

Güvenlik Uyarısı: OCR işlemleri sırasında kullanıcı verilerinin gizliliği için görüntüleri sunucuya göndermeden önce cihaz üzerinde (on-device) işlemek, GDPR ve KVKK uyumluluğu açısından en güvenli yöntemdir. Bu rehberdeki yöntem, veriyi cihaz dışına çıkarmadan işlemektedir.

Kullanıcı Arayüzü ve Görüntü Seçme Akışı

Kullanıcının bir fotoğraf seçmesi ve bu fotoğrafın ekranda gösterilerek işlenmesi için ImagePicker paketini kullanıyoruz. Aşağıdaki örnek, bir buton yardımıyla galeri veya kameradan görüntü almayı sağlar.

final ImagePicker _picker = ImagePicker();

Future pickImage() async {
  final XFile? image = await _picker.pickImage(source: ImageSource.camera);
  if (image != null) {
    String extractedText = await processImage(image.path);
    // Sonucu UI üzerinde güncelle
    setState(() {
      _scannedText = extractedText;
    });
  }
}

Bu kod bloğu, kullanıcının kamerayı açmasını sağlar. Çekilen fotoğrafın yolu image.path üzerinden alınarak, daha önce tanımladığımız processImage fonksiyonuna iletilir.

OCR Yöntemlerinin Karşılaştırması

Mobil uygulamalarda metin tanıma için farklı yaklaşımlar mevcuttur. İhtiyacınıza göre en uygun yöntemi seçmeniz projenin başarısını belirler.

Yöntem Avantajı Dezavantajı
Google ML Kit (On-device) Çevrimdışı çalışır, hızlı, ücretsiz. Cihaz kaynağı tüketir.
Google Cloud Vision API Çok yüksek doğruluk, el yazısı desteği. İnternet gerektirir, maliyetli olabilir.

Sıkça Sorulan Sorular

OCR işlemi neden bazen hatalı sonuçlar veriyor?

Düşük ışık koşulları, bulanık fotoğraflar veya metnin çok küçük olması tanıma kalitesini düşürür. Kullanıcıyı fotoğraf çekmeden önce "daha aydınlık bir ortam" veya "net odaklama" konusunda yönlendiren bir arayüz tasarlamak bu sorunu minimize eder.

Uygulamanın dosya boyutu neden artıyor?

ML Kit modelleri, uygulama paketine dahil edildiğinde boyut artışına neden olur. Android için build.gradle dosyasında abiFilters kullanarak gereksiz mimarileri hariç tutabilirsiniz.

El yazısı metinleri tanıyabilir miyim?

Google ML Kit, standart daktilo metinlerinde mükemmel sonuç verir. El yazısı için Google Cloud Vision API veya özel eğitilmiş TensorFlow Lite modellerini kullanmanız gerekebilir.

Uygulama arka planda çalışabilir mi?

Görüntü işleme yoğun CPU/GPU kullanımı gerektirir. Arka planda sürekli bir işlem yapmak pil tüketimini hızla artıracaktır; bu nedenle sadece kullanıcı etkileşimiyle tetiklenen işlemleri tercih edin.

Veri güvenliği için nelere dikkat etmeliyim?

Kullanıcı verilerini işlerken görüntüleri kalıcı depolama alanında tutmamaya özen gösterin. İşlem bittikten sonra geçici dosyaları File.delete() metodu ile temizleyin.

OCR Performansını Optimize Etme ve İleri İpuçları

Uygulamanızda metin tanıma kalitesini artırmak, sadece kütüphane seçimiyle değil, aynı zamanda görüntü işleme süreçlerindeki ince ayarlarınızla doğrudan ilişkilidir. Kullanıcıdan alınan görüntünün kalitesi, OCR motorunun başarı oranını belirleyen en önemli faktördür.

Görüntü Ön İşleme (Preprocessing) Teknikleri

Kullanıcı kameradan fotoğraf çektiğinde, görüntünün parlaklığı veya açısı metin tanımayı zorlaştırabilir. Görüntüyü OCR motoruna göndermeden önce şu adımları uygulayarak başarı oranını %30'a kadar artırabilirsiniz:

  • Gri Ölçekleme (Grayscale): Renkli görsellerdeki gürültüyü azaltmak için görüntüyü siyah-beyaza çevirin.
  • Kontrast Artırma: Metin ile arka plan arasındaki farkı belirginleştirin.
  • Görüntü Kırpma (Cropping): Sadece metnin olduğu alanı taratmak, gereksiz arka plan verilerini eler.

Performans İçin Asenkron İşlem Yönetimi

OCR işlemleri yoğun CPU kullanımı gerektirir. Bu işlemleri ana iş parçacığında (UI Thread) yaparsanız, uygulamanız donacaktır. compute fonksiyonunu kullanarak işlemi ayrı bir izole alanda (Isolate) gerçekleştirmelisiniz.

import 'package:flutter/foundation.dart';
import 'package:google_mlkit_text_recognition/google_mlkit_text_recognition.dart';

Future processImageInBackground(InputImage inputImage) async {
  return await compute(_runOcr, inputImage);
}

Future _runOcr(InputImage inputImage) async {
  final textRecognizer = TextRecognizer(script: TextRecognitionScript.latin);
  final RecognizedText recognizedText = await textRecognizer.processImage(inputImage);
  await textRecognizer.close();
  return recognizedText.text;
}

Uygulama Dağıtımı ve Test Stratejileri

Uygulamanızı mağazalara (App Store ve Google Play) göndermeden önce, farklı cihaz çözünürlüklerinde ve farklı ışık koşullarında test etmeniz kritik öneme sahiptir. Özellikle düşük donanımlı cihazlarda ML Kit'in bellek kullanımını izlemek için Flutter DevTools üzerindeki Memory panelini kullanın.

Dağıtım Öncesi Kontrol Listesi

  1. ProGuard/R8 Yapılandırması: Android tarafında proguard-rules.pro dosyanıza ML Kit için gerekli kuralları eklediğinizden emin olun. Aksi takdirde, sürüm (release) modunda uygulama çökebilir.
  2. İzinlerin Doğrulanması: Uygulamanın kamera izni reddedildiğinde kullanıcıya açıklayıcı bir "Ayarlar" yönlendirmesi sunun.
  3. Model İndirme Boyutu: Google ML Kit, ilk çalıştırmada model dosyalarını indirebilir. Kullanıcıya bu süreçte bir "Yükleniyor..." ekranı göstererek deneyimi iyileştirin.

Hata Ayıklama (Debugging)

Eğer OCR sonuçları anlamsız karakterler dönüyorsa, görüntünün yönünü (rotation) kontrol edin. InputImageMetadata içerisinde rotation değerinin doğru ayarlandığından emin olun. Genellikle cihazın sensör verisi ile görüntünün fiziksel yönü uyuşmadığında metinler tanınamaz hale gelir.

İpucu: Kullanıcıya canlı önizleme ekranında "Metni hizalayın" şeklinde bir kılavuz çerçeve (overlay) sunmak, kullanıcı hatalarını minimize eder ve OCR başarısını doğrudan artırır.

Sonuç

Flutter ve Google ML Kit kullanarak bir metin tarayıcı geliştirmek, mobil uygulama geliştirme becerilerinizi üst seviyeye taşıyacak bir projedir. Bu rehberde, kamera erişiminden metin ayıklama sürecine kadar temel mimariyi kurduk. Bir sonraki adımda, ayıklanan metinleri bir veritabanına kaydetmeyi veya bu metinler üzerinde dil çevirisi yapmayı deneyebilirsiniz.

Yasal Sorumluluk Reddi: Bu makaledeki kod örnekleri eğitim amaçlıdır. Ticari uygulamalarınızda kullanmadan önce kütüphanelerin lisans sözleşmelerini inceleyiniz ve veri gizliliği politikalarına uygunluğu bir hukuk danışmanı ile teyit ediniz.

Uygulamanızı daha profesyonel hale getirmek için, metinleri taradıktan sonra kullanıcıya düzenlenebilir bir metin alanı (TextFormField) sunarak, OCR hatalarını manuel düzeltme imkanı tanımanızı öneririm.

Bu yazıya tepkinizi paylaşın:
Zeynep Arslan

Kullanıcı deneyimi odaklı içerik üretiminde uzmanlaşmış bir editörüm. Özellikle DIY projeleri ve teknik rehberler üzerine detaylı içerikler üretiyorum.

Yorumlar (0)

Yorum Yaz