Tambahkan Firebase ke Aplikasi Android Anda yang didukung TFLite

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

1. Ikhtisar

cd824ecfd05a2822.png

Firebase ML memungkinkan Anda menerapkan model over-the-air. Ini memungkinkan Anda menjaga ukuran aplikasi tetap kecil dan hanya mengunduh model ML saat diperlukan, bereksperimen dengan beberapa model, atau memperbarui model ML Anda tanpa harus memublikasikan ulang seluruh aplikasi.

Dalam codelab ini Anda akan mengonversi aplikasi Android menggunakan model TFLite statis menjadi aplikasi menggunakan model yang disajikan secara dinamis dari Firebase.

Apa yang akan Anda pelajari?

  • Terapkan model TFLite ke Firebase ML dan akses dari aplikasi Anda
  • Lacak masukan pengguna untuk mengukur akurasi model dengan Firebase Analytics
  • Performa model profil melalui Firebase Performance
  • Pilih salah satu dari beberapa model yang diterapkan yang dimuat melalui Remote Config
  • Bereksperimenlah dengan model yang berbeda melalui Pengujian A/B Firebase

Apa yang Anda butuhkan?

  • Android Studio versi 3.4+.
  • Kode sampel.
  • Perangkat uji dengan Android 2.3+ dan layanan Google Play 9.8 atau lebih baru, atau Emulator dengan layanan Google Play 9.8 atau lebih baru
  • Jika menggunakan perangkat, kabel koneksi.

Bagaimana Anda akan menggunakan tutorial ini?

Baca sampai habis saja Baca dan selesaikan latihannya

Bagaimana penilaian pengalaman Anda dalam membuat aplikasi Android?

pemula Intermediat Ahli

2. Dapatkan kode sampel

Kloning repositori GitHub dari baris perintah.

$ git clone https://github.com/FirebaseExtended/codelab-digitclassifier-android.git

Jika Anda belum menginstal git, Anda juga dapat mengunduh proyek sampel dari halaman GitHub-nya atau dengan mengeklik tautan ini .

3. Impor aplikasi pemula

Dari Android Studio, pilih codelab-digitclassifier-android ( android_studio_folder.png ) dari unduhan kode sampel ( File > Open > .../codelab-digitclassifier-android/start).

Anda sekarang harus membuka proyek awal di Android Studio.

4. Jalankan aplikasi pemula

Sekarang setelah Anda mengimpor proyek ke Android Studio, Anda siap menjalankan aplikasi untuk pertama kalinya. Hubungkan perangkat Android Anda, dan klik Jalankan ( eksekusi.png ) di bilah alat Android Studio.

Aplikasi harus diluncurkan di perangkat Anda. Pada titik ini, jika Anda mencoba menggambar angka, aplikasi seharusnya dapat mengenalinya.

6e36e1b947b395f2.png

5. Buat proyek konsol Firebase

Tambahkan Firebase ke proyek

  1. Buka konsol Firebase .
  2. Pilih Tambahkan proyek .
  3. Pilih atau masukkan nama Proyek.
  4. Ikuti langkah penyiapan selanjutnya di Firebase console, lalu klik Buat proyek (atau Tambahkan Firebase, jika Anda menggunakan proyek Google yang sudah ada).

6. Tambahkan Firebase

  1. Dari layar ikhtisar proyek baru Anda, klik ikon Android untuk meluncurkan alur kerja penyiapan.
  2. Masukkan nama paket codelab: org.tensorflow.lite.examples.digitclassifier

Tambahkan file google-services.json ke aplikasi Anda

Setelah mendaftarkan nama paket dan memilih Berikutnya, klik Unduh google-services.json untuk mendapatkan file konfigurasi Firebase Android Anda lalu salin file google-services.json ke direktori app di proyek Anda. Setelah file diunduh, Anda dapat Lewati langkah berikutnya yang ditampilkan di konsol (sudah dilakukan untuk Anda di proyek build-android-start).

Tambahkan plugin layanan-google ke aplikasi Anda

