Google Play hizmetleri C API'sinde TensorFlow Lite (Beta)

Google Play hizmetleri çalışma zamanındaki TensorFlow Lite, TensorFlow Lite kitaplıklarını uygulamanıza statik olarak paketlemeden makine öğrenimi (ML) modellerini çalıştırmanıza olanak tanır. Bu kılavuz, Google Play hizmetleri için C API'lerinin nasıl kullanılacağına ilişkin talimatlar sağlar.

Google Play hizmetleri C API'sinde TensorFlow Lite ile çalışmaya başlamadan önce CMake derleme aracının kurulu olduğundan emin olun.

Yapı yapılandırmanızı güncelleyin

TensorFlow Lite için Play hizmetleri API'sine erişmek üzere uygulama proje kodunuza aşağıdaki bağımlılıkları ekleyin:

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

Ardından, modülünüzün build.gradle dosyasının android bloğunu güncelleyerek CMake betiğinizden C API'sine erişmek için Prefab özelliğini etkinleştirin:

buildFeatures {
  prefab = true
}

Son olarak AAR'dan içe aktarılan tensorflowlite_jni_gms_client paketini CMake betiğinize bağımlılık olarak eklemeniz gerekir:

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 çalışma zamanını başlatın

TensorFlow Lite Native API'yi çağırmadan önce Java/Kotlin kodunuzda TfLiteNative çalışma zamanını başlatmalısınız.

Java

Task tfLiteInitializeTask = TfLiteNative.initialize(context);
      

Kotlin

val tfLiteInitializeTask: Task = TfLiteNative.initialize(context)
        

TfLiteNative.initialize , Google Play hizmetleri Görev API'sini kullanarak, TFLite çalışma zamanını Google Play hizmetlerinden uygulamanızın çalışma zamanı sürecine eşzamansız olarak yükler. TensorFlow Lite API'lerine erişen kodu çalıştırmadan önce TfLite.initialize() görevinin tamamlandığından emin olmak için addOnSuccessListener() kullanın. Görev başarıyla tamamlandıktan sonra mevcut tüm TFLite Yerel API'lerini çağırabilirsiniz.

Yerel kod uygulaması

TensorFlow Lite'ı Google Play hizmetlerinde yerel kodunuzla kullanmak için aşağıdakilerden birini yapabilirsiniz:

  • Java kodunuzdan yerel işlevleri çağırmak için yeni JNI işlevleri bildirin
  • Mevcut yerel C kodunuzdan TensorFlow Lite Yerel API'sini çağırın.

JNI'nın işlevleri:

Java/Kotlin'de bildirilen TensorFlow Lite çalışma zamanının yerel kodunuz tarafından erişilebilir olmasını sağlamak için yeni bir JNI işlevi bildirebilirsiniz:

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
}
        

Aşağıdaki loadModel ve runInference yerel işlevleriyle eşleşme:

#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

Daha sonra C işlevlerinizi Java/Kotlin kodunuzdan arayabilirsiniz:

Java

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

Kotlin

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

C kodunda TensorFlow Lite

TfLite'ı Google Play hizmetleri API'sine dahil etmek için uygun API başlık dosyasını ekleyin:

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

Daha sonra normal TensorFlow Lite C API'sini kullanabilirsiniz:

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

Google Play Hizmetleri Yerel API başlıklarına sahip TensorFlow Lite, kullanımdan kaldırılan veya deneysel olan özellikler hariç olmak üzere normal TensorFlow Lite C API ile aynı API'yi sağlar. Şimdilik c_api.h , c_api_types.h ve common.h başlıklarındaki işlevler ve türler mevcuttur. Lütfen c_api_experimental.h başlığındaki işlevlerin desteklenmediğini unutmayın. Dokümantasyon çevrimiçi olarak bulunabilir.

tflite.h dosyasını ekleyerek TensorFlow Lite'a özel işlevleri Google Play Hizmetleriyle kullanabilirsiniz.