Mengenali Bunga dengan TensorFlow Lite di Android

Mengenali Bunga dengan TensorFlow Lite di Android

Tentang codelab ini

subjectTerakhir diperbarui Apr 7, 2025
account_circleDitulis oleh Hoi Lam (revamping author), Yash Katariya (original author)

1. Pengantar

657431be3173fa86.png android.png

Catatan: Codelab ini memerlukan perangkat fisik untuk pengujian

TensorFlow adalah framework machine learning multiguna. TensorFlow dapat digunakan di mana saja, mulai dari melatih model besar di berbagai cluster di cloud, hingga menjalankan model secara lokal di sistem tersemat seperti ponsel Anda.

Codelab ini menggunakan TensorFlow Lite untuk menjalankan model pengenalan gambar di perangkat Android.

Menginstal Android Studio 4.1 atau yang lebih baru

Jika Anda belum menginstalnya, download dan instal Android Studio 4.1 atau yang lebih baru saat Anda melatih model TensorFlow Lite.

Yang akan Anda pelajari

  • Cara melatih pengklasifikasi gambar kustom Anda sendiri menggunakan TensorFlow Lite Model Maker.
  • Cara menggunakan Android Studio untuk mengimpor model TensorFlow Lite guna mengintegrasikan model kustom di aplikasi Android menggunakan CameraX.
  • Cara menggunakan GPU di ponsel untuk mempercepat model Anda.

Yang akan Anda build

Aplikasi kamera sederhana yang menjalankan program pengenalan gambar TensorFlow untuk mengidentifikasi bunga.

f11c2821f2c8311d.png

Lisensi: Gratis digunakan

2. Melatih pengenal bunga menggunakan Colab

Sebelum memulai pelatihan model, mulai download dan instal Android Studio 4.1 atau yang lebih baru.

Buka Colab yang menunjukkan cara melatih pengklasifikasi dengan Keras untuk mengenali bunga menggunakan pemelajaran transfer TensorFlow Lite.

3. Menyiapkan direktori kerja

Meng-clone repositori Git

Perintah berikut akan meng-clone repositori Git yang berisi file yang diperlukan untuk codelab ini:

git clone https://github.com/hoitab/TFLClassify.git

Selanjutnya, buka direktori tempat Anda baru saja meng-clone repositori. Di sinilah Anda akan bekerja untuk sisa codelab ini:

cd TFLClassify

4. Menyiapkan aplikasi kerangka Android

android.png

Menginstal Android Studio 4.1 atau yang lebih baru

Jika Anda belum menginstalnya, buka menginstal Android Studio 4.1 atau yang lebih baru.

Membuka project dengan Android Studio

Buka project dengan Android Studio dengan mengikuti langkah-langkah berikut:

  1. Buka Android Studio 7f2480ded53a193b.png. Setelah dimuat, pilih "Open an Existing project" dari pop-up ini:

f3b8bea7e3b39376.png

  1. Dalam pemilih file, pilih TFLClassify/build.gradle dari direktori kerja Anda.
  1. Saat pertama kali membuka project, Anda akan mendapatkan pop-up "Gradle Sync" yang menanyakan cara menggunakan wrapper gradle. Klik "OK".

d68b4d7189e6c1e4.png

  1. Aktifkan mode developer dan Proses Debug USB di ponsel Anda jika belum. Ini adalah penyiapan satu kali. Ikuti petunjuk ini.
  2. Setelah project dan ponsel Anda siap, Anda dapat menjalankannya di perangkat sungguhan dengan memilih TFL_Classify.start dan menekan tombol jalankan 86934b7b01ad7565.png di toolbar:

60a77ef126c1373d.png

  1. Sekarang izinkan Demo Tensorflow mengakses kamera Anda:

b63cba02bb36b7e3.png

  1. Anda akan melihat layar berikut di ponsel dengan angka acak menggantikan tempat hasil sebenarnya akan ditampilkan.

82c603596afa35f1.png

5. Menambahkan TensorFlow Lite ke aplikasi Android

  1. Pilih modul start di project explorer di sebelah kiri:

cede7f2b8b23c1a7.png

  1. Klik kanan modul start atau klik File, lalu New > Other > TensorFlow Lite Model

bf243d9fdd27e20a.png

  1. Pilih lokasi model tempat Anda mendownload FlowerModel.tflite yang dilatih kustom sebelumnya.

cfee18cc6674a408.png

  1. Klik Finish.
  2. Anda akan melihat hal berikut di bagian akhir. FlowerModel.tflite berhasil diimpor dan menampilkan informasi tingkat tinggi terkait model, termasuk input / output serta beberapa contoh kode untuk memulai.

82840065f0d59def.png

6. Opsional: Memeriksa semua daftar tugas

Daftar TODO memudahkan Anda membuka lokasi persis tempat Anda perlu memperbarui codelab. Anda juga dapat menggunakannya dalam project Android untuk mengingatkan diri Anda tentang pekerjaan mendatang. Anda dapat menambahkan item daftar tugas menggunakan komentar kode dan mengetik kata kunci TODO. Untuk mengakses daftar TODO, Anda dapat:

  1. Cara terbaik untuk melihat apa yang akan kita lakukan adalah dengan melihat daftar TODO. Untuk melakukannya, pilih dari panel menu atas View > Tool Windows > TODO

