Với TensorFlow Lite trong thời gian chạy của Dịch vụ Google Play, bạn có thể chạy các mô hình học máy (ML) mà không cần nhóm tĩnh các thư viện TensorFlow Lite vào ứng dụng của mình. Hướng dẫn này đưa ra hướng dẫn về cách sử dụng các API C cho Dịch vụ Google Play.
Trước khi làm việc với TensorFlow Lite trong API C của Dịch vụ Google Play, hãy đảm bảo bạn đã cài đặt công cụ xây dựng CMake.
Cập nhật cấu hình bản dựng
Thêm các phần phụ thuộc sau vào mã dự án ứng dụng để truy cập vào API Dịch vụ Play cho TensorFlow Lite:
implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"
Sau đó, hãy bật tính năng Prefab để truy cập vào API C từ tập lệnh CMake bằng cách cập nhật khối android của tệp build.gradle của mô-đun:
buildFeatures {
prefab = true
}
Cuối cùng, bạn cần thêm gói tensorflowlite_jni_gms_client
đã nhập từ AAR làm phần phụ thuộc trong tập lệnh 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)
Khởi chạy môi trường thời gian chạy TensorFlow Lite
Trước khi gọi API gốc TensorFlow Lite, bạn phải khởi chạy thời gian chạy TfLiteNative
trong mã Java/Kotlin.
Java
Task tfLiteInitializeTask = TfLiteNative.initialize(context);
Kotlin
val tfLiteInitializeTask: Task= TfLiteNative.initialize(context)
Bằng cách sử dụng API Tasks của Dịch vụ Google Play, TfLiteNative.initialize
sẽ tải không đồng bộ môi trường thời gian chạy TFLite từ Dịch vụ Google Play vào quy trình thời gian chạy của ứng dụng. Sử dụng addOnSuccessListener()
để đảm bảo tác vụ TfLite.initialize()
hoàn tất trước khi thực thi mã truy cập vào API TensorFlow Lite. Sau khi hoàn tất thành công tác vụ, bạn có thể gọi
tất cả các API gốc TFLite hiện có.
Triển khai mã gốc
Để sử dụng TensorFlow Lite trong dịch vụ Google Play với mã gốc, bạn có thể thực hiện một trong những thao tác sau:
- khai báo các hàm JNI mới để gọi các hàm gốc từ mã Java của bạn
- Gọi API gốc TensorFlow Lite từ mã C gốc hiện có.
Các hàm JNI:
Bạn có thể khai báo hàm JNI mới để làm cho thời gian chạy TensorFlow Lite được khai báo trong Java/Kotlin có thể truy cập được vào mã gốc của bạn như sau:
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 }
So khớp các hàm gốc loadModel
và runInference
sau:
#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
Sau đó, bạn có thể gọi các hàm C từ mã 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 trong mã C
Bao gồm tệp tiêu đề API thích hợp để đưa TfLite vào với API Dịch vụ Google Play:
#include "tensorflow/lite/c/c_api.h"
Sau đó, bạn có thể sử dụng API TensorFlow Lite C thông thường:
auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);
TensorFlow Lite với các tiêu đề API gốc của Dịch vụ Google Play cung cấp API giống như API TensorFlow Lite C thông thường, ngoại trừ các tính năng không dùng nữa hoặc đang trong giai đoạn thử nghiệm. Hiện tại, bạn đã có thể sử dụng các hàm và kiểu từ tiêu đề c_api.h
, c_api_types.h
và common.h
. Xin lưu ý rằng các hàm từ tiêu đề c_api_experimental.h
không được hỗ trợ.
Bạn có thể sử dụng các hàm dành riêng cho TensorFlow Lite với Dịch vụ Google Play bằng cách thêm tflite.h
.