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.
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:
baş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'ı ( ) 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.
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'ı ( ) 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'ı ( ) 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'ı ( ) 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.
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.