5de29b413574f25c.png

  1. Secara default, semua TODO dalam semua modul akan dicantumkan, sehingga sedikit membingungkan. Kita dapat mengurutkan hanya TODO awal dengan mengklik tombol kelompok menurut di sisi panel TODO dan memilih Modules

5d8fe7b102340208.png

  1. Luaskan semua item di bagian modul awal:

8d0f14a039995b20.png

7. Menjalankan model kustom dengan TensorFlow Lite

  1. Klik TODO 1 dalam daftar TODO atau buka file MainActivity.kt dan temukan TODO 1, lakukan inisialisasi model dengan menambahkan baris ini:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {

  ...
  // TODO 1: Add class variable TensorFlow Lite Model
  private val flowerModel = FlowerModel.newInstance(ctx)

  ...
}
  1. Di dalam metode analisis untuk CameraX Analyzer, kita perlu mengonversi input kamera ImageProxy menjadi Bitmap dan membuat objek TensorImage untuk proses inferensi.
override fun analyze(imageProxy: ImageProxy) {
 
...
 
// TODO 2: Convert Image to Bitmap then to TensorImage
  val tfImage
= TensorImage.fromBitmap(toBitmap(imageProxy))
 
...
}

  1. Proses gambar dan lakukan operasi berikut pada hasilnya:
  • Urutkan hasil menurut probabilitas secara menurun pada atribut score dengan probabilitas tertinggi terlebih dahulu.
  • Ambil hasil top-k seperti yang ditentukan oleh konstanta MAX_RESULT_DISPLAY. Anda dapat memvariasikan nilai variabel ini secara opsional untuk mendapatkan lebih banyak atau lebih sedikit hasil.
override fun analyze(imageProxy: ImageProxy) {
 
...
 
// TODO 3: Process the image using the trained model, sort and pick out the top results
  val outputs
= flowerModel.process(tfImage)
     
.probabilityAsCategoryList.apply {
          sortByDescending
{ it.score } // Sort with highest confidence first
     
}.take(MAX_RESULT_DISPLAY) // take the top results

 
...
}
  1. Konversikan hasil yang diurutkan dan difilter menjadi objek data Recognition yang siap digunakan oleh RecyclerView melalui Data Binding:
override fun analyze(imageProxy: ImageProxy) {
 
...
 
// TODO 4: Converting the top probability items into a list of recognitions
 
for (output in outputs) {
      items
.add(Recognition(output.label, output.score))
 
}
 
...
}
  1. Buat baris berikut sebagai komentar atau hapus baris berikut yang membantu menghasilkan hasil palsu yang kita lihat sebelumnya:
// START - Placeholder code at the start of the codelab. Comment this block of code out.
for (i in 0..MAX_RESULT_DISPLAY-1){
    items.add(Recognition("Fake label $i", Random.nextFloat()))
}
// END - Placeholder code at the start of the codelab. Comment this block of code out.
  1. Jalankan aplikasi di perangkat sungguhan dengan memilih TFL_Classify.start dan menekan tombol jalankan 86934b7b01ad7565.png di toolbar:

60a77ef126c1373d.png

  1. Anda akan melihat layar berikut di ponsel dengan angka acak yang menggantikan tempat hasil sebenarnya akan ditampilkan:

f11c2821f2c8311d.png

8. Opsional: Mempercepat inferensi dengan delegasi GPU

TensorFlow Lite mendukung beberapa akselerator hardware untuk mempercepat inferensi di perangkat seluler Anda. GPU adalah salah satu akselerator yang dapat dimanfaatkan TensorFlow Lite melalui mekanisme delegasi dan cukup mudah digunakan.

  1. Buka build.gradle di bagian modul start atau Anda dapat mengklik TODO 5 di bagian daftar TODO dan menambahkan dependensi berikut:
// TODO 5: Optional GPU Delegates    
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
  1. Kembali ke file MainActivity.kt atau klik TODO 6 di daftar TODO. Ganti inisialisasi sederhana flowerModel dengan hal berikut: Dapatkan instance daftar kompatibilitas GPU dan lakukan inisialisasi GPU bergantung pada apakah GPU tersebut merupakan salah satu GPU yang kompatibel yang tercantum. Jika tidak, mulai 4 thread CPU untuk menjalankan model:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {
  ...

  // TODO 1: Add class variable TensorFlow Lite Model
  // Initializing the flowerModel by lazy so that it runs in the same thread when the process
  // method is called.
  private val flowerModel: FlowerModel by lazy{

    // TODO 6. Optional GPU acceleration
    val compatList = CompatibilityList()

    val options = if(compatList.isDelegateSupportedOnThisDevice){
        Log.d(TAG, "This device is GPU Compatible ")
        Model.Options.Builder().setDevice(Model.Device.GPU).build()
    } else {
        Log.d(TAG, "This device is GPU Incompatible ")
        Model.Options.Builder().setNumThreads(4).build()
    }

  ...
}
  1. Ubah penginisialisasi model untuk menggunakannya dengan menambahkan options ke input metode:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {

  private val flowerModel: FlowerModel by lazy{

    ...

    // Initialize the Flower Model
    FlowerModel.newInstance(ctx, options)
  }
}

  1. Jalankan aplikasi di perangkat sungguhan dengan memilih TFL_Classify.start dan menekan tombol jalankan 86934b7b01ad7565.png di toolbar:

60a77ef126c1373d.png

9. Apa Selanjutnya?

Berikut beberapa link untuk informasi selengkapnya: