Makine Öğrenimi Kiti ve CameraX ile Metin Tanıma, Tanımlama ve Metin Çevirme: Android

1. Giriş

ML Kit, Google'ın makine öğrenimi uzmanlığını güçlü ancak kullanımı kolay bir pakette Android ve Android uygulamalarına getiren bir mobil SDK'dır. İster yeni ister deneyimli bir makine öğrenimine sahip olun, ihtiyacınız olan işlevi yalnızca birkaç satır kodla kolayca uygulayabilirsiniz. Başlamak için nöral ağlar veya model optimizasyonu hakkında kapsamlı bilgiye sahip olmanız gerekmez.

İşleyiş şekli

ML Kit, Google'ın Mobile Vision ve TensorFlow Lite gibi makine öğrenimi teknolojilerini tek bir SDK'da bir araya getirerek uygulamalarınızda makine öğrenimi tekniklerini uygulamayı kolaylaştırır. İster Mobile Vision'ın cihaz üzerindeki modellerinin gerçek zamanlı özelliklerine veya özel TensorFlow Lite modellerinin esnekliğine ihtiyacınız olsun, ML Kit yalnızca birkaç satır kodla bunu yapmanızı sağlar.

Bu codelab'de, gerçek zamanlı kamera feed'inizden mevcut Android uygulamanıza Metin Tanıma, Dil Kimliği ve Çeviri özelliklerini eklemek için uygulayabileceğiniz basit adımlar açıklanmaktadır. Bu codelab'de, CameraX'i Makine Öğrenimi Kiti API'leriyle kullanmayla ilgili en iyi uygulamalar da ele alınacaktır.

Oluşturacağınız nedir?

Bu codelab'de, Makine Öğrenimi Kiti ile bir Android uygulaması geliştireceksiniz. Uygulamanız, gerçek zamanlı kamera feed'indeki metinleri tanımak için cihaz üzerinde ML Kit Metin Tanıma API'sini kullanır. Tanınan metnin dilini tanımlamak için ML Kit Language Identification API'yi kullanır. Son olarak, uygulamanız ML Kit Translation API'yi kullanarak bu metni 59 seçenekten herhangi birine çevirir.

Son olarak, aşağıdaki resme benzer bir resim göreceksiniz.

e2a9b80f1ff442d7.png

Neler öğreneceksiniz?

  • Herhangi bir Android uygulamasına makine öğrenimi özelliklerini kolayca eklemek için ML Kit SDK'sını kullanma.
  • Makine Öğrenimi Kiti Metin Tanıma, Dil Tanımlama, Çeviri API'leri ve özellikleri.
  • CameraX kitaplığının ML Kit API'leriyle kullanımı.

Gerekenler

  • Android Studio'nun yeni bir sürümü (v4.0+)
  • Fiziksel bir Android cihaz
  • Örnek kod
  • Kotlin'de Android uygulaması geliştirmeyle ilgili temel bilgiler

Bu codelab'de, Makine Öğrenimi Kiti'ne odaklanılmıştır. Alakasız kavramlar ve kod blokları sizin için önceden sunulmuş ve uygulanmıştır.

2. Kurulum

Kodu İndirme

Bu codelab'e ait tüm kodları indirmek için şu bağlantıyı tıklayın:

İndirilen zip dosyasının paketini açın. Bu işlem, ihtiyacınız olan tüm kaynakların yer aldığı bir kök klasörü (mlkit-android) açar. Bu codelab için yalnızca translate alt dizinindeki kaynaklara ihtiyacınız vardır.

mlkit-android deposundaki translate alt dizini şu dizini içerir:

  • android_studio_folder.pngbaşlangıç: Bu codelab'de temel aldığınız başlangıç kodu.

3. Projeyi içe aktarma ve ML Kit ile CameraX bağımlılıklarını doğrulama

Başlangıç projesini Android Studio'ya aktarın. app/build.gradle dosyasında gerekli ML Kit ve CameraX bağımlılıklarının bulunduğundan emin olun:

// CameraX dependencies
def camerax_version = "1.0.0-beta05"
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
implementation "androidx.camera:camera-view:1.0.0-alpha12"

// ML Kit dependencies
implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
implementation 'com.google.mlkit:language-id:16.0.0'
implementation 'com.google.mlkit:translate:16.0.0'

