Google Play 開発者サービスの C API の LiteRT(ベータ版)

Google Play 開発者サービス ランタイムで LiteRT を使用すると、 LiteRT ライブラリを静的にバンドルすることなく、 説明します。このガイドでは、Google Chat 向けの C API の使用手順を説明します。 Play 開発者サービス。

Google Play 開発者サービスの C API で LiteRT を使用する前に、 CMake ビルドツールがインストールされていること。

ビルド構成を更新する

Play にアクセスするには、アプリ プロジェクトのコードに次の依存関係を追加します。 Services API for LiteRT:

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

次に、 プレハブ android ブロックを更新して CMake スクリプトから C API にアクセスする機能 次のように指定します。

buildFeatures {
  prefab = true
}

最後に、インポートしたパッケージ tensorflowlite_jni_gms_client を追加する必要があります。 CMake スクリプトの依存関係として AAR から追加する

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 ランタイムを初期化する

LiteRT Native API を呼び出す前に、 Java/Kotlin コード内の TfLiteNative ランタイム。

Java

Task tfLiteInitializeTask = TfLiteNative.initialize(context);
      

Kotlin

val tfLiteInitializeTask: Task = TfLiteNative.initialize(context)
        

Google Play 開発者サービスの Task API を使用する(TfLiteNative.initialize) TFLite ランタイムを Google Play 開発者サービスから ランタイム プロセスに関与します。addOnSuccessListener() を使用して、 TfLite.initialize() タスクは、サービスにアクセスするコードを実行する前に完了する LiteRT API。タスクが正常に完了したら、Cloud Functions の すべての TFLite Native API を サポートしています

ネイティブ コードの実装

ネイティブ コードで Google Play 開発者サービスで LiteRT を使用するには、次の操作を行います。 次のいずれかになります。

  • 新しい JNI 関数を宣言して Java コードからネイティブ関数を呼び出す
  • 既存のネイティブ C コードから LiteRT Native API を呼び出します。

JNI 関数:

新しい JNI 関数を宣言して、LiteRT ランタイムの宣言を行うことができます。 次のように、ネイティブ コードでアクセスできる 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

その後、Java/Kotlin コードから C 関数を呼び出すことができます。

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 コードの LiteRT

適切な API ヘッダー ファイルを追加して、Google Play で TfLite をインクルードします サービス API:

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

その後、通常の LiteRT C API を使用できます。

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

LiteRT と Google Play 開発者サービスの Native API ヘッダーは、 通常の Pod と同じ API LiteRT C API(以下を除く) 非推奨または試験運用版の機能。今のところ、関数と型は c_api.hc_api_types.hcommon.h の各ヘッダーから取得できます。恐れ入りますが、 c_api_experimental.h ヘッダーの関数はサポートされていません。

Google Play 開発者サービスで LiteRT 固有の関数を使用するには、 tflite.h を含む。