TensorFlow Lite w środowisku wykonawczym usług Google Play umożliwia uruchamianie modeli uczenia maszynowego (ML) bez statycznego dołączania bibliotek TensorFlow Lite do aplikacji. Ten przewodnik zawiera instrukcje dotyczące korzystania z interfejsów API C dla usług Google Play.
Przed rozpoczęciem pracy z TensorFlow Lite w interfejsie API C usług Google Play upewnij się, że masz zainstalowane narzędzie do kompilacji CMake .
Zaktualizuj konfigurację kompilacji
Dodaj następujące zależności do kodu projektu aplikacji, aby uzyskać dostęp do interfejsu API usług Play dla TensorFlow Lite:
implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"
Następnie włącz funkcję Prefab , aby uzyskać dostęp do interfejsu API języka C ze skryptu CMake, aktualizując blok Android w pliku build.gradle modułu:
buildFeatures {
prefab = true
}
Na koniec musisz dodać pakiet tensorflowlite_jni_gms_client
zaimportowany z AAR jako zależność 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 TensorFlow Lite
Przed wywołaniem natywnego interfejsu API TensorFlow Lite należy zainicjować środowisko wykonawcze TfLiteNative
w kodzie Java/Kotlin.
Jawa
Task tfLiteInitializeTask = TfLiteNative.initialize(context);
Kotlina
val tfLiteInitializeTask: Task= TfLiteNative.initialize(context)
Korzystając z interfejsu API zadań usług Google Play, TfLiteNative.initialize
asynchronicznie ładuje środowisko wykonawcze TFLite z usług Google Play do procesu wykonawczego aplikacji. Użyj addOnSuccessListener()
, aby upewnić się, że zadanie TfLite.initialize()
zostało zakończone przed wykonaniem kodu uzyskującego dostęp do interfejsów API TensorFlow Lite. Po pomyślnym zakończeniu zadania możesz wywołać wszystkie dostępne natywne interfejsy API TFLite.
Implementacja kodu natywnego
Aby używać TensorFlow Lite w usługach Google Play z kodem natywnym, możesz wykonać jedną z następujących czynności:
- zadeklaruj nowe funkcje JNI, aby wywoływać funkcje natywne z kodu Java
- Wywołaj natywny interfejs API TensorFlow Lite z istniejącego natywnego kodu C.
Funkcje JNI:
Możesz zadeklarować nową funkcję JNI, aby środowisko wykonawcze TensorFlow Lite zadeklarowane w Javie/Kotlinie było dostępne dla twojego natywnego kodu w następujący sposób:
Jawa
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); }
Kotlina
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 }
Dopasowanie następujących 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:
Jawa
tfLiteHandleTask.onSuccessTask(unused -> { TfLiteJni jni = new TfLiteJni(); jni.loadModel(getAssets(), "add.bin"); //... });
Kotlina
tfLiteHandleTask.onSuccessTask { val jni = TfLiteJni() jni.loadModel(assets, "add.bin") // ... }
TensorFlow Lite w kodzie C
Dołącz odpowiedni plik nagłówkowy API, aby dołączyć TfLite do API usług Google Play:
#include "tensorflow/lite/c/c_api.h"
Następnie możesz użyć zwykłego interfejsu API TensorFlow Lite C:
auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);
TensorFlow Lite z natywnymi nagłówkami API usług Google Play udostępnia ten sam interfejs API, co zwykły interfejs API TensorFlow Lite C , z wyjątkiem funkcji, które są przestarzałe lub eksperymentalne. Na razie dostępne są funkcje i typy z nagłówków c_api.h
, c_api_types.h
i common.h
. Należy pamiętać, że funkcje z nagłówka c_api_experimental.h
nie są obsługiwane. Dokumentację można znaleźć w Internecie .
Możesz korzystać z funkcji specyficznych dla TensorFlow Lite w Usługach Google Play, włączając tflite.h
.