Mengenali, Mengidentifikasi Bahasa, dan Menerjemahkan teks dengan ML Kit dan CameraX: Android

1. Pengantar

ML Kit adalah SDK seluler yang menghadirkan keahlian machine learning Google ke aplikasi Android dan Android dalam paket yang canggih dan mudah digunakan. Baik sebagai pemula atau berpengalaman dalam machine learning, Anda dapat dengan mudah mengimplementasikan fungsi yang diperlukan hanya dalam beberapa baris kode. Tidak perlu memiliki pengetahuan mendalam tentang jaringan neural atau pengoptimalan model untuk memulai.

Bagaimana cara kerjanya?

ML Kit memudahkan penerapan teknik ML di aplikasi Anda dengan menyatukan teknologi ML Google, seperti Mobile Vision, dan TensorFlow Lite, bersama-sama dalam satu SDK. Baik Anda membutuhkan kecanggihan kemampuan real-time model di perangkat Mobile Vision, atau fleksibilitas model TensorFlow Lite kustom, ML Kit memungkinkannya hanya dengan beberapa baris kode.

Codelab ini akan memandu Anda melakukan langkah-langkah sederhana untuk menambahkan Pengenalan Teks, Identifikasi Bahasa, dan Terjemahan dari feed kamera real-time ke aplikasi Android yang ada. Codelab ini juga akan menyoroti praktik terbaik terkait penggunaan CameraX dengan ML Kit API.

Yang akan Anda buat

Dalam codelab ini, Anda akan membangun aplikasi Android dengan ML Kit. Aplikasi Anda akan menggunakan API Pengenalan Teks di perangkat ML Kit untuk mengenali teks dari feed kamera secara real-time. ML Kit Language Identification API akan digunakan untuk mengidentifikasi bahasa teks yang dikenali. Terakhir, aplikasi Anda akan menerjemahkan teks ini ke bahasa apa pun yang dipilih dari 59 opsi, menggunakan ML Kit Translation API.

Pada akhirnya, Anda akan melihat sesuatu yang mirip dengan gambar di bawah ini.

e2a9b80f1ff442d7.png

Yang akan Anda pelajari

  • Cara menggunakan ML Kit SDK untuk menambahkan kemampuan Machine Learning dengan mudah ke aplikasi Android apa pun.
  • Pengenalan Teks, Identifikasi Bahasa, Translation API, dan kemampuannya pada ML Kit.
  • Cara menggunakan library CameraX dengan ML Kit API.

Yang Anda butuhkan

  • Versi terbaru Android Studio (v4.0+)
  • Perangkat Android fisik
  • Kode contoh
  • Pengetahuan dasar tentang pengembangan Android di Kotlin

Codelab ini berfokus pada ML Kit. Konsep dan blok kode yang tidak-relevan sudah disediakan dan diimplementasikan untuk Anda.

2. Mempersiapkan

Download Kode

Klik link berikut untuk mendownload semua kode untuk codelab ini:

Ekstrak file ZIP yang didownload. Tindakan ini akan mengekstrak folder root (mlkit-android) dengan semua resource yang Anda perlukan. Untuk codelab ini, Anda hanya memerlukan resource di subdirektori translate.

Subdirektori translate di repositori mlkit-android berisi direktori berikut:

  • android_studio_folder.pngstarter—Memulai kode yang Anda bangun di codelab ini.

3. Mengimpor project dan memverifikasi dependensi ML Kit dan CameraX

Impor project awal ke Android Studio. Dalam file app/build.gradle, pastikan bahwa dependensi ML Kit dan CameraX yang diperlukan disertakan:

// 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. Menjalankan aplikasi awal

Setelah mengimpor project ke Android Studio dan memeriksa dependensi ML Kit, Anda siap menjalankan aplikasi untuk pertama kalinya. Klik Run ( execute.png) di toolbar Android Studio.

Aplikasi akan diluncurkan di perangkat dan Anda dapat mengarahkan kamera ke berbagai teks untuk melihat feed live, tetapi fungsi pengenalan teks belum diterapkan.

bd1489441c334de3.png

5. Tambahkan pengenalan teks

Pada langkah ini, kita akan menambahkan fungsi ke aplikasi Anda untuk mengenali teks dari kamera video.

Membuat instance Detektor Teks ML Kit

Ganti TODO di bagian atas TextAnalyzer.kt untuk membuat instance TextRecognition. Berikut adalah cara Anda mendapatkan handle ke pengenal teks untuk digunakan pada langkah berikutnya. Kita juga perlu menambahkan detektor sebagai observer siklus proses untuk menutup detektor dengan benar saat tidak diperlukan lagi.

TextAnalyzer.kt

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

