LiteRT nel runtime di Google Play Services ti consente di eseguire di machine learning (ML) senza raggruppare staticamente le librerie LiteRT in la tua app. Questa guida fornisce istruzioni su come utilizzare le API C per Google Play Services.
Prima di utilizzare LiteRT nell'API C di Google Play Services, assicurati in cui hai installato lo strumento di creazione CMake.
Aggiorna la configurazione della build
Aggiungi le seguenti dipendenze al codice del progetto dell'app per accedere a Google Play API services per LiteRT:
implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"
Quindi, abilita il Prefabbricato per accedere all'API C dal tuo script CMake aggiornando il blocco Android del file build.gradle del tuo modulo:
buildFeatures {
prefab = true
}
Infine devi aggiungere il pacchetto importato da tensorflowlite_jni_gms_client
dall'AAR come dipendenza nello script 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)
Inizializzare il runtime LiteRT
Prima di chiamare l'API LiteRT Native, devi inizializzare
TfLiteNative
nel tuo codice Java/Kotlin.
Java
Task tfLiteInitializeTask = TfLiteNative.initialize(context);
Kotlin
val tfLiteInitializeTask: Task= TfLiteNative.initialize(context)
Con l'API Google Play Services Tasks, TfLiteNative.initialize
carica in modo asincrono il runtime TFLite da Google Play Services nel tuo
il processo di runtime dell'applicazione. Usa addOnSuccessListener()
per assicurarti che
L'attività TfLite.initialize()
viene completata prima di eseguire il codice che accede
API LiteRT. Una volta completata l'attività, puoi richiamare
tutte le API native TFLite disponibili.
Implementazione di codice nativo
Per utilizzare LiteRT in Google Play Services con il tuo codice nativo, puoi: uno dei seguenti:
- dichiarare nuove funzioni JNI per chiamare funzioni native dal codice Java
- Chiama l'API LiteRT Native dal codice C nativo esistente.
Funzioni JNI:
Puoi dichiarare una nuova funzione JNI per rendere dichiarato il runtime LiteRT in Java/Kotlin accessibili al tuo codice nativo nel seguente modo:
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 }
Corrispondenza delle seguenti funzioni native loadModel
e 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
A questo punto, puoi chiamare le tue funzioni C dal codice 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 nel codice C
Includi il file di intestazione dell'API appropriato per includere il file TfLite con Google Play API Services:
#include "tensorflow/lite/c/c_api.h"
Quindi, puoi utilizzare l'API LiteRT C standard:
auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);
Le intestazioni dell'API LiteRT con Google Play Services Native forniscono il parametro
la stessa API
API LiteRT C, a esclusione
di funzionalità deprecate o sperimentali. Per ora le funzioni e i tipi
dalle intestazioni c_api.h
, c_api_types.h
e common.h
. Non dimenticare di apporre
tieni presente che le funzioni dell'intestazione c_api_experimental.h
non sono supportate.
Puoi utilizzare funzioni specifiche di LiteRT con Google Play Services
tra cui tflite.h
.