Plugin google-services menggunakan file google-services.json untuk mengonfigurasi aplikasi Anda agar menggunakan Firebase. Tambahkan baris berikut ke bagian atas file build.gradle di direktori app proyek Anda:

app/build.gradle

apply plugin: 'com.google.gms.google-services'

Kemudian tambahkan baris berikut ke bagian dependencies dari file build.gradle Anda di proyek:

proyek/build.gradle

classpath 'com.google.gms:google-services:4.3.13'

Sinkronkan proyek Anda dengan file gradle

Untuk memastikan bahwa semua dependensi tersedia untuk aplikasi Anda, Anda harus menyinkronkan proyek Anda dengan file gradle pada saat ini. Pilih File > Sync Project with Gradle Files dari toolbar Android Studio.

7. Jalankan aplikasi dengan Firebase

Sekarang setelah Anda mengonfigurasi plugin google-services dengan file JSON, Anda siap menjalankan aplikasi dengan Firebase. Hubungkan perangkat Android Anda, dan klik Jalankan ( eksekusi.png ) di bilah alat Android Studio.

Aplikasi harus diluncurkan di perangkat Anda. Pada titik ini, aplikasi Anda masih harus berhasil dibangun.

8. Terapkan model ke Firebase ML

Menerapkan model ke Firebase ML berguna karena dua alasan utama:

  1. Kami dapat menjaga ukuran pemasangan aplikasi tetap kecil dan hanya mengunduh model jika diperlukan
  2. Model dapat diperbarui secara teratur dan dengan siklus rilis yang berbeda dari seluruh aplikasi

Sebelum kita dapat mengganti model statis di aplikasi kita dengan model yang diunduh secara dinamis dari Firebase, kita perlu menerapkannya ke Firebase ML. Model dapat diterapkan baik melalui konsol, atau secara terprogram, menggunakan Firebase Admin SDK. Pada langkah ini kami akan menyebarkan melalui konsol.

Untuk mempermudah, kami akan menggunakan model TensorFlow Lite yang sudah ada di aplikasi kami. Pertama, buka Firebase Console dan klik Machine Learning di panel navigasi kiri. Klik 'Memulai' jika Anda membuka ini pertama kali. Kemudian arahkan ke "Kustom" dan klik tombol "Tambahkan model khusus".

Saat diminta, beri model nama deskriptif seperti mnist_v1 dan unggah file dari direktori proyek codelab di bawah start/app/src/main/assets/mnist.tflite . Kemudian Anda dapat menghapus file model TF Lite ini dari proyek Android.

3c3c50e6ef12b3b.png

9. Unduh model dari Firebase ML

Memilih kapan mengunduh model jarak jauh dari Firebase ke dalam aplikasi Anda bisa jadi rumit karena model TFLite dapat tumbuh relatif besar. Idealnya kami ingin menghindari memuat model segera saat aplikasi diluncurkan, karena jika model kami digunakan hanya untuk satu fitur dan pengguna tidak pernah menggunakan fitur itu, kami akan mengunduh sejumlah besar data tanpa alasan. Kami juga dapat mengatur opsi unduhan seperti hanya mengambil model saat terhubung ke wifi. Jika Anda ingin memastikan bahwa model tersedia bahkan tanpa koneksi jaringan, penting juga untuk memaketkannya tanpa aplikasi sebagai cadangan.

Demi kesederhanaan, kami akan menghapus model bundel default dan selalu mengunduh model dari Firebase saat aplikasi dimulai. Dengan cara ini saat menjalankan pengenalan digit, Anda dapat yakin bahwa inferensi berjalan dengan model yang disediakan dari Firebase.

Di file app/build.gradle, tambahkan dependensi Firebase Machine Learning

app/build.gradle

implementation 'com.google.firebase:firebase-ml-modeldownloader:24.0.4'

Kemudian tambahkan logika untuk mengunduh model dari Firebase.

Kami akan mengganti digitClassifier.initialize(loadModelFile()) dengan downloadModel("mnist_v1") dan menerapkan metode ini.

