1. Giriş
ML Kit, Google'ın makine öğrenimi uzmanlığını Android ve Android uygulamalarına güçlü ve kullanımı kolay bir pakette sunan bir mobil SDK'dır. Makine öğrenimi konusunda yeni veya deneyimli olmanız fark etmez. İhtiyacı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 derinlemesine bilgi sahibi olmanız gerekmez.
İşleyiş şekli
ML Kit, Google'ın Mobile Vision ve TensorFlow Lite gibi ML teknolojilerini tek bir SDK'da bir araya getirerek ML tekniklerini uygulamalarınıza uygulamanızı kolaylaştırır. Mobil Görüş'ün cihaz üzerinde modellerinin gerçek zamanlı özelliklerinin gücüne veya ö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, mevcut Android uygulamanıza gerçek zamanlı kamera feed'inden Metin Tanıma, Dil Kimliği ve Çeviri özelliklerini eklemek için uygulayacağınız basit adımlar açıklanmaktadır. Bu codelab'de, CameraX'i Makine Öğrenimi Kiti API'leriyle kullanmayla ilgili en iyi uygulamalar da ele alınmaktadı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 metni tanımak için ML Kit Metin Tanıma cihaz üzerinde API'sini kullanır. Tanımlanan 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çenekten herhangi birine çevirir.
Sonunda aşağıdaki resme benzer bir şey görürsünüz.
Neler öğreneceksiniz?
- Herhangi bir Android uygulamasına makine öğrenimi özelliklerini kolayca eklemek için ML Kit SDK'sını kullanma.
- ML Kit metin tanıma, dil tanımlama, Translation API'ler ve bunların özellikleri.
- CameraX kitaplığını ML Kit API'leriyle kullanma.
Gerekenler
- Android Studio'nun son sürümü (4.0 ve üzeri)
- Fiziksel bir Android cihaz
- Örnek kod
- Kotlin'de Android geliştirmeyle ilgili temel bilgiler
Bu codelab'de, Makine Öğrenimi Kiti'ne odaklanılmıştır. Alakalı olmayan kavramlar ve kod blokları zaten 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ın sıkıştırması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 vardır.
mlkit-android
deposundaki translate
alt dizini aşağıdaki dizini içerir:
starter: 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 dahil edildiğinden 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 içe aktardığınıza ve ML Kit bağımlılıkları olup olmadığı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 görmek için kamerayı çeşitli metinlere doğru tutabilirsiniz. Ancak metin tanıma işlevi henüz uygulanmamıştır.
5. Metin tanıma ekleme
Bu adımda, uygulamanıza video kameradaki metinleri tanıma işlevi ekleyeceğiz.
ML Kit metin algılayıcısını örnekleme
TextRecognition
örneği oluşturmak için TextAnalyzer.kt
'un üst kısmındaki TODO
değerini değiştirin. Bu şekilde, sonraki adımlarda kullanacağınız metin tanımlayıcıyı elde edersiniz. Ayrıca, artık gerekli olmadığında algılayıcıyı düzgün bir şekilde kapatmak için algılayıcıyı yaşam döngüsü gözlemcisi olarak da eklememiz gerekir.
TextAnalyzer.kt
private val detector = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
init {
lifecycle.addObserver(detector)
}
Giriş resminde (kameradan alınan arabelleğe alınmış verilerle oluşturulur) metin tanıma işlemini çalıştırma
CameraX kitaplığı, kameradan alınan ve resim analizi için hazır olan resim akışını sağlar. Her resim karesinde ML Kit metin tanıma özelliğini 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üdeki analiz tamamlandıktan sonra imageProxy.close
çağrısını yapmanız gerektiğini unutmayın. Aksi takdirde canlı kamera feed'i, analiz için başka görüntüler işleyemez.
TextAnalyzer.kt
recognizeText(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
imageProxy.close()
}
Uygulamayı cihazınızda çalıştırma
Ardından 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 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ısını örneklendirme
MainViewModel.kt
ana klasörde bulunuyor. Dosyaya gidin ve MainViewModel.kt
alanına aşağıdaki alanı ekleyin. Bu şekilde, sonraki adımda kullanılacak dil tanımlayıcısının adını alırsınız.
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()
}
Tespit edilen metinde cihaz üzerinde dil tanımlama işlemini çalıştırma
Resimde algılanan metnin dilini öğrenmek için ML Kiti Dil Tanımlayıcı'yı 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ışsa ("und") 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
Ardından Android Studio araç çubuğunda Çalıştır'ı ( ) tıklayın. Uygulama yüklendikten sonra kameradan metin tanımaya ve metnin dilini anlık 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ır ve çeviriyi gerçekleştirir. Seçilen hedef dil modeli henüz cihaza indirilmediyse downloadModelIfNeeded()
işlevini çağırarak indirme işlemini gerçekleştirip 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
Ardından Android Studio araç çubuğunda Çalıştır'ı ( ) tıklayın. Uygulama yüklendikten sonra, metin algılama ve tanımlanan dil sonuçlarını ve seçilen dile çevrilen metni gösteren aşağıdaki hareketli resme benzer bir görünüm elde edersiniz. 59 dilden birini seçebilirsiniz.
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 dile gerçek zamanlı olarak çevirebilirsiniz.
Ele aldığımız konular
- Android uygulamanıza ML Kit'i ekleme
- Resimlerdeki metni tanımak için ML Kit'te cihaz üzerinde metin tanıma özelliğini kullanma
- Metnin dilini belirlemek için ML Kit'te cihaz üzerinde dil tanımlama özelliğini kullanma
- Metni 59 dile dinamik olarak çevirmek için ML Kit'te cihaz üzerinde çeviriyi kullanma
- CameraX'i ML Kit API'leriyle birlikte kullanma
Sonraki Adımlar
- ML Kit ve CameraX'i kendi Android uygulamanızda kullanın.