TensorFlow Lite di runtime layanan Google Play memungkinkan Anda menjalankan model machine learning (ML) tanpa memaketkan library TensorFlow Lite secara statis ke dalam aplikasi Anda. Panduan ini berisi petunjuk cara menggunakan API C untuk layanan Google Play.
Sebelum menggunakan TensorFlow Lite di layanan Google Play C API, pastikan Anda telah menginstal alat build CMake.
Memperbarui konfigurasi build
Tambahkan dependensi berikut ke kode project aplikasi Anda untuk mengakses Play Services API untuk TensorFlow Lite:
implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"
Kemudian, aktifkan fitur Prefab untuk mengakses C API dari skrip CMake dengan mengupdate blok android file build.gradle modul Anda:
buildFeatures {
prefab = true
}
Anda akhirnya perlu menambahkan paket tensorflowlite_jni_gms_client
yang diimpor
dari AAR sebagai dependensi dalam skrip CMake:
find_package(tensorflowlite_jni_gms_client REQUIRED CONFIG)
target_link_libraries(tflite-jni # your JNI lib target
tensorflowlite_jni_gms_client::tensorflowlite_jni_gms_client
android # other deps for your target
log)
# Also add -DTFLITE_IN_GMSCORE -DTFLITE_WITH_STABLE_ABI
# to the C/C++ compiler flags.
add_compile_definitions(TFLITE_IN_GMSCORE)
add_compile_definitions(TFLITE_WITH_STABLE_ABI)
Menginisialisasi runtime TensorFlow Lite
Sebelum memanggil TensorFlow Lite Native API, Anda harus melakukan inisialisasi runtime TfLiteNative
dalam kode Java/Kotlin.
Java
Task tfLiteInitializeTask = TfLiteNative.initialize(context);
Kotlin
val tfLiteInitializeTask: Task= TfLiteNative.initialize(context)
Dengan menggunakan Task API layanan Google Play, TfLiteNative.initialize
memuat runtime TFLite secara asinkron dari layanan Google Play ke
proses runtime aplikasi Anda. Gunakan addOnSuccessListener()
untuk memastikan tugas TfLite.initialize()
selesai sebelum mengeksekusi kode yang mengakses TensorFlow Lite API. Setelah tugas berhasil diselesaikan, Anda dapat memanggil
semua TFLite Native API yang tersedia.
Implementasi kode native
Untuk menggunakan TensorFlow Lite di layanan Google Play dengan kode native, Anda dapat melakukan salah satu tindakan berikut:
- deklarasikan fungsi JNI baru untuk memanggil fungsi native dari kode Java Anda
- Panggil TensorFlow Lite Native API dari kode C native yang sudah ada.
Fungsi JNI:
Anda dapat mendeklarasikan fungsi JNI baru agar runtime TensorFlow Lite yang dideklarasikan di Java/Kotlin dapat diakses oleh kode native Anda sebagai berikut:
Java
package com.google.samples.gms.tflite.c; public class TfLiteJni { static { System.loadLibrary("tflite-jni"); } public TfLiteJni() { /**/ }; public native void loadModel(AssetManager assetManager, String assetName); public native float[] runInference(float[] input); }
Kotlin
package com.google.samples.gms.tflite.c class TfLiteJni() { companion object { init { System.loadLibrary("tflite-jni") } } external fun loadModel(assetManager: AssetManager, assetName: String) external fun runInference(input: FloatArray): FloatArray }
Cocok dengan fungsi native loadModel
dan runInference
berikut:
#ifdef __cplusplus
extern "C" {
#endif
void Java_com_google_samples_gms_tflite_c_loadModel(
JNIEnv *env, jobject tflite_jni, jobject asset_manager, jstring asset_name){
//...
}
jfloatArray Java_com_google_samples_gms_tflite_c_TfLiteJni_runInference(
JNIEnv* env, jobject tfliteJni, jfloatArray input) {
//...
}
#ifdef __cplusplus
} // extern "C".
#endif
Anda kemudian dapat memanggil fungsi C dari kode Java/Kotlin:
Java
tfLiteHandleTask.onSuccessTask(unused -> { TfLiteJni jni = new TfLiteJni(); jni.loadModel(getAssets(), "add.bin"); //... });
Kotlin
tfLiteHandleTask.onSuccessTask { val jni = TfLiteJni() jni.loadModel(assets, "add.bin") // ... }
TensorFlow Lite dalam kode C
Sertakan file header API yang sesuai untuk menyertakan TfLite dengan API layanan Google Play:
#include "tensorflow/lite/c/c_api.h"
Kemudian, Anda dapat menggunakan TensorFlow Lite C API reguler:
auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);
TensorFlow Lite dengan header Native API layanan Google Play menyediakan API yang sama seperti TensorFlow Lite C API reguler, tidak termasuk fitur yang tidak digunakan lagi atau bersifat eksperimental. Untuk saat ini, fungsi dan jenis dari header c_api.h
, c_api_types.h
, dan common.h
telah tersedia. Perlu
diketahui bahwa fungsi dari header c_api_experimental.h
tidak didukung.
Anda dapat menggunakan fungsi khusus untuk TensorFlow Lite dengan Layanan Google Play dengan menyertakan tflite.h
.