LiteRT در Google Play Services C API (بتا)

LiteRT در سرویس‌های Google Play به شما امکان می‌دهد مدل‌های یادگیری ماشینی (ML) را بدون جمع‌بندی استاتیک کتابخانه‌های LiteRT در برنامه خود اجرا کنید. این راهنما دستورالعمل هایی در مورد نحوه استفاده از C API برای خدمات Google Play ارائه می دهد.

قبل از کار با LiteRT در Google Play Services C API، مطمئن شوید که ابزار ساخت CMake را نصب کرده اید.

پیکربندی ساخت خود را به روز کنید

برای دسترسی به API خدمات Play برای LiteRT، وابستگی‌های زیر را به کد پروژه برنامه خود اضافه کنید:

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

سپس، با به‌روزرسانی بلوک اندرویدی فایل build.gradle ماژول، ویژگی Prefab را برای دسترسی به C API از اسکریپت CMake خود فعال کنید:

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 در کد جاوا/کوتلین خود مقداردهی کنید.

جاوا

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 های LiteRT دسترسی دارد کامل شده است. هنگامی که کار با موفقیت انجام شد، می توانید تمام API های موجود TFLite Native را فراخوانی کنید.

پیاده سازی کد بومی

برای استفاده از LiteRT در سرویس‌های Google Play با کد بومی خود، می‌توانید یکی از موارد زیر را انجام دهید:

  • توابع جدید JNI را برای فراخوانی توابع بومی از کد جاوا خود اعلام کنید
  • LiteRT Native API را از کد C موجود خود فراخوانی کنید.

توابع JNI:

می‌توانید یک تابع جدید JNI را اعلام کنید تا زمان اجرای LiteRT اعلام شده در جاوا/کوتلین برای کد بومی شما به شرح زیر قابل دسترسی باشد:

جاوا

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 خود را از کد جاوا/کوتلین خود فراخوانی کنید:

جاوا

tfLiteHandleTask.onSuccessTask(unused -> {
    TfLiteJni jni = new TfLiteJni();
    jni.loadModel(getAssets(), "add.bin");
    //...
});
    

کاتلین

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

LiteRT در کد C

فایل هدر API مناسب را برای گنجاندن TfLite با API خدمات Google Play اضافه کنید:

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

سپس می توانید از LiteRT C API معمولی استفاده کنید:

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

سرصفحه‌های LiteRT با خدمات Google Play Native API همان API LiteRT C API معمولی را ارائه می‌کنند، به استثنای ویژگی‌هایی که منسوخ شده یا آزمایشی هستند. در حال حاضر توابع و انواع هدرهای c_api.h ، c_api_types.h و common.h در دسترس هستند. لطفاً توجه داشته باشید که توابع از هدر c_api_experimental.h پشتیبانی نمی شوند.

می‌توانید با گنجاندن tflite.h از توابع خاص LiteRT با خدمات Google Play استفاده کنید.