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ı Android ve Android uygulamalarına taşıyan bir mobil SDK'dır. Güçlü ve kolay kullanımlı bir pakette sunulur. Makine öğrenimine yeni başlamış olsanız da deneyimli olsanız da ihtiyacınız olan işlevleri yalnızca birkaç satır kodla kolayca uygulayabilirsiniz. Başlamak için nöral ağlar veya model optimizasyonu hakkında derinlemesine bilgi sahibi olmanız gerekmez.

İşleyiş şekli

ML Kit, Mobile Vision ve TensorFlow Lite gibi Google'ın makine öğrenimi teknolojilerini tek bir SDK'da bir araya getirerek uygulamalarınızda makine öğrenimi tekniklerini uygulamanızı kolaylaştırır. İster Mobile Vision'ın cihaz üzerinde modellerinin gerçek zamanlı özelliklerinin gücüne ister özel TensorFlow Lite modellerinin esnekliğine ihtiyacınız olsun, ML Kit yalnızca birkaç satır kodla bunu mümkün kılar.

Bu codelab'de, anlık kamera feed'inden Metin Tanıma, Dil Tanımlama ve Çeviri özelliklerini mevcut Android uygulamanıza eklemek için uygulamanız gereken basit adımlar açıklanmaktadır. Bu codelab'de, CameraX'i ML Kit API'leriyle kullanmayla ilgili en iyi uygulamalar da vurgulanmaktadır.

Ne oluşturacaksınız?

Bu codelab'de ML Kit ile bir Android uygulaması oluşturacaksınız. Uygulamanız, gerçek zamanlı kamera feed'indeki metinleri tanımak için cihaz üzerinde ML Kit Text Recognition API'sini kullanır. Tanınan metnin dilini belirlemek için ML Kit Language Identification API'yi kullanır. Son olarak, uygulamanız ML Kit Translation API'yi kullanarak bu metni 59 seçenek arasından istediğiniz dile çevirir.

Sonunda, aşağıdaki resme benzer bir görüntü görmelisiniz.

e2a9b80f1ff442d7.png

Neler öğreneceksiniz?

  • ML Kit SDK'sını kullanarak herhangi bir Android uygulamasına kolayca makine öğrenimi özellikleri ekleme
  • ML Kit Metin Tanıma, Dil Tanımlama ve Çeviri API'leri ve bunların özellikleri.
  • CameraX kitaplığını ML Kit API'leriyle kullanma

Gerekenler

  • Android Studio'nun yeni bir sürümü (4.0 veya daha yeni)
  • Fiziksel bir Android cihaz
  • Örnek kod
  • Kotlin ile Android geliştirme hakkında temel düzeyde bilgi sahibi olma

Bu codelab, ML Kit'e odaklanmaktadır. Alakalı olmayan kavramlar ve kod blokları sizin için sağlanmış ve uygulanmıştır.

2. Hazırlanma

Kodu İndirme

Bu codelab'in tüm kodunu indirmek için aşağıdaki bağlantıyı tıklayın:

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

mlkit-android deposundaki translate alt dizini aşağıdaki dizini içerir:

  • android_studio_folder.pngstarter: Bu codelab'de temel alacağı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 dahil edildiğini doğrulayın:

// 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 aktardığınıza ve 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 Run'ı ( execute.png) tıklayın.

Uygulama cihazınızda başlatılır ve canlı feed'i görmek için kamerayı çeşitli metinlere yöneltebilirsiniz ancak metin tanıma işlevi henüz uygulanmamıştır.

bd1489441c334de3.png

5. Metin tanıma özelliğini ekleme

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

ML Kiti Metin Algılayıcı'yı örneklendirme

TextRecognition öğesini oluşturmak için TextAnalyzer.kt öğesinin üst kısmındaki TODO yerine TextRecognition yazın. Bu şekilde, sonraki adımlarda kullanılacak metin tanıyıcıya erişebilirsiniz. Ayrıca, artık gerekmediğinde algılayıcıyı düzgün şekilde kapatmak için algılayıcıyı yaşam döngüsü gözlemcisi olarak eklememiz gerekir.