4. Başlangıç uygulamasını çalıştırma

Projeyi Android Studio'ya aktarıp ML Kit bağımlılıklarını kontrol ettiğinize göre uygulamayı ilk kez çalıştırmaya hazırsınız. Android Studio araç çubuğunda Çalıştır'ı ( yürütme.png) tıklayın.

Uygulama cihazınızda başlatılır ve canlı feed'i görmek için kamerayı çeşitli metinlere doğru tutabilirsiniz. Ancak metin tanıma işlevi henüz kullanıma sunulmamıştır.

bd1489441c334de3.png

5. Metin tanıma özelliği ekleyin

Bu adımda, uygulamanıza video kameradaki metinleri tanıma işlevi ekleyeceğiz.

ML Kit Metin Dedektörü'nü örneklendirme

TextRecognition öğesini örneklendirmek için TextAnalyzer.kt öğesinin üst kısmındaki TODO değerini değiştirin. Metin tanıyıcıyı sonraki adımlarda kullanmak üzere herkese açık kullanıcı adını bu şekilde belirlersiniz. Artık gerekli olmadığında algılayıcıyı düzgün şekilde kapatabilmek için algılayıcıyı yaşam döngüsü gözlemleyicisi olarak eklememiz gerekir.

TextAnalyzer.kt

private val detector = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)

init {
   lifecycle.addObserver(detector)
}

Giriş Görüntüsünde (kameradaki arabellekle oluşturulur) metin tanımayı çalıştırma

CameraX kitaplığı, kameradan alınan ve resim analizi için hazır olan resim akışını sağlar. Her resim çerçevesinde ML Kit metin tanıma özelliğini kullanmak için TextAnalizr sınıfında recognizeText() yöntemini değiştirin.

TextAnalyzer.kt

private fun recognizeText(
   image: InputImage
): Task<Text> {
   // Pass image to an ML Kit Vision API
   return detector.process(image)
       .addOnSuccessListener { text ->
           // Task completed successfully
           result.value = text.text
       }
       .addOnFailureListener { exception ->
           // Task failed with an exception
           Log.e(TAG, "Text recognition error", exception)
           val message = getErrorMessage(exception)
           message?.let {
               Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
           }
       }
}

Aşağıdaki satırda, metin tanımayı gerçekleştirmeye başlamak için yukarıdaki yöntemi nasıl çağırdığımız gösterilmektedir. analyze() yönteminin sonuna aşağıdaki satırı ekleyin. Resim üzerinde analiz tamamlandığında imageProxy.close işlevini çağırmanız gerektiğini unutmayın. Aksi takdirde, canlı kamera feed'i analiz için daha fazla resim işleyemez.

TextAnalyzer.kt

recognizeText(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
   imageProxy.close()
}

Uygulamayı cihazınızda çalıştırma

Şimdi Android Studio araç çubuğunda Çalıştır'ı ( yürütme.png) tıklayın. Uygulama yüklendikten sonra, kameradaki metni gerçek zamanlı olarak tanımaya başlar. Onaylamak için kameranızı herhangi bir metne doğru tutun. Uygulamanız hiçbir metni tanımıyorsa "sıfırlamayı" deneyin tespit etmek için kamerayı boş bir alana doğrultmanız gerekir.

6. Dil tanımlama ekle

ML Kit Dil Tanımlayıcısını örneklendirme

MainViewModel.kt ana klasörde bulunuyor. Dosyaya gidin ve aşağıdaki alanı MainViewModel.kt alanına ekleyin. Aşağıdaki adımda kullanılacak dil tanımlayıcısını bu şekilde bulabilirsiniz.

MainViewModel.kt

private val languageIdentifier = LanguageIdentification.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)

Ayrıca, artık ihtiyaç duyulmadığında istemcilerin düzgün bir şekilde kapatıldığından emin olmak istersiniz. Bunu yapmak için ViewModel öğesinin onCleared() yöntemini geçersiz kılın.

MainViewModel.kt

override fun onCleared() {
   languageIdentifier.close()
   translators.evictAll()
}

Algılanan metinde cihaz üzerinde dil tanımlamasını çalıştır

Resimde algılanan metnin dilini almak için ML Kit Dil Tanımlayıcısı'nı kullanın.

