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

Google Play Hizmetleri çalışma zamanında TensorFlow Lite, TensorFlow Lite kitaplıklarını statik olarak uygulamanıza yüklemeden makine öğrenimi (ML) modellerini çalıştırmanızı sağlar. Bu rehberde, Google Play hizmetleri için C API'lerinin nasıl kullanılacağı hakkında talimatlar yer almaktadır.

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

Derleme yapılandırmanızı güncelleme

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ındaki Android bloğunu güncelleyerek CMake komut dosyanızdan C API'ye erişmek için Prefab özelliğini etkinleştirin:

buildFeatures {
  prefab = true
}

Son olarak, AAR'den içe aktarılan tensorflowlite_jni_gms_client paketini CMake komut dosyanıza bir 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şlatma

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ı işlemine eşzamansız olarak yükler. TensorFlow Lite API'lerine erişen kodu yürütmeden önce TfLite.initialize() görevinin tamamlandığından emin olmak için addOnSuccessListener() komutunu kullanın. Görev başarıyla tamamlandıktan sonra mevcut tüm TFLite Yerel API'lerini çağırabilirsiniz.

Yerel kod uygulaması

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

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

JNI işlevleri:

Java/Kotlin'de tanımlanan TensorFlow Lite çalışma zamanını yerel kodunuz tarafından erişilebilir hale getirmek için aşağıdaki gibi yeni bir JNI işlevi tanımlayabilirsiniz:

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
}
        

Şu loadModel ve runInference yerel işlevleri eşleştiriliyor:

#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

Ardından, C işlevlerinizi Java/Kotlin kodunuzdan çağırabilirsiniz:

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 with Google Play services API'yi eklemek 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, normal TensorFlow Lite C API ile aynı API'yi sağlar. Ancak desteği sonlandırılmış veya deneysel olan özellikler hariçtir. Şimdilik c_api.h, c_api_types.h ve common.h başlıklarındaki işlevler ve türler kullanılabilir. c_api_experimental.h başlığındaki işlevlerin desteklenmediğini lütfen unutmayın.

tflite.h ekleyerek Google Play Hizmetleri ile TensorFlow Lite'a özgü işlevleri kullanabilirsiniz.