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

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

قبل العمل باستخدام TensorFlow Lite في واجهة برمجة تطبيقات C في "خدمات Google Play"، تأكَّد من تثبيت أداة التصميم CMake.

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

أضِف التبعيات التالية إلى رمز مشروع تطبيقك للوصول إلى Playservices API for TensorFlow Lite:

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

بعد ذلك، فعِّل ميزة Prefab للوصول إلى واجهة برمجة التطبيقات C من نص 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 أو Kootlin.

Java

Task tfLiteInitializeTask = TfLiteNative.initialize(context);
      

Kotlin

val tfLiteInitializeTask: Task = TfLiteNative.initialize(context)
        

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

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

لاستخدام 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);
}
      

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

TensorFlow Lite في الترميز C

ضمِّن ملف عنوان واجهة برمجة التطبيقات المناسب لتضمين واجهة برمجة التطبيقات TfLite مع واجهة برمجة التطبيقات لخدمات Google Play:

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

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

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

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

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