Mit LiteRT in der Laufzeit der Google Play-Dienste können Sie Lernmodelle (ML), ohne LiteRT-Bibliotheken statisch zu bündeln, für Ihre App. Dieser Leitfaden enthält eine Anleitung zur Verwendung der C APIs für Google Google Play-Dienste.
Bevor Sie mit LiteRT in der C API der Google Play-Dienste arbeiten, müssen Sie sicherstellen, Sie haben das Build-Tool CMake installiert.
Build-Konfiguration aktualisieren
Füge deinem App-Projektcode die folgenden Abhängigkeiten hinzu, um auf den Play Store zuzugreifen Services API für LiteRT:
implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"
Aktivieren Sie dann die Präferenz um über dein CMake-Skript auf die C API zuzugreifen, indem du den Android-Block aktualisierst. der build.gradle-Datei Ihres Moduls:
buildFeatures {
prefab = true
}
Abschließend müssen Sie das importierte Paket tensorflowlite_jni_gms_client
hinzufügen.
als Abhängigkeit in Ihrem CMake-Skript:
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-Laufzeit initialisieren
Vor dem Aufrufen der LiteRT Native API müssen Sie die
TfLiteNative
-Laufzeit im Java-/Kotlin-Code
Java
Task tfLiteInitializeTask = TfLiteNative.initialize(context);
Kotlin
val tfLiteInitializeTask: Task= TfLiteNative.initialize(context)
Über die Task API der Google Play-Dienste, TfLiteNative.initialize
lädt die TFLite-Laufzeit asynchron aus den Google Play-Diensten in Ihre
den Laufzeitprozess der Anwendung. Mit addOnSuccessListener()
können Sie sicherstellen,
Die Aufgabe „TfLite.initialize()
“ ist abgeschlossen, bevor Code ausgeführt wird, der auf
LiteRT-APIs Sobald die Aufgabe erfolgreich abgeschlossen wurde, können Sie
alle verfügbaren nativen TFLite-APIs.
Native Code-Implementierung
Wenn Sie LiteRT in Google Play-Diensten mit Ihrem nativen Code verwenden möchten, haben Sie folgende Möglichkeiten: eines der folgenden:
- Deklarieren Sie neue JNI-Funktionen, um native Funktionen aus Ihrem Java-Code aufzurufen
- Rufen Sie die LiteRT Native API über Ihren vorhandenen nativen C-Code auf.
JNI-Funktionen:
Sie können eine neue JNI-Funktion deklarieren, damit die LiteRT-Laufzeit deklariert wird in Java oder 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 }
Übereinstimmung mit den folgenden nativen loadModel
- und runInference
-Funktionen:
#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
Anschließend können Sie die C-Funktionen aus Ihrem Java-/Kotlin-Code aufrufen:
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 im C-Code
Fügen Sie die entsprechende API-Headerdatei hinzu, um TfLite in Google Play einzubinden. Services API:
#include "tensorflow/lite/c/c_api.h"
Sie können dann die reguläre LiteRT C API verwenden:
auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);
Die Native API-Header von LiteRT mit den Google Play-Diensten bieten die
wie die reguläre API
LiteRT C API, außer
Funktionen, die veraltet sind oder sich noch in der Testphase befinden. Vorerst werden die Funktionen und Typen
aus den Headern c_api.h
, c_api_types.h
und common.h
sind verfügbar. Bitte
Beachten Sie, dass Funktionen aus dem c_api_experimental.h
-Header nicht unterstützt werden.
Sie können für LiteRT spezifische Funktionen mit den Google Play-Diensten verwenden, indem Sie
einschließlich tflite.h
.