Aktivitas Utama.kt

  private fun downloadModel(modelName: String): Task<CustomModel> {
    val conditions = CustomModelDownloadConditions.Builder()
    .requireWifi()
    .build()
    return FirebaseModelDownloader.getInstance()
        .getModel(modelName, DownloadType.LOCAL_MODEL, conditions)
        .addOnCompleteListener {
          val model = it.result
          if (model == null) {
            showToast("Failed to get model file.")
          } else {
            showToast("Downloaded remote model: $modelName")
            digitClassifier.initialize(model)
          }
        }
      .addOnFailureListener {
        showToast("Model download failed for $modelName, please check your connection.")
      }
  }

Jalankan kembali aplikasi Anda dan gambar angka di pengklasifikasi angka. Setelah unduhan selesai, Anda akan melihat pesan Toast bahwa model jarak jauh diunduh dan log yang menunjukkan model baru Anda sedang digunakan.

10. Lacak umpan balik dan konversi pengguna untuk mengukur akurasi model

Google Analytics for Firebase menyediakan cara bagi Anda untuk memahami cara pengguna berpindah melalui aplikasi Anda, di mana mereka berhasil, dan di mana mereka terjebak dan kembali. Ini juga dapat digunakan untuk memahami bagian aplikasi Anda yang paling sering digunakan.

Kami akan mengukur akurasi model dengan melacak umpan balik pengguna pada prediksi model. Jika pengguna mengklik "YA", itu akan menunjukkan bahwa prediksi itu akurat.

Kami dapat mencatat peristiwa Analytics untuk melacak keakuratan model kami. Pertama, kita harus menambahkan Analytics ke dependensi sebelum dapat digunakan dalam proyek:

Tambahkan ketergantungan Firebase Analytics

app/build.gradle

implementation 'com.google.firebase:firebase-analytics-ktx:21.1.0'

Catat Acara

Kemudian pada fungsi onCreate kita akan mengatur pendengar onclick untuk mencatat peristiwa correct_inference ke Firebase.

MainActivity.kt (onCreate)

// Setup YES button
yesButton?.setOnClickListener {
  Firebase.analytics.logEvent("correct_inference", null)
}

Jalankan aplikasi lagi dan gambar satu digit. Tekan tombol "Ya" beberapa kali untuk mengirim umpan balik bahwa kesimpulannya akurat.

Analisis debug

Umumnya, peristiwa yang dicatat oleh aplikasi Anda dikumpulkan bersama selama periode sekitar satu jam dan diunggah bersama-sama. Pendekatan ini menghemat baterai pada perangkat pengguna akhir dan mengurangi penggunaan data jaringan. Namun, untuk tujuan memvalidasi penerapan analitik Anda (dan, untuk melihat analitik Anda dalam laporan DebugView), Anda dapat mengaktifkan mode Debug di perangkat pengembangan Anda untuk mengunggah peristiwa dengan penundaan minimal.

Untuk mengaktifkan mode Debug Analytics di perangkat Android, jalankan perintah berikut:

adb shell setprop debug.firebase.analytics.app org.tensorflow.lite.examples.digitclassifier

Jalankan aplikasi lagi dan gambar satu digit. Tekan tombol "Ya" beberapa kali untuk mengirim umpan balik bahwa kesimpulannya akurat. Sekarang Anda dapat melihat peristiwa log hampir secara real time melalui tampilan debug di Firebase console. Klik Analytics > DebugView dari bilah navigasi kiri.

5276199a086721fd.png

11. Analisis Kinerja Model

Firebase Performance Monitoring adalah layanan yang membantu Anda mendapatkan wawasan tentang karakteristik kinerja aplikasi iOS, Android, dan web Anda.

Anda menggunakan Performance Monitoring SDK untuk mengumpulkan data performa dari aplikasi Anda, lalu meninjau dan menganalisis data tersebut di Firebase console. Performance Monitoring membantu Anda memahami di mana dan kapan kinerja aplikasi Anda dapat ditingkatkan sehingga Anda dapat menggunakan informasi tersebut untuk memperbaiki masalah kinerja.

