Menggunakan Metadata TensorFlow Lite , pengembang dapat membuat kode wrapper untuk mengaktifkan integrasi di Android. Bagi sebagian besar pengembang, antarmuka grafis Android Studio ML Model Binding adalah yang paling mudah digunakan. Jika Anda memerlukan penyesuaian lebih lanjut atau menggunakan alat baris perintah, TensorFlow Lite Codegen juga tersedia.
Gunakan Pengikatan Model ML Android Studio
Untuk model TensorFlow Lite yang disempurnakan dengan metadata , developer dapat menggunakan Android Studio ML Model Binding untuk mengonfigurasi setelan proyek secara otomatis dan menghasilkan kelas wrapper berdasarkan metadata model. Kode pembungkus menghilangkan kebutuhan untuk berinteraksi langsung dengan ByteBuffer
. Sebagai gantinya, developer dapat berinteraksi dengan model TensorFlow Lite dengan objek yang diketik seperti Bitmap
dan Rect
.
Impor model TensorFlow Lite di Android Studio
Klik kanan pada modul yang ingin Anda gunakan model TFLitenya atau klik
File
, laluNew
>Other
>TensorFlow Lite Model
Pilih lokasi file TFLite Anda. Perhatikan bahwa alat ini akan mengonfigurasi dependensi modul atas nama Anda dengan pengikatan Model ML dan semua dependensi secara otomatis dimasukkan ke dalam file
build.gradle
modul Android Anda.Opsional: Pilih kotak centang kedua untuk mengimpor TensorFlow GPU jika Anda ingin menggunakan akselerasi GPU.
Klik
Finish
.Layar berikut akan muncul setelah impor berhasil. Untuk mulai menggunakan model, pilih Kotlin atau Java, salin dan tempel kode di bawah bagian
Sample Code
. Anda dapat kembali ke layar ini dengan mengklik dua kali model TFLite di bawah direktoriml
di Android Studio.
Mempercepat inferensi model
ML Model Binding memberikan cara bagi pengembang untuk mempercepat kode mereka melalui penggunaan delegasi dan jumlah thread.
Langkah 1. Periksa file modul build.gradle
yang berisi ketergantungan berikut:
dependencies {
...
// TFLite GPU delegate 2.3.0 or above is required.
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
}
Langkah 2. Deteksi apakah GPU yang berjalan di perangkat kompatibel dengan delegasi GPU TensorFlow, jika tidak jalankan model menggunakan beberapa thread CPU:
Kotlin
import org.tensorflow.lite.gpu.CompatibilityList import org.tensorflow.lite.gpu.GpuDelegate val compatList = CompatibilityList() val options = if(compatList.isDelegateSupportedOnThisDevice) { // if the device has a supported GPU, add the GPU delegate Model.Options.Builder().setDevice(Model.Device.GPU).build() } else { // if the GPU is not supported, run on 4 threads Model.Options.Builder().setNumThreads(4).build() } // Initialize the model as usual feeding in the options object val myModel = MyModel.newInstance(context, options) // Run inference per sample code
Jawa
import org.tensorflow.lite.support.model.Model import org.tensorflow.lite.gpu.CompatibilityList; import org.tensorflow.lite.gpu.GpuDelegate; // Initialize interpreter with GPU delegate Model.Options options; CompatibilityList compatList = CompatibilityList(); if(compatList.isDelegateSupportedOnThisDevice()){ // if the device has a supported GPU, add the GPU delegate options = Model.Options.Builder().setDevice(Model.Device.GPU).build(); } else { // if the GPU is not supported, run on 4 threads options = Model.Options.Builder().setNumThreads(4).build(); } MyModel myModel = new MyModel.newInstance(context, options); // Run inference per sample code
Hasilkan antarmuka model dengan pembuat kode TensorFlow Lite
Untuk model TensorFlow Lite yang disempurnakan dengan metadata , pengembang dapat menggunakan generator kode wrapper Android TensorFlow Lite untuk membuat kode wrapper khusus platform. Kode pembungkus menghilangkan kebutuhan untuk berinteraksi langsung dengan ByteBuffer
. Sebagai gantinya, developer dapat berinteraksi dengan model TensorFlow Lite dengan objek yang diketik seperti Bitmap
dan Rect
.
Kegunaan pembuat kode bergantung pada kelengkapan entri metadata model TensorFlow Lite. Lihat bagian <Codegen usage>
pada kolom yang relevan di metadata_schema.fbs , untuk melihat bagaimana alat codegen mengurai setiap kolom.
Hasilkan Kode pembungkus
Anda perlu menginstal perkakas berikut di terminal Anda:
pip install tflite-support
Setelah selesai, pembuat kode dapat digunakan menggunakan sintaks berikut:
tflite_codegen --model=./model_with_metadata/mobilenet_v1_0.75_160_quantized.tflite \
--package_name=org.tensorflow.lite.classify \
--model_class_name=MyClassifierModel \
--destination=./classify_wrapper
Kode yang dihasilkan akan ditempatkan di direktori tujuan. Jika Anda menggunakan Google Colab atau lingkungan jarak jauh lainnya, mungkin lebih mudah untuk meng-zip hasilnya dalam arsip zip dan mendownloadnya ke proyek Android Studio Anda:
# Zip up the generated code
!zip -r classify_wrapper.zip classify_wrapper/
# Download the archive
from google.colab import files
files.download('classify_wrapper.zip')
Menggunakan kode yang dihasilkan
Langkah 1: Impor kode yang dihasilkan
Buka zip kode yang dihasilkan jika perlu ke dalam struktur direktori. Akar dari kode yang dihasilkan diasumsikan SRC_ROOT
.
Buka proyek Android Studio tempat Anda ingin menggunakan model TensorFlow lite dan impor modul yang dihasilkan dengan: Dan File -> Baru -> Impor Modul -> pilih SRC_ROOT
Menggunakan contoh di atas, direktori dan modul yang diimpor akan disebut classify_wrapper
.
Langkah 2: Perbarui file build.gradle
aplikasi
Dalam modul aplikasi yang akan menggunakan modul perpustakaan yang dihasilkan:
Di bawah bagian Android, tambahkan yang berikut ini:
aaptOptions {
noCompress "tflite"
}
Di bawah bagian dependensi, tambahkan yang berikut ini:
implementation project(":classify_wrapper")
Langkah 3: Menggunakan model
// 1. Initialize the model
MyClassifierModel myImageClassifier = null;
try {
myImageClassifier = new MyClassifierModel(this);
} catch (IOException io){
// Error reading the model
}
if(null != myImageClassifier) {
// 2. Set the input with a Bitmap called inputBitmap
MyClassifierModel.Inputs inputs = myImageClassifier.createInputs();
inputs.loadImage(inputBitmap));
// 3. Run the model
MyClassifierModel.Outputs outputs = myImageClassifier.run(inputs);
// 4. Retrieve the result
Map<String, Float> labeledProbability = outputs.getProbability();
}
Mempercepat inferensi model
Kode yang dihasilkan memberikan cara bagi pengembang untuk mempercepat kode mereka melalui penggunaan delegasi dan jumlah thread. Ini dapat diatur saat menginisialisasi objek model karena memerlukan tiga parameter:
-
Context
: Konteks dari Aktivitas atau Layanan Android - (Opsional)
Device
: Delegasi akselerasi TFLite misalnya GPUDelegate atau NNAPIDelegate - (Opsional)
numThreads
: Jumlah thread yang digunakan untuk menjalankan model - defaultnya adalah satu.
Misalnya, untuk menggunakan delegasi NNAPI dan maksimal tiga thread, Anda dapat menginisialisasi model seperti ini:
try {
myImageClassifier = new MyClassifierModel(this, Model.Device.NNAPI, 3);
} catch (IOException io){
// Error reading the model
}
Pemecahan masalah
Jika Anda mendapatkan 'java.io.FileNotFoundException: File ini tidak dapat dibuka sebagai deskriptor file; ini mungkin kesalahan terkompresi, masukkan baris berikut di bawah bagian Android dari modul aplikasi yang akan menggunakan modul perpustakaan:
aaptOptions {
noCompress "tflite"
}