LiteRT في واجهة برمجة التطبيقات C API في "خدمات Google Play" (إصدار تجريبي)

يتيح لك LiteRT تشغيل الجهاز نماذج التعلم (ML) دون تجميع مكتبات LiteRT بشكل ثابت في تطبيقك. يقدّم هذا الدليل تعليمات حول كيفية استخدام واجهات برمجة التطبيقات C API في Google. خدمات Play

قبل استخدام LiteRT في واجهة C API ضمن "خدمات Google Play"، تأكَّد من تثبيت أداة إنشاء CMake.

تعديل إعدادات تصميمك

يُرجى إضافة الاعتماديات التالية إلى رمز مشروع تطبيقك للوصول إلى واجهة برمجة تطبيقات الخدمات لـ LiteRT:

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

بعد ذلك، قم بتمكين Prefab الوصول إلى واجهة برمجة التطبيقات C من خلال نص CMake البرمجي من خلال تعديل كتلة Android في ملف data.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" في "خدمات Google Play"، TfLiteNative.initialize التحميل غير المتزامن لوقت تشغيل TFLite من خدمات Google Play إلى وقت تشغيل التطبيق. استخدِم "addOnSuccessListener()" للتأكّد من تكتمل مهمة واحدة (TfLite.initialize()) قبل تنفيذ الرمز البرمجي الذي يمكنه الوصول إلى البيانات. واجهات برمجة تطبيقات LiteRT بعد اكتمال المهمة بنجاح، يمكنك استدعاء جميع واجهات برمجة تطبيقات TFLite الأصلية المتاحة.

تنفيذ الرموز البرمجية الأصلية

ولاستخدام LiteRT في خدمات Google Play باستخدام رمزك الأصلي، يمكنك إجراء ما يلي: واحد مما يلي:

  • الإعلان عن دوال JNI الجديدة لاستدعاء الدوال الأصلية من رمز Java
  • يمكنك استدعاء واجهة برمجة التطبيقات LiteRT Native API من رمز C الأصلي الحالي.

دوال JNI:

يمكنك الإعلان عن دالة JNI جديدة للإشارة إلى بيئة تشغيل LiteRT في 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);
}
      

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

يجب تضمين ملف عنوان واجهة برمجة التطبيقات المناسب لتضمين TfLite مع 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" نفس واجهة برمجة التطبيقات مثل واجهة برمجة التطبيقات العادية LiteRT C API، باستثناء ميزات متوقّفة نهائيًا أو تجريبية. في الوقت الحالي، الدوال وأنواع من العناوين c_api.h وc_api_types.h وcommon.h متاحة. من فضلك يُرجى العلم أنّ الدوال من عنوان c_api_experimental.h غير متاحة.

يمكنك استخدام وظائف خاصة بـ LiteRT مع "خدمات Google Play" من خلال بما في ذلك tflite.h.