Di sini kami menambahkan jejak kinerja di sekitar inferensi dan unduh

Hal ini penting karena model yang lebih besar yang digunakan dalam pembelajaran mendalam memiliki potensi untuk lebih akurat, tetapi juga membutuhkan waktu lebih lama untuk mengembalikan respons. Dalam percobaan kami, kami mencoba menemukan keseimbangan yang tepat antara akurasi dan kecepatan.

Tambahkan ketergantungan Kinerja Firebase

proyek/build.gradle

buildscript {

  // ...

    dependencies {
      // ...

      // Add the dependency for the Performance Monitoring plugin
      classpath 'com.google.firebase:perf-plugin:1.4.1'  // Performance Monitoring plugin
    }
}

app/build.gradle

// Apply the Performance Monitoring plugin
apply plugin: 'com.google.firebase.firebase-perf'

// ...

dependencies {
  // ...

  // Add the dependency for the Performance Monitoring library
  implementation 'com.google.firebase:firebase-perf:20.1.0'
}

Tambahkan Jejak Kustom

Dalam fungsi setupDigitClassifier() buat downloadTrace baru, dan mulai tepat sebelum mengunduh model. Kemudian tambahkan pendengar yang sukses menghentikan jejak.

Dalam fungsi classifyDrawing() buat classclassTrace baru, dan mulai tepat sebelum klasifikasi. Kemudian hentikan jejak di pendengar yang berhasil.

Aktivitas Utama.kt

class MainActivity : AppCompatActivity() {
  // ...
  
  private val firebasePerformance = FirebasePerformance.getInstance()
  
  // ...

  private fun setupDigitClassifier() {
    // Add these lines to create and start the trace
    val downloadTrace = firebasePerformance.newTrace("download_model")
    downloadTrace.start()
    downloadModel("mnist_v1")
      // Add these lines to stop the trace on success
      .addOnSuccessListener {
        downloadTrace.stop()
      }
  }

// ...

  private fun classifyDrawing() {
    val bitmap = drawView?.getBitmap()

    if ((bitmap != null) && (digitClassifier.isInitialized)) {
      // Add these lines to create and start the trace
      val classifyTrace = firebasePerformance.newTrace("classify")
      classifyTrace.start()
      digitClassifier
        .classifyAsync(bitmap)
        .addOnSuccessListener { resultText -> 
          // Add this line to stop the trace on success
          classifyTrace.stop()
          predictedTextView?.text = resultText
        }
        .addOnFailureListener { e ->
          predictedTextView?.text = getString(
            R.string.tfe_dc_classification_error_message,
            e.localizedMessage
          )
          Log.e(TAG, "Error classifying drawing.", e)
        }
    }
  }

Lihat pesan log untuk acara kinerja