MainViewModel.kt içindeki sourceLang alan tanımında bulunan TODO değerini aşağıdaki kodla değiştirin. Bu snippet, dil tanımlama yöntemini çağırır ve tanımlanmamış ("und") değilse sonucu atar. Tanımlanmamış dil, API'nin desteklenen diller listesine göre dili tanımlayamadığı anlamına gelir.

MainViewModel.kt

val sourceLang = Transformations.switchMap(sourceText) { text ->
   val result = MutableLiveData<Language>()
   languageIdentifier.identifyLanguage(text)
       .addOnSuccessListener { languageCode ->
           if (languageCode != "und")
               result.value = Language(languageCode)
       }
   result
}

Uygulamayı cihazınızda çalıştırma

Şimdi Android Studio araç çubuğunda Çalıştır'ı ( yürütme.png) tıklayın. Uygulama yüklendikten sonra, kameradaki metni tanımaya ve metnin dilini gerçek zamanlı olarak tanımlamaya başlar. Onaylamak için kameranızı herhangi bir metne doğru tutun.

7. Çeviri ekle

MainViewModel.kt içindeki translate() işlevini aşağıdaki kodla değiştirin. Bu işlev kaynak dil değerini, hedef dil değerini ve kaynak metni alıp çeviriyi gerçekleştirir. Seçilen hedef dil modeli henüz cihaza indirilmediyse bunun için downloadModelIfNeeded() adlı kişiyi çağırdığımızı ve ardından çeviriye devam ettiğimizi unutmayın.

MainViewModel.kt

private fun translate(): Task<String> {
   val text = sourceText.value
   val source = sourceLang.value
   val target = targetLang.value
   if (modelDownloading.value != false || translating.value != false) {
       return Tasks.forCanceled()
   }
   if (source == null || target == null || text == null || text.isEmpty()) {
       return Tasks.forResult("")
   }
   val sourceLangCode = TranslateLanguage.fromLanguageTag(source.code)
   val targetLangCode = TranslateLanguage.fromLanguageTag(target.code)
   if (sourceLangCode == null || targetLangCode == null) {
       return Tasks.forCanceled()
   }
   val options = TranslatorOptions.Builder()
       .setSourceLanguage(sourceLangCode)
       .setTargetLanguage(targetLangCode)
       .build()
   val translator = translators[options]
   modelDownloading.setValue(true)

   // Register watchdog to unblock long running downloads
   Handler().postDelayed({ modelDownloading.setValue(false) }, 15000)
   modelDownloadTask = translator.downloadModelIfNeeded().addOnCompleteListener {
       modelDownloading.setValue(false)
   }
   translating.value = true
   return modelDownloadTask.onSuccessTask {
       translator.translate(text)
   }.addOnCompleteListener {
       translating.value = false
   }
}

Simülatörde uygulamayı çalıştırma

Şimdi Android Studio araç çubuğunda Çalıştır'ı ( yürütme.png) tıklayın. Uygulama yüklendikten sonra, aşağıdaki hareketli resim gibi görünür. Metin tanıma ve tanımlanan dil sonuçları ile çevrilmiş metni seçilen dile gösterir. 59 dilden birini seçebilirsiniz.

e2a9b80f1ff442d7.png

8. Tebrikler!

Tebrikler, ML Kit'i kullanarak uygulamanıza cihaz üzerinde metin tanıma, dil tanımlama ve çeviri özelliğini eklediniz. Artık canlı kamera feed'inde metinleri ve dilini tanıyabilir ve bu metni seçtiğiniz bir dile anında çevirebilirsiniz.

İşlediklerimiz

  • Android uygulamanıza ML Kit ekleme
  • Resimlerdeki metinleri tanımak için ML Kit'te cihaz üzerinde metin tanıma özelliği nasıl kullanılır?
  • Metnin dilini tanımlamak için ML Kit'te cihaz üzerinde dil tanımlaması nasıl kullanılır?
  • Metni dinamik olarak 59 dile çevirmek için Makine Öğrenimi Kiti'nde cihaz üzerinde çeviri nasıl kullanılır?
  • CameraX'i ML Kit API'leriyle birlikte kullanma

Sonraki Adımlar

  • Makine Öğrenimi Kiti ve CameraX'i kendi Android uygulamanızda kullanın.

Daha Fazla Bilgi