TensorFlow Lite בשירותי Google Play C API (ביטא)

זמן הריצה של TensorFlow Lite בשירותי Google Play מאפשר לך להפעיל מודלים של למידת מכונה (ML) מבלי לאגד באופן סטטי ספריות TensorFlow Lite באפליקציה שלך. מדריך זה מספק הוראות כיצד להשתמש בממשקי ה-API של C עבור שירותי Google Play.

לפני העבודה עם TensorFlow Lite ב-API של שירותי Google Play, ודא שמותקן אצלך את הכלי CMake build.

עדכן את תצורת ה-build שלך

הוסף את התלות הבאות לקוד פרויקט האפליקציה שלך כדי לגשת ל-Play Services API עבור TensorFlow Lite:

implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"

לאחר מכן, הפעל את התכונה Prefab כדי לגשת ל-C API מסקריפט CMake שלך ​​על ידי עדכון בלוק האנדרואיד של קובץ 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)

אתחול זמן הריצה של TensorFlow Lite

לפני קריאה ל- TensorFlow Lite Native API, עליך לאתחל את זמן הריצה של TfLiteNative בקוד Java/Kotlin שלך.

Java

Task tfLiteInitializeTask = TfLiteNative.initialize(context);
      

קוטלין

val tfLiteInitializeTask: Task = TfLiteNative.initialize(context)
        

באמצעות ה-Google Play Services Task API, TfLiteNative.initialize טוען באופן אסינכרוני את זמן הריצה של TFLite משירותי Google Play לתהליך זמן הריצה של האפליקציה שלך. השתמש addOnSuccessListener() כדי לוודא שהמשימה TfLite.initialize() מסתיימת לפני ביצוע קוד הניגש לממשקי API של TensorFlow Lite. לאחר שהמשימה הושלמה בהצלחה, תוכל להפעיל את כל ממשקי ה-API Native של TFLite הזמינים.

יישום קוד מקורי

כדי להשתמש ב-TensorFlow Lite בשירותי Google Play עם הקוד המקורי שלך, תוכל לבצע אחת מהפעולות הבאות:

  • להכריז על פונקציות JNI חדשות כדי לקרוא לפונקציות מקוריות מקוד ה-Java שלך
  • התקשר ל- TensorFlow Lite Native API מקוד ה-C המקורי שלך.

פונקציות JNI:

אתה יכול להכריז על פונקציית JNI חדשה כדי להפוך את זמן הריצה של TensorFlow Lite המוצהר ב-Java/Kotlin לנגיש לקוד המקורי שלך באופן הבא:

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);
}
      

קוטלין

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");
    //...
});
    

קוטלין

tfLiteHandleTask.onSuccessTask {
    val jni = TfLiteJni()
    jni.loadModel(assets, "add.bin")
    // ...
}
      

TensorFlow Lite בקוד C

כלול את קובץ כותרת ה-API המתאים כדי לכלול את TfLite עם ה-API של שירותי Google Play:

#include "tensorflow/lite/c/c_api.h"

לאחר מכן תוכל להשתמש בממשק ה-API הרגיל של TensorFlow Lite C:

auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);

כותרות ה-API המקוריות של TensorFlow Lite עם שירותי Google Play מספקות את אותו API כמו ה- API הרגיל של TensorFlow Lite C , למעט תכונות שהוצאו משימוש או ניסיוניות. לעת עתה זמינים הפונקציות והסוגים מהכותרות c_api.h , c_api_types.h ו- common.h . שים לב שפונקציות מהכותרת c_api_experimental.h אינן נתמכות. את התיעוד ניתן למצוא באינטרנט .

אתה יכול להשתמש בפונקציות ספציפיות ל-TensorFlow Lite עם שירותי Google Play על ידי הכללת tflite.h .