  1. Aktifkan logging debug untuk Performance Monitoring pada waktu build dengan menambahkan elemen <meta-data> ke file AndroidManifest.xml aplikasi Anda, seperti:

AndroidManifest.xml

<application>
    <meta-data
      android:name="firebase_performance_logcat_enabled"
      android:value="true" />
</application>
  1. Periksa pesan log Anda untuk setiap pesan kesalahan.
  2. Performance Monitoring menandai pesan lognya dengan FirebasePerformance . Menggunakan pemfilteran logcat, Anda dapat secara khusus melihat pelacakan durasi dan pencatatan permintaan jaringan HTTP/S dengan menjalankan perintah berikut:
adb logcat -s FirebasePerformance
  1. Periksa jenis log berikut yang menunjukkan bahwa Performance Monitoring mencatat peristiwa kinerja:
  • Logging TraceMetric
  • Logging NetworkRequestMetric

12. Terapkan model kedua ke Firebase ML

Saat membuat versi baru dari model Anda, seperti model dengan arsitektur model yang lebih baik atau yang dilatih pada kumpulan data yang lebih besar atau yang diperbarui, kami mungkin merasa tergoda untuk mengganti model kami saat ini dengan versi baru. Namun, model yang berkinerja baik dalam pengujian tidak selalu berkinerja sama baiknya dalam produksi. Oleh karena itu, mari kita lakukan pengujian A/B dalam produksi untuk membandingkan model asli kita dengan yang baru.

Aktifkan API Manajemen Model Firebase

Pada langkah ini, kami akan mengaktifkan Firebase Model Management API untuk men-deploy versi baru model TensorFlow Lite kami menggunakan kode Python.

Buat ember untuk menyimpan model ML Anda

Di Konsol Firebase Anda, buka Penyimpanan dan klik Mulai. fbbe78f0eb3dc9f.png

Ikuti dialog untuk menyiapkan ember Anda.

19517c0d6d2aa14d.png

Aktifkan Firebase ML API

Buka halaman Firebase ML API di Google Cloud Console dan klik Aktifkan.

2414fd5cced6c984.png Pilih aplikasi Digit Classifier saat ditanya.

Latih model baru dan Publikasikan ke Firebase ML

Sekarang kita akan melatih model versi baru dengan menggunakan kumpulan data yang lebih besar, dan kemudian kita akan menerapkannya secara terprogram langsung dari buku catatan pelatihan menggunakan Firebase Admin SDK.

Unduh kunci pribadi untuk akun layanan

Sebelum kita dapat menggunakan Firebase Admin SDK, kita harus membuat akun layanan. Buka panel Akun Layanan Firebase console dengan mengklik tautan ini dan klik tombol untuk membuat akun layanan baru untuk Firebase Admin SDK. Saat diminta, klik tombol Generate New Private Key. Kami akan menggunakan kunci akun layanan untuk mengautentikasi permintaan kami dari notebook colab.

c3b95de1e5508516.png

Sekarang kita dapat melatih dan menerapkan model baru.

  1. Buka notebook colab ini dan buat salinannya di bawah Drive Anda sendiri.
  2. Jalankan sel pertama "Latih model TensorFlow Lite yang ditingkatkan" dengan mengklik tombol putar di sebelah kirinya. Ini akan melatih model baru dan mungkin membutuhkan waktu.
  3. Menjalankan sel kedua akan membuat permintaan unggah file. Unggah file json yang Anda unduh dari Firebase Console saat membuat akun layanan.

71e847c6a85423b3.png

  1. Jalankan dua sel terakhir.

Setelah menjalankan notebook colab, Anda akan melihat model kedua di Firebase console. Pastikan model kedua bernama mnist_v2 .

c316683bb4d75d57.png

13. Pilih model melalui Remote Config

Sekarang kami memiliki dua model terpisah, kami akan menambahkan parameter untuk memilih model mana yang akan diunduh saat runtime. Nilai parameter yang diterima klien akan menentukan model mana yang diunduh klien.

Tambahkan Aturan Konfigurasi di konsol Firebase

Pertama, buka konsol Firebase dan klik tombol Remote Config di menu navigasi kiri. Kemudian, klik tombol "Tambah Parameter".

Beri nama parameter model_name baru dan berikan nilai default "mnist_v1" . Dengan meletakkan nama model di parameter konfigurasi jarak jauh, kita dapat menguji beberapa model tanpa menambahkan parameter baru untuk setiap model yang ingin kita uji. Klik Publikasikan Perubahan untuk menerapkan pembaruan.

2949cb95c7214ca4.png

Tambahkan ketergantungan Firebase RemoteConfig

app/build.gradle

implementation 'com.google.firebase:firebase-config-ktx:21.1.1'

Konfigurasikan Firebase Remote Config

Aktivitas Utama.kt

  private fun configureRemoteConfig() {
    remoteConfig = Firebase.remoteConfig
    val configSettings = remoteConfigSettings {
      minimumFetchIntervalInSeconds = 3600
    }
    remoteConfig.setConfigSettingsAsync(configSettings)
  }

Minta dan Gunakan Konfigurasi

Buat permintaan pengambilan untuk konfigurasi dan tambahkan penangan penyelesaian untuk mengambil dan menggunakan parameter konfigurasi.

Aktivitas Utama.kt

