תכונת LiteRT בזמן הריצה של Google Play Services מאפשרת להפעיל מחשב של למידת מכונה בלי לקבץ באופן סטטי ספריות של LiteRT באפליקציה שלך. המדריך הזה מספק הוראות לשימוש בממשקי ה-API של Google Play Services.
לפני שמתחילים לעבוד עם LiteRT ב-C API של Google Play Services, יש לוודא שמותקן בהם כלי ה-build של CMake.
עדכון של תצורת ה-build
כדי לגשת ל-Play, צריך להוסיף את יחסי התלות הבאים לקוד של פרויקט האפליקציה Services API ל-LiteRT:
implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"
לאחר מכן, מפעילים את טרום כדי לגשת ל-C API מסקריפט ה-CMake, על ידי עדכון בלוק Android של קובץ build.gradle במודול:
buildFeatures {
prefab = true
}
סוף סוף צריך להוסיף את החבילה tensorflowlite_jni_gms_client
שיובאה
מ-AAR כתלות בסקריפט ה-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)
אתחול זמן הריצה של LiteRT
לפני קריאה ל-LiteRT Native API, עליך לאתחל את
זמן הריצה של TfLiteNative
בקוד Java/Kotlin שלך.
Java
Task tfLiteInitializeTask = TfLiteNative.initialize(context);
Kotlin
val tfLiteInitializeTask: Task= TfLiteNative.initialize(context)
באמצעות Google Play Services Task API, TfLiteNative.initialize
טוען באופן אסינכרוני את זמן הריצה של TFLite מ-Google Play Services אל
בסביבת זמן הריצה של האפליקציה. יש להשתמש ב-addOnSuccessListener()
כדי לוודא
משימה אחת (TfLite.initialize()
) הושלמה לפני הרצת קוד שמנסה לגשת
ממשקי API של LiteRT. אחרי שהמשימה תושלם, תוכלו להפעיל
את כל ממשקי ה-API הזמינים של TFLite Native.
הטמעת קוד מקורי
כדי להשתמש ב-LiteRT ב-Google Play Services עם קוד ה-Native שלכם, אתם יכולים: אחד מהפרטים הבאים:
- להצהיר על פונקציות JNI חדשות כדי לקרוא לפונקציות נייטיב מקוד Java
- קוראים ל-LiteRT Native API מקוד ה-C המקורי הקיים.
פונקציות JNI:
אפשר להצהיר על פונקציית JNI חדשה כדי להצהיר על זמן הריצה של LiteRT ב-Java/Kotlin נגישים לקוד ה-Native שלכם, באופן הבא:
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 }
התאמות לפונקציות המקוריות הבאות: loadModel
ו-runInference
:
#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
לאחר מכן אפשר לקרוא לפונקציות C מקוד 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 בקוד C
יש לכלול את קובץ הכותרת המתאים של ה-API כדי לכלול את ה-TfLite עם Google Play Services API:
#include "tensorflow/lite/c/c_api.h"
לאחר מכן תוכלו להשתמש ב-API הרגיל של LiteRT C:
auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);
כותרות LiteRT עם Google Play Services Native API מספקות
זהה ל-API הרגיל
LiteRT C API, לא כולל
תכונות שהוצאו משימוש או שהן ניסיוניות. בינתיים, הפונקציות והסוגים
מהכותרות c_api.h
, c_api_types.h
ו-common.h
זמינות. נשמח אם תוכלו לסמן בכוכב
חשוב לשים לב שאין תמיכה בפונקציות מהכותרת c_api_experimental.h
.
אפשר להשתמש בפונקציות ספציפיות ל-LiteRT באמצעות Google Play Services על ידי
כולל tflite.h
.