TensorFlow Lite في Google Play Services C API (بيتا)

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

قبل العمل مع TensorFlow Lite في Google Play Services C API، تأكد من تثبيت أداة البناء CMake .

قم بتحديث تكوين البناء الخاص بك

أضف التبعيات التالية إلى رمز مشروع التطبيق الخاص بك للوصول إلى Play Services API لـ TensorFlow Lite:

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

بعد ذلك، قم بتمكين ميزة Prefab للوصول إلى 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)

تهيئة وقت تشغيل TensorFlow Lite

قبل استدعاء TensorFlow Lite Native API، يجب عليك تهيئة وقت تشغيل TfLiteNative في كود Java/Kotlin الخاص بك.

جافا

Task tfLiteInitializeTask = TfLiteNative.initialize(context);
      

كوتلين

val tfLiteInitializeTask: Task = TfLiteNative.initialize(context)
        

باستخدام واجهة برمجة تطبيقات مهام خدمات Google Play، يقوم TfLiteNative.initialize بتحميل وقت تشغيل TFLite بشكل غير متزامن من خدمات Google Play في عملية تشغيل التطبيق الخاص بك. استخدم addOnSuccessListener() للتأكد من اكتمال مهمة TfLite.initialize() قبل تنفيذ التعليمات البرمجية التي تصل إلى TensorFlow Lite APIs. بمجرد اكتمال المهمة بنجاح، يمكنك استدعاء جميع واجهات برمجة التطبيقات الأصلية المتوفرة لـ TFLite.

تنفيذ الكود الأصلي

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

  • أعلن عن وظائف JNI جديدة لاستدعاء الوظائف الأصلية من كود Java الخاص بك
  • اتصل بـ TensorFlow Lite Native API من كود C الأصلي الموجود لديك.

وظائف جيني:

يمكنك الإعلان عن وظيفة JNI جديدة لجعل وقت تشغيل TensorFlow Lite المعلن في Java/Kotlin متاحًا للتعليمات البرمجية الأصلية الخاصة بك على النحو التالي:

جافا

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 الخاص بك:

جافا

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 مع واجهة برمجة تطبيقات خدمات Google Play:

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

يمكنك بعد ذلك استخدام واجهة برمجة تطبيقات TensorFlow Lite C العادية:

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

توفر رؤوس واجهة برمجة التطبيقات الأصلية TensorFlow Lite مع خدمات Google Play نفس واجهة برمجة التطبيقات مثل واجهة برمجة تطبيقات TensorFlow Lite C العادية، باستثناء الميزات المهملة أو التجريبية. في الوقت الحالي، تتوفر الوظائف والأنواع من الرؤوس c_api.h و c_api_types.h و common.h . يرجى ملاحظة أن الوظائف من رأس c_api_experimental.h غير مدعومة. يمكن العثور على الوثائق على الانترنت .

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