 private fun setupDigitClassifier() {
    configureRemoteConfig()
    remoteConfig.fetchAndActivate()
      .addOnCompleteListener { task ->
        if (task.isSuccessful) {
          val modelName = remoteConfig.getString("model_name")
          val downloadTrace = firebasePerformance.newTrace("download_model")
          downloadTrace.start()
          downloadModel(modelName)
            .addOnSuccessListener {
              downloadTrace.stop()
            }
        } else {
          showToast("Failed to fetch model name.")
        }
      }
  }

Uji Konfigurasi Jarak Jauh

  1. Klik 98205811bed9d74.png tombol Jalankan .
  2. Periksa apakah Anda melihat pesan Toast bahwa model mnist_v1 telah diunduh.
  3. Kembali ke Firebase Console, ubah nilai default menjadi mnist_v2 dan pilih Publish Changes untuk menerapkan pembaruan.
  4. Mulai ulang aplikasi dan periksa untuk melihat pesan Toast bahwa model mnist_v2 diunduh kali ini.

14. Efektivitas Model Uji A/B

Pengujian A/B Firebase membantu Anda mengoptimalkan pengalaman aplikasi dengan mempermudah menjalankan, menganalisis, dan menskalakan eksperimen produk dan pemasaran. Terakhir, kita dapat menggunakan perilaku Pengujian A/B bawaan Firebase untuk melihat model mana yang berkinerja lebih baik.

Buka Analytics -> Acara di Firebase console. Jika peristiwa correct_inference ditampilkan, tandai sebagai "Peristiwa konversi", jika tidak, Anda dapat membuka Analytics -> Peristiwa Konversi dan klik "Buat Peristiwa Konversi Baru" dan letakkan correct_inference.

Sekarang buka "Remote Config di Firebase console, pilih tombol "A/B test" dari menu opsi lainnya pada parameter "model_name" yang baru saja kita tambahkan.

fad5ea36969d2aeb.png

Di menu berikutnya, terima nama default.

d7c006669ace6e40.png

Pilih aplikasi Anda di tarik-turun dan ubah kriteria penargetan menjadi 50% pengguna aktif.

cb72dcc7d2666bd3.png

Jika Anda dapat menetapkan peristiwa correct_inference sebagai konversi sebelumnya, gunakan peristiwa ini sebagai metrik utama untuk dilacak. Jika tidak, jika Anda tidak ingin menunggu acara muncul di Analytics, Anda dapat menambahkan correct_inference manually .

1ac9c94fb3159271.png

Terakhir, pada layar Variants, setel varian grup kontrol Anda untuk menggunakan mnist_v1 dan grup Variant A Anda untuk menggunakan mnist_v2 .

e4510434f8da31b6.png

Klik tombol Tinjau di sudut kanan bawah.

Selamat, Anda telah berhasil membuat pengujian A/B untuk dua model terpisah Anda! Pengujian A/B saat ini dalam status draf dan dapat dimulai kapan saja dengan mengeklik tombol "Mulai Eksperimen".

Untuk melihat lebih dekat pengujian A/B, lihat dokumentasi Pengujian A/B .

15. Selamat!

Dalam codelab ini, Anda mempelajari cara mengganti aset tflite yang dibundel secara statis di aplikasi Anda dengan model TFLite yang dimuat secara dinamis dari Firebase. Untuk mempelajari lebih lanjut tentang TFLite dan Firebase, lihat contoh TFLite lainnya dan panduan memulai Firebase.

Apa yang telah kita bahas

  • TensorFlow Lite
  • Firebase ML
  • Firebase Analytics
  • Pemantauan Kinerja Firebase
  • Konfigurasi Jarak Jauh Firebase
  • Pengujian A/B Firebase

Langkah selanjutnya

  • Terapkan Firebase ML Deployment di aplikasi Anda.

Belajarlah lagi

Punya Pertanyaan?

Laporkan Masalah