init {
   lifecycle.addObserver(detector)
}

Menjalankan pengenalan teks pada Gambar Input (dibuat dengan buffer dari kamera)

Library CameraX menyediakan aliran gambar dari kamera yang siap untuk analisis gambar. Ganti metode recognizeText() di class TextAnalyzer untuk menggunakan pengenalan teks ML Kit pada setiap bingkai gambar.

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()
           }
       }
}

Baris berikut menunjukkan cara kami memanggil metode di atas untuk mulai melakukan pengenalan teks. Tambahkan baris berikut di akhir metode analyze(). Perhatikan bahwa Anda harus memanggil imageProxy.close setelah analisis selesai pada gambar. Jika tidak, feed kamera live tidak akan dapat memproses gambar lebih lanjut untuk analisis.

TextAnalyzer.kt

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

Menjalankan aplikasi di perangkat Anda

Sekarang, klik Run ( execute.png) di toolbar Android Studio. Setelah dimuat, aplikasi akan mulai mengenali teks dari kamera secara real time. Arahkan kamera ke teks mana pun untuk mengonfirmasi. Jika aplikasi Anda tidak mengenali teks apa pun, coba 'reset' deteksi dengan mengarahkan kamera ke ruang kosong sebelum mengarahkan kamera ke teks.

6. Tambahkan identifikasi bahasa

Membuat instance ID Bahasa ML Kit

MainViewModel.kt terletak di folder utama. Buka file dan tambahkan kolom berikut ke MainViewModel.kt. Inilah cara Anda mendapatkan handle ke ID bahasa untuk digunakan pada langkah berikutnya.

MainViewModel.kt

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

Di samping itu, Anda juga ingin memastikan bahwa klien dimatikan dengan benar ketika tidak diperlukan lagi. Untuk melakukannya, ganti metode onCleared() dari ViewModel.

MainViewModel.kt

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

Menjalankan identifikasi bahasa di perangkat pada teks yang terdeteksi

Gunakan ID Bahasa ML Kit untuk mendapatkan bahasa teks yang terdeteksi dari gambar.

Ganti TODO di definisi kolom sourceLang di MainViewModel.kt dengan kode berikut. Cuplikan ini memanggil metode identifikasi bahasa dan menetapkan hasilnya jika tidak ditentukan ("und"). Bahasa yang tidak ditentukan berarti API tidak dapat mengidentifikasi bahasa berdasarkan daftar bahasa yang didukung.

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
}

Menjalankan aplikasi di perangkat Anda

Sekarang, klik Run ( execute.png) di toolbar Android Studio. Setelah dimuat, aplikasi akan mulai mengenali teks dari kamera dan mengidentifikasi bahasa teks secara real time. Arahkan kamera ke teks mana pun untuk mengonfirmasi.

7. Tambahkan terjemahan

Ganti fungsi translate() di MainViewModel.kt dengan kode berikut: Fungsi ini mengambil nilai bahasa sumber, nilai bahasa target, dan teks sumber, lalu melakukan penerjemahan. Perhatikan bagaimana jika model bahasa target yang dipilih belum didownload ke perangkat, kita memanggil downloadModelIfNeeded() untuk melakukannya, lalu melanjutkan terjemahan.

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
   }
}

Menjalankan aplikasi di simulator

Sekarang, klik Run ( execute.png) di toolbar Android Studio. Setelah aplikasi dimuat, aplikasi kini akan terlihat seperti gambar bergerak di bawah, yang menunjukkan pengenalan teks dan hasil bahasa yang diidentifikasi serta teks terjemahan ke dalam bahasa yang dipilih. Anda dapat memilih salah satu dari 59 bahasa tersebut.

e2a9b80f1ff442d7.png

8. Selamat!

Selamat, Anda baru saja menambahkan pengenalan teks, identifikasi bahasa, dan terjemahan ke aplikasi Anda menggunakan ML Kit! Kini Anda dapat mengenali teks dan bahasanya dari feed kamera live serta menerjemahkan teks ini ke bahasa pilihan Anda secara real time.

Yang telah kita bahas

  • Cara menambahkan ML Kit ke aplikasi Android Anda
  • Cara menggunakan pengenalan teks di perangkat pada ML Kit untuk mengenali teks dalam gambar
  • Cara menggunakan identifikasi bahasa di perangkat pada ML Kit untuk mengidentifikasi bahasa teks
  • Cara menggunakan terjemahan di perangkat di ML Kit untuk menerjemahkan teks secara dinamis ke 59 bahasa
  • Cara menggunakan CameraX bersama dengan ML Kit API

Langkah Berikutnya

  • Menggunakan ML Kit dan CameraX di aplikasi Android Anda sendiri.

Pelajari Lebih Lanjut