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

ML Kit adalah SDK seluler yang menghadirkan keahlian machine learning Google untuk aplikasi Android dan iOS dalam paket yang andal dan mudah digunakan. Sebagai pengguna machine learning, baik pemula maupun berpengalaman, Anda dapat menerapkan fungsi yang diperlukan hanya dengan beberapa baris kode. Anda 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. API 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.

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 akan 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 diterapkan untuk Anda.

Download Kode

Klik link berikut untuk mendownload semua kode untuk codelab ini:

Download kode sumber

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—Kode awal yang Anda buat di codelab ini.

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'

Setelah mengimpor project ke Android Studio dan memeriksa dependensi ML Kit, Anda siap menjalankan aplikasi untuk pertama kalinya. Mulai emulator Android Studio, lalu 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.

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

Membuat instance ML Kit Text Detector

Tambahkan kolom berikut ke bagian atas TextAnalyzer.kt. Ini adalah cara Anda mendapatkan pengenal teks untuk digunakan di langkah selanjutnya.

TextAnalyzer.kt

private val detector = TextRecognition.getClient()

Menjalankan pengenalan teks di perangkat pada Gambar Vision ( dibuat dengan buffering dari kamera)

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

TextAnalyzer.kt

private fun recognizeTextOnDevice(
   image: InputImage
): Task<Text> {
   // Pass image to an ML Kit Vision API
   return detector.process(image)
       .addOnSuccessListener { visionText ->
           // Task completed successfully
           result.value = visionText.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

recognizeTextOnDevice(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.

Membuat instance Language Identifier ML Kit

Tambahkan kolom berikut ke MainViewModel.kt. Ini adalah cara Anda mendapatkan nama sebutan untuk ID bahasa yang akan digunakan di langkah berikut.

MainViewModel.kt

private val languageIdentification = LanguageIdentification.getClient()

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").

MainViewModel.kt

languageIdentification.identifyLanguage(text)
   .addOnSuccessListener {
       if (it != "und")
           result.value = Language(it)
   }

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.

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 pengenalan teks dan hasil bahasa yang diidentifikasi serta teks yang diterjemahkan ke dalam bahasa yang dipilih. Anda dapat memilih salah satu dari 59 bahasa.

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