1. Pengantar
Catatan: Codelab ini memerlukan perangkat fisik untuk menguji
TensorFlow adalah framework machine learning serbaguna. TensorFlow dapat digunakan di mana saja, mulai dari melatih model besar di berbagai cluster di cloud, hingga menjalankan model secara lokal pada sistem tersemat seperti ponsel Anda.
Codelab ini menggunakan TensorFlow Lite untuk menjalankan model pengenalan citra 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 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.
Yang akan Anda build
Aplikasi kamera sederhana yang menjalankan program pengenalan gambar TensorFlow untuk mengidentifikasi bunga.
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 yang baru saja Anda clone repositori. Di sinilah Anda akan mengerjakan bagian lainnya dari codelab ini:
cd TFLClassify
4. Menyiapkan aplikasi kerangka Android
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:
- Buka Android Studio . Setelah dimuat, pilih "Open an Existing project" dari pop-up ini:
- Di pemilih file, pilih
TFLClassify/build.gradle
dari direktori kerja Anda.
- Anda akan mendapatkan pesan "Gradle Sync" pop-up, saat pertama kali Anda membuka project, yang menanyakan tentang penggunaan wrapper gradle. Klik "OK".
- Aktifkan model developer dan Proses Debug USB di ponsel jika Anda belum melakukannya. Penyiapan ini hanya dilakukan satu kali. Ikuti petunjuk ini.
- Setelah project dan ponsel Anda siap, Anda dapat menjalankannya di perangkat sebenarnya dengan memilih
TFL_Classify.start
dan menekan tombol jalankan di toolbar:
- Sekarang izinkan Demo Tensorflow mengakses kamera Anda:
- Anda akan melihat layar berikut pada ponsel dengan angka acak menggantikan tempat hasil sebenarnya akan ditampilkan.
5. Menambahkan TensorFlow Lite ke aplikasi Android
- Pilih modul
start
pada penjelajah project di sisi kiri:
- Klik kanan modul
start
atau klikFile
, laluNew
>Other
TensorFlow Lite Model
- Pilih lokasi model tempat Anda telah mendownload
FlowerModel.tflite
yang dilatih khusus sebelumnya.
- Klik
Finish
. - Anda akan melihat hal berikut di bagian akhir. BungaModel.tflite berhasil diimpor dan menampilkan informasi tingkat tinggi terkait model tersebut, termasuk input / output serta beberapa kode contoh untuk membantu Anda memulai.
6. Opsional: Memeriksa semua daftar tugas
Daftar TODO memudahkan navigasi ke lokasi yang tepat tempat Anda perlu memperbarui codelab. Anda juga dapat menggunakannya dalam project Android untuk mengingatkan diri Anda akan pekerjaan yang akan datang. Anda dapat menambahkan item daftar tugas menggunakan komentar kode dan mengetik kata kunci TODO
. Untuk mengakses daftar TODO, Anda dapat:
- Cara yang bagus untuk melihat apa yang akan kita lakukan adalah dengan melihat daftar TODO. Untuk melakukannya, pilih dari panel menu atas
View
>Tool Windows
>TODO
- Secara default, ini mencantumkan semua TODO di semua modul yang membuatnya sedikit membingungkan. Kita hanya dapat menyortir TODO awal dengan mengklik tombol kelompokkan menurut di sisi panel TODO dan pilih
Modules
- Luaskan semua item yang berada di bawah modul awal:
7. Menjalankan model kustom dengan TensorFlow Lite
- Klik TODO 1 dalam daftar TODO atau buka file MainActivity.kt dan temukan TODO 1, 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)
...
}
- Di dalam metode analisis untuk CameraX Analyzer, kita perlu mengonversi
ImageProxy
input kamera menjadiBitmap
dan membuat objekTensorImage
untuk proses inferensi.
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 2: Convert Image to Bitmap then to TensorImage
val tfImage = TensorImage.fromBitmap(toBitmap(imageProxy))
...
}
- Proses gambar dan lakukan operasi berikut pada hasilnya:
- Mengurutkan hasil secara menurun berdasarkan probabilitas di bagian 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 hasil yang lebih banyak atau lebih sedikit.
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
...
}
- Konversikan hasil yang diurutkan dan difilter menjadi objek data
Recognition
yang siap digunakan olehRecyclerView
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))
}
...
}
- Jadikan sebagai komentar atau hapus baris berikut yang membantu membuat 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.
- Jalankan aplikasi di perangkat sebenarnya dengan memilih
TFL_Classify.start
, lalu tekan tombol jalankan di toolbar:
- Anda akan melihat layar berikut pada ponsel dengan angka acak menggantikan tempat hasil sebenarnya akan ditampilkan:
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.
- Buka build.gradle dalam modul
start
atau Anda dapat mengklik TODO 5 pada daftar TODO dan tambahkan dependensi berikut:
// TODO 5: Optional GPU Delegates
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
- Kembali ke file MainActivity.kt atau klik TODO 6 dalam daftar TODO. Ganti inisiasi sederhana flowerModel dengan kode berikut: Dapatkan instance daftar kompatibilitas GPU dan lakukan inisialisasi GPU bergantung pada apakah itu merupakan salah satu GPU yang kompatibel dalam daftar. 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()
}
...
}
- Ubah penginisialisasi model agar menggunakan ini 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)
}
}
- Jalankan aplikasi di perangkat sebenarnya dengan memilih
TFL_Classify.start
, lalu tekan tombol jalankan di toolbar:
9. Apa Selanjutnya?
Berikut beberapa link untuk informasi lebih lanjut:
- Coba model TFLite lainnya yang kompatibel dengan ML Model binding dari tfhub.dev.
- Pelajari TFLite lebih lanjut dari dokumen di tensorflow.org dan repositori kode.
- Coba beberapa model TFLite yang telah dilatih sebelumnya, termasuk detektor frasa pengaktif ucapan dan versi smart reply di perangkat.
- Pelajari lebih lanjut TensorFlow secara umum dengan dokumen memulai kami.