LiteRT trong thời gian chạy của Dịch vụ Google Play cho phép bạn chạy máy các mô hình học máy (ML) mà không cần gói tĩnh các thư viện LiteRT vào ứng dụng của bạn. Hướng dẫn này cung cấp chỉ dẫn về cách sử dụng C API cho Google Dịch vụ Google Play.
Trước khi làm việc với LiteRT 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 của bạn để truy cập vào Play dịch vụ API dành cho LiteRT:
implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"
Sau đó, bật Prefab tính năng truy cập API C trong tập lệnh CMake bằng cách cập nhật khối android trong 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
lấy 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 thời gian chạy LiteRT
Trước khi gọi API gốc LiteRT, 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)
Sử dụng API Tác vụ của Dịch vụ Google Play, TfLiteNative.initialize
tải không đồng bộ thời gian chạy TFLite từ Dịch vụ Google Play vào
của ứng dụng trong thời gian chạy. Sử dụng addOnSuccessListener()
để đảm bảo
Tác vụ TfLite.initialize()
hoàn tất trước khi thực thi mã có quyền truy cập
API LiteRT. Sau khi hoàn thành tác vụ, bạn có thể gọi
tất cả các API gốc TFLite có sẵn.
Triển khai mã gốc
Để sử dụng LiteRT trong các dịch vụ của Google Play bằng mã gốc của mình, bạn có thể thực hiện một trong các lệnh sau:
- khai báo các hàm JNI mới để gọi các hàm gốc qua mã Java
- Gọi API gốc LiteRT từ mã C gốc hiện có.
Các hàm JNI:
Bạn có thể khai báo một hàm JNI mới để khai báo thời gian chạy LiteRT trong Java/Kotlin có thể truy cập 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 }
Khớp với 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") // ... }
LiteRT trong mã C
Thêm tệp tiêu đề API thích hợp để thêm TfLite với Google Play API các dịch vụ:
#include "tensorflow/lite/c/c_api.h"
Sau đó, bạn có thể sử dụng LiteRT C API thông thường:
auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);
LiteRT với tiêu đề API gốc của Dịch vụ Google Play cung cấp
giống như API
LiteRT C API, ngoại trừ
các tính năng không được dùng nữa hoặc thử nghiệm. Hiện tại, các hàm và kiểu
từ các tiêu đề c_api.h
, c_api_types.h
và common.h
. Năn nỉ
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 LiteRT với Dịch vụ Google Play bằng cách
bao gồm tflite.h
.