LiteRT w środowisku wykonawczym Usług Google Play umożliwia uruchamianie na komputerze systemów uczących się (ML) bez statycznego łączenia bibliotek LiteRT w do aplikacji. Ten przewodnik zawiera instrukcje korzystania z interfejsów API typu C w przypadku Google Usługi Google Play.
Zanim zaczniesz korzystać z LiteRT w interfejsie Google Play Services C API, upewnij się, masz zainstalowane narzędzie do kompilacji CMake.
Zaktualizuj konfigurację kompilacji
Aby uzyskać dostęp do Google Play, dodaj te zależności do kodu projektu aplikacji API usług dla LiteRT:
implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"
Następnie włącz Prefab aby uzyskać dostęp do interfejsu C API ze skryptu CMake, aktualizując blok Androida w pliku build.gradle modułu:
buildFeatures {
prefab = true
}
Musisz na koniec dodać zaimportowany pakiet tensorflowlite_jni_gms_client
z AAR jako zależności w skrypcie CMake:
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)
Zainicjuj środowisko wykonawcze LiteRT
Zanim wywołasz natywny interfejs API LiteRT, musisz zainicjować
Środowisko wykonawcze TfLiteNative
w kodzie Java/Kotlin.
Java
Task tfLiteInitializeTask = TfLiteNative.initialize(context);
Kotlin
val tfLiteInitializeTask: Task= TfLiteNative.initialize(context)
TfLiteNative.initialize
używa interfejsu Google Play Services Task API,
asynchronicznie wczytuje środowisko wykonawcze TFLite z Usług Google Play na
w czasie działania aplikacji. Użyj kodu addOnSuccessListener()
, aby upewnić się,
TfLite.initialize()
zadanie zostało wykonane przed uruchomieniem kodu, który uzyskuje dostęp
Interfejsy API LiteRT. Po ukończeniu zadania możesz wywołać
wszystkich dostępnych natywnych interfejsów API TFLite.
Implementacja kodu natywnego
Aby używać LiteRT z użyciem kodu natywnego w Usługach Google Play, jedną z tych wartości:
- zadeklaruj nowe funkcje JNI, aby wywoływać funkcje natywne z kodu Java
- Wywołaj natywny interfejs API LiteRT na podstawie istniejącego natywnego kodu C.
Funkcje JNI:
Możesz zadeklarować nową funkcję JNI, aby środowisko wykonawcze LiteRT było zadeklarowane w języku Java/Kotlin dostępnym dla kodu natywnego w następujący sposób:
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 }
Pasujące do tych funkcji natywnych loadModel
i 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
Następnie możesz wywołać funkcje C z kodu Java/Kotlin:
Java
tfLiteHandleTask.onSuccessTask(unused -> { TfLiteJni jni = new TfLiteJni(); jni.loadModel(getAssets(), "add.bin"); //... });
Kotlin
tfLiteHandleTask.onSuccessTask { val jni = TfLiteJni() jni.loadModel(assets, "add.bin") // ... }
LiteRT w języku C
Dołącz odpowiedni plik nagłówka interfejsu API, aby uwzględnić TfLite w Google Play. Services API:
#include "tensorflow/lite/c/c_api.h"
Następnie możesz użyć zwykłego interfejsu LiteRT C API:
auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);
Nagłówki LiteRT z natywnym interfejsem API Usług Google Play zapewniają
taki sam jak zwykły
LiteRT C API, z wyłączeniem
wycofywane lub eksperymentalne funkcje. Na razie funkcje i typy
z nagłówków c_api.h
, c_api_types.h
i common.h
. Proszę
pamiętaj, że funkcje z nagłówka c_api_experimental.h
nie są obsługiwane.
Funkcji LiteRT możesz używać w Usługach Google Play przez
w tym tflite.h
.