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 untuk aplikasi Android dan iOS dalam paket yang andal 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, semua dalam satu SDK. Baik Anda memerlukan 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 secara real-time ke aplikasi Android yang ada. Codelab ini juga akan menyoroti praktik terbaik seputar penggunaan CameraX dengan ML Kit API.

Yang akan Anda buat

Dalam codelab ini, Anda akan mem-build aplikasi Android dengan ML Kit. Aplikasi Anda akan menggunakan API Pengenalan Teks di perangkat pada ML Kit untuk mengenali teks dari feed kamera secara real-time. Aplikasi ini akan menggunakan ML Kit Language Identification API 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.

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, API Terjemahan ML Kit, dan kemampuannya.
  • 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 butuhkan. 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 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 Anda dan Anda dapat mengarahkan kamera ke berbagai teks untuk melihat feed langsung, 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. Ini adalah cara Anda mendapatkan pengenal teks untuk digunakan di langkah selanjutnya. Kita juga perlu menambahkan detektor sebagai observer siklus proses untuk menutup detektor dengan benar saat tidak lagi diperlukan.

TextAnalyzer.kt

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

init {
   lifecycle.addObserver(detector)
}

Menjalankan pengenalan teks pada Gambar Input (dibuat dengan buffering 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 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

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 Language Identifier ML Kit

MainViewModel.kt terletak di folder utama. Buka file dan tambahkan kolom berikut ke MainViewModel.kt. Ini adalah cara Anda mendapatkan nama sebutan untuk ID bahasa yang akan digunakan di langkah berikutnya.

MainViewModel.kt

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

Selain itu, Anda juga ingin memastikan bahwa klien dimatikan dengan benar saat tidak lagi diperlukan. 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 dalam 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

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 menggunakan nilai bahasa sumber, nilai bahasa target, dan teks sumber, lalu melakukan terjemahan. Perhatikan bahwa 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 dimuat, aplikasi akan terlihat seperti gambar bergerak di bawah, yang menampilkan deteksi teks dan hasil bahasa yang diidentifikasi serta teks yang diterjemahkan ke dalam bahasa yang dipilih. Anda dapat memilih salah satu dari ke-59 bahasa tersebut.

e2a9b80f1ff442d7.png

8. Selamat!

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

Yang telah kita bahas

  • Cara menambahkan ML Kit ke aplikasi Android
  • Cara menggunakan pengenalan teks di perangkat di ML Kit untuk mengenali teks dalam gambar
  • Cara menggunakan identifikasi bahasa di perangkat di 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

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

Pelajari Lebih Lanjut