LiteRT di layanan Google Play juga dapat diakses menggunakan Java API, yang dapat digunakan dari kode Java atau Kotlin, selain Native API. Secara khusus, LiteRT di layanan Google Play tersedia melalui LiteRT Interpreter API.
Menggunakan Interpreter API
LiteRT Interpreter API, yang disediakan oleh runtime TensorFlow, menyediakan antarmuka serbaguna untuk membangun dan menjalankan model ML. Gunakan langkah-langkah berikut untuk menjalankan inferensi dengan Interpreter API menggunakan runtime TensorFlow Lite di layanan Google Play.
1. Menambahkan dependensi project
Tambahkan dependensi berikut ke kode project aplikasi Anda untuk mengakses Play Services API untuk LiteRT:
dependencies {
...
// LiteRT dependencies for Google Play services
implementation 'com.google.android.gms:play-services-tflite-java:16.1.0'
// Optional: include LiteRT Support Library
implementation 'com.google.android.gms:play-services-tflite-support:16.1.0'
...
}
2. Menambahkan inisialisasi LiteRT
Lakukan inisialisasi komponen LiteRT dari Google Play services API sebelum menggunakan LiteRT API:
Kotlin
val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }
Java
Task<Void> initializeTask = TfLite.initialize(context);
3. Buat Interpreter dan tetapkan opsi runtime
Buat interpreter menggunakan InterpreterApi.create()
dan konfigurasikan untuk menggunakan
runtime layanan Google Play, dengan memanggil InterpreterApi.Options.setRuntime()
,
seperti yang ditunjukkan dalam contoh kode berikut:
Kotlin
import org.tensorflow.lite.InterpreterApi import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime ... private lateinit var interpreter: InterpreterApi ... initializeTask.addOnSuccessListener { val interpreterOption = InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) interpreter = InterpreterApi.create( modelBuffer, interpreterOption )} .addOnFailureListener { e -> Log.e("Interpreter", "Cannot initialize interpreter", e) }
Java
import org.tensorflow.lite.InterpreterApi import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime ... private InterpreterApi interpreter; ... initializeTask.addOnSuccessListener(a -> { interpreter = InterpreterApi.create(modelBuffer, new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)); }) .addOnFailureListener(e -> { Log.e("Interpreter", String.format("Cannot initialize interpreter: %s", e.getMessage())); });
Anda harus menggunakan implementasi di atas karena menghindari pemblokiran thread antarmuka pengguna Android. Jika perlu mengelola eksekusi thread dengan lebih cermat, Anda
dapat menambahkan panggilan Tasks.await()
ke pembuatan interpreter:
Kotlin
import androidx.lifecycle.lifecycleScope ... lifecycleScope.launchWhenStarted { // uses coroutine initializeTask.await() }
Java
@BackgroundThread InterpreterApi initializeInterpreter() { Tasks.await(initializeTask); return InterpreterApi.create(...); }
4. Menjalankan inferensi
Dengan menggunakan objek interpreter
yang Anda buat, panggil metode run()
untuk membuat inferensi.
Kotlin
interpreter.run(inputBuffer, outputBuffer)
Java
interpreter.run(inputBuffer, outputBuffer);
Akselerasi hardware
LiteRT memungkinkan Anda mempercepat performa model menggunakan prosesor hardware khusus, seperti unit pemrosesan grafis (GPU). Anda dapat memanfaatkan pemroses khusus ini menggunakan driver hardware yang disebut delegasi.
Delegasi GPU disediakan melalui layanan Google Play dan dimuat secara dinamis, seperti versi Play services dari Interpreter API.
Memeriksa kompatibilitas perangkat
Tidak semua perangkat mendukung akselerasi hardware GPU dengan TFLite. Untuk mengurangi error dan potensi kerusakan, gunakan metode TfLiteGpu.isGpuDelegateAvailable
untuk memeriksa apakah perangkat kompatibel dengan delegasi GPU.
Gunakan metode ini untuk mengonfirmasi apakah perangkat kompatibel dengan GPU, dan gunakan CPU sebagai pengganti jika GPU tidak didukung.
useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)
Setelah memiliki variabel seperti useGpuTask
, Anda dapat menggunakannya untuk menentukan apakah perangkat menggunakan delegasi GPU.
Kotlin
val interpreterTask = useGpuTask.continueWith { task -> val interpreterOptions = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) if (task.result) { interpreterOptions.addDelegateFactory(GpuDelegateFactory()) } InterpreterApi.create(FileUtil.loadMappedFile(context, MODEL_PATH), interpreterOptions) }
Java
Task<InterpreterApi.Options> interpreterOptionsTask = useGpuTask.continueWith({ task -> InterpreterApi.Options options = new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY); if (task.getResult()) { options.addDelegateFactory(new GpuDelegateFactory()); } return options; });
GPU dengan Interpreter API
Untuk menggunakan delegasi GPU dengan Interpreter API:
Perbarui dependensi project untuk menggunakan delegasi GPU dari layanan Play:
implementation 'com.google.android.gms:play-services-tflite-gpu:16.2.0'
Aktifkan opsi delegasi GPU dalam inisialisasi TFlite:
Kotlin
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build())
Java
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build());
Aktifkan delegasi GPU di opsi interpreter: tetapkan factory delegasi ke GpuDelegateFactory dengan memanggil
addDelegateFactory() within
InterpreterApi.Options()`:Kotlin
val interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(GpuDelegateFactory())
Java
Options interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(new GpuDelegateFactory());
Bermigrasi dari LiteRT mandiri
Jika Anda berencana memigrasikan aplikasi dari LiteRT mandiri ke API layanan Play, tinjau panduan tambahan berikut untuk memperbarui kode project aplikasi Anda:
- Tinjau bagian Batasan untuk memastikan kasus penggunaan Anda didukung.
- Sebelum memperbarui kode, sebaiknya lakukan pemeriksaan performa dan akurasi untuk model Anda, terutama jika Anda menggunakan versi LiteRT (TF Lite) yang lebih lama dari versi 2.1, sehingga Anda memiliki tolok ukur untuk dibandingkan dengan penerapan baru.
- Jika telah memigrasikan semua kode untuk menggunakan API layanan Play untuk LiteRT, Anda harus menghapus dependensi library runtime LiteRT yang ada (entri dengan
org.tensorflow:tensorflow-lite:*
) dari file build.gradle agar dapat mengurangi ukuran aplikasi. - Identifikasi semua kemunculan pembuatan objek
new Interpreter
dalam kode Anda, dan ubah setiap kemunculan tersebut agar menggunakan panggilanInterpreterApi.create()
.TfLite.initialize
baru bersifat asinkron, yang berarti dalam sebagian besar kasus,TfLite.initialize
baru tidak dapat langsung menggantikanTfLite.initialize
lama: Anda harus mendaftarkan pemroses saat panggilan selesai. Lihat cuplikan kode di kode Langkah 3. - Tambahkan
import org.tensorflow.lite.InterpreterApi;
danimport org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime;
ke file sumber menggunakan classorg.tensorflow.lite.Interpreter
atauorg.tensorflow.lite.InterpreterApi
. - Jika ada panggilan yang dihasilkan ke
InterpreterApi.create()
hanya dengan satu argumen, tambahkannew InterpreterApi.Options()
ke daftar argumen. - Tambahkan
.setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
ke argumen terakhir panggilan apa pun keInterpreterApi.create()
. - Ganti semua kemunculan class
org.tensorflow.lite.Interpreter
lainnya denganorg.tensorflow.lite.InterpreterApi
.
Jika ingin menggunakan LiteRT mandiri dan Play services API secara berdampingan, Anda harus menggunakan LiteRT (TF Lite) versi 2.9 atau yang lebih baru. LiteRT (TF Lite) versi 2.8 dan versi sebelumnya tidak kompatibel dengan API layanan Play.