Google Play Hizmetleri C API'sinde LiteRT (Beta)

Google Play Hizmetleri çalışma zamanındaki LiteRT, makineyi çalıştırmanıza olanak tanır LiteRT kitaplıklarını statik olarak en iyi şekilde yararlanabilirsiniz. Bu kılavuzda, Google için C API'lerinin nasıl kullanılacağıyla ilgili talimatlar yer almaktadır. Play Hizmetleri.

Google Play hizmetleri C API'sinde LiteRT ile çalışmaya başlamadan önce CMake derleme aracı yüklü olmalıdır.

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

Play'e erişmek için aşağıdaki bağımlılıkları uygulama proje kodunuza ekleyin LiteRT için hizmetler API'si:

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

Ardından, Prefabetik özelliğini kullanarak, android bloğunu güncelleyerek CMake komut dosyanızdan C API'ye erişebilirsiniz. yüklemeniz gerekir:

buildFeatures {
  prefab = true
}

Son olarak, içe aktarılan tensorflowlite_jni_gms_client paketini eklemeniz gerekir CMake komut dosyanızdaki bir bağımlılık olarak AAR'dan kaldırmanız 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)

LiteRT çalışma zamanını başlatma

LiteRT Native API'yi çağırmadan önce Java/Kotlin kodunuzda TfLiteNative çalışma zamanı.

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 Hizmetleri'nden uygulamanıza eşzamansız olarak yükler çalışma zamanı sürecini anlatacağım. addOnSuccessListener() kullanarak Erişim yapan kod yürütülmeden önce TfLite.initialize() görev tamamlandı LiteRT API'leri Görev başarıyla tamamlandıktan sonra, mevcut tüm TFLite Yerel API'leri.

Yerel kod uygulaması

Google Play Hizmetleri'nde LiteRT'i yerel kodunuzla kullanmak için şunları yapabilirsiniz: şunlardan biri:

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

JNI işlevleri:

LiteRT çalışma zamanını beyan etmek için yeni bir JNI işlevi tanımlayabilirsiniz. aşağıdaki gibi yerel kodunuz tarafından erişilebilen Java/Kotlin'de bulabilirsiniz:

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şlevleri eşleşiyor:

#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 kodu cinsinden LiteRT

Google Play ile TfLite'ı dahil etmek için uygun API başlığı dosyasını ekleyin hizmetler API'si:

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

Daha sonra normal LiteRT C API'yi kullanabilirsiniz:

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

Google Play Hizmetleri ile LiteRT Yerel API başlıkları, normal API ile aynı API LiteRT C API, hariç desteği sonlandırılmış veya deneysel özellikler içerir. Şimdilik fonksiyonlar ve türler c_api.h, c_api_types.h ve common.h üstbilgileri mevcut. Lütfen c_api_experimental.h başlığındaki işlevlerin desteklenmediğini unutmayın.

LiteRT'e özel işlevleri Google Play Hizmetleri ile şu şekilde kullanabilirsiniz: tflite.h dahil.