TensorFlow Lite در خدمات Google Play C API (بتا)

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

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

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

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

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)

زمان اجرا TensorFlow Lite را راه اندازی کنید

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

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

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

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

توابع JNI:

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

جاوا

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

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

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

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