TextAnalyzer.kt

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

init {
   lifecycle.addObserver(detector)
}

Giriş resminde (kameradan arabellek ile oluşturulmuş) metin tanıma çalıştırma

CameraX kitaplığı, kameradan görüntü analizi için hazır bir görüntü akışı sağlar. Her resim karesinde ML Kit metin tanımayı kullanmak için TextAnalyzer sınıfındaki 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ıma işlemini başlatmak için yukarıdaki yöntemi nasıl çağırdığımız gösterilmektedir. analyze() yönteminin sonuna aşağıdaki satırı ekleyin. Görüntü analizi tamamlandıktan sonra imageProxy.close işlevini çağırmanız gerektiğini unutmayın. Aksi takdirde, canlı kamera feed'i analiz için başka görüntüleri 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 Run'ı ( execute.png) tıklayın. Uygulama yüklendikten sonra kameradaki metinleri gerçek zamanlı olarak tanımaya başlar. Onaylamak için kameranızı herhangi bir metne doğru tutun. Uygulamanız herhangi bir metni tanımıyorsa kamerayı metne doğrultmadan önce boş bir alana doğrultarak algılamayı "sıfırlamayı" deneyin.

6. Dil tanımlama ekleme

ML Kit Dil Tanımlayıcı'yı örneklendirme

MainViewModel.kt ana klasörde bulunur. Dosyaya gidin ve aşağıdaki alanı MainViewModel.kt bölümüne ekleyin. Bu şekilde, sonraki adımda kullanılacak dil tanımlayıcısını elde edebilirsiniz.

MainViewModel.kt

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

Ayrıca, artık gerekmediğinde istemcilerin düzgün şekilde kapatıldığından da emin olmanız gerekir. Bunu yapmak için onCleared() yöntemini ViewModel ile geçersiz kılın.

MainViewModel.kt

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

Algılanan metinde cihaz üzerinde dil tanımlama işlemini çalıştırma

Resimdeki algılanan metnin dilini almak için ML Kit Language Identifier'ı kullanın.

MainViewModel.kt içindeki sourceLang alan tanımında TODO yerine aşağıdaki kodu kullanın. Bu snippet, dil tanımlama yöntemini çağırır ve sonuç tanımlanmamış ("und") değilse sonucu atar. Tanımlanmamış bir 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 Run'ı ( execute.png) tıklayın. Uygulama yüklendikten sonra kameradan gelen metni tanımaya ve metnin dilini anında belirlemeye başlamalıdır. 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 çeviri işlemini gerçekleştirir. Seçilen hedef dil modeli henüz cihaza indirilmemişse bunu yapmak için downloadModelIfNeeded() işlevinin çağrıldığını ve ardından çeviriye devam edildiğini 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
   }
}

Uygulamayı simülatörde çalıştırma

Şimdi Android Studio araç çubuğunda Run'ı ( execute.png) tıklayın. Uygulama yüklendikten sonra, metin tanıma ve tanımlanan dil sonuçlarının yanı sıra çevrilen metnin seçilen dilde gösterildiği aşağıdaki hareketli resim gibi görünmelidir. 59 dil arasından seçim yapabilirsiniz.

e2a9b80f1ff442d7.png

8. Tebrikler!

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

İşlediğimiz konular

  • Android uygulamanıza ML Kit'i ekleme
  • Resimlerdeki metinleri tanımak için ML Kit'teki cihaz üzerinde metin tanıma özelliğini kullanma
  • Metin dilini tanımlamak için ML Kit'teki cihaz üzerinde dil tanımlama özelliğini kullanma
  • Metni 59 dile dinamik olarak çevirmek için ML Kit'teki cihaz üzerinde çeviri özelliğini kullanma
  • CameraX'i ML Kit API'leriyle birlikte kullanma

Sonraki Adımlar

  • Kendi Android uygulamanızda ML Kit ve CameraX'i kullanın.

Daha Fazla Bilgi