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.h
、c_api_types.h
、common.h
の各ヘッダーから取得できます。恐れ入りますが、
c_api_experimental.h
ヘッダーの関数はサポートされていません。
Google Play 開発者サービスで LiteRT 固有の関数を使用するには、
tflite.h
を含む。