TensorFlow Lite en el tiempo de ejecución de los servicios de Google Play le permite ejecutar modelos de aprendizaje automático (ML) sin agrupar estáticamente bibliotecas de TensorFlow Lite en su aplicación. Esta guía proporciona instrucciones sobre cómo utilizar las API de C para los servicios de Google Play.
Antes de trabajar con TensorFlow Lite en la API C de los servicios de Google Play, asegúrese de tener instalada la herramienta de compilación CMake .
Actualice su configuración de compilación
Agregue las siguientes dependencias al código del proyecto de su aplicación para acceder a la API de servicios de Play para TensorFlow Lite:
implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"
Luego, habilite la función Prefab para acceder a la API de C desde su script CMake actualizando el bloque de Android del archivo build.gradle de su módulo:
buildFeatures {
prefab = true
}
Finalmente necesitas agregar el paquete tensorflowlite_jni_gms_client
importado de AAR como una dependencia en tu 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)
Inicialice el tiempo de ejecución de TensorFlow Lite
Antes de llamar a la API nativa de TensorFlow Lite, debe inicializar el tiempo de ejecución TfLiteNative
en su código Java/Kotlin.
Java
Task tfLiteInitializeTask = TfLiteNative.initialize(context);
Kotlin
val tfLiteInitializeTask: Task= TfLiteNative.initialize(context)
Al utilizar la API de tareas de los servicios de Google Play, TfLiteNative.initialize
carga de forma asincrónica el tiempo de ejecución de TFLite desde los servicios de Google Play en el proceso de tiempo de ejecución de su aplicación. Utilice addOnSuccessListener()
para asegurarse de que la tarea TfLite.initialize()
se complete antes de ejecutar el código que accede a las API de TensorFlow Lite. Una vez que la tarea se haya completado con éxito, puede invocar todas las API nativas de TFLite disponibles.
Implementación de código nativo
Para usar TensorFlow Lite en los servicios de Google Play con su código nativo, puede realizar una de las siguientes acciones:
- declare nuevas funciones JNI para llamar a funciones nativas desde su código Java
- Llame a la API nativa de TensorFlow Lite desde su código C nativo existente.
Funciones JNI:
Puedes declarar una nueva función JNI para que el tiempo de ejecución de TensorFlow Lite declarado en Java/Kotlin sea accesible para tu código nativo de la siguiente manera:
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 }
Coincidencia de las siguientes funciones nativas loadModel
y 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
Luego puede llamar a sus funciones C desde su código 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") // ... }
TensorFlow Lite en código C
Incluya el archivo de encabezado API apropiado para incluir TfLite con la API de servicios de Google Play:
#include "tensorflow/lite/c/c_api.h"
Luego puedes usar la API C normal de TensorFlow Lite:
auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);
Los encabezados de API nativa de TensorFlow Lite con servicios de Google Play proporcionan la misma API que la API C de TensorFlow Lite normal, excluyendo las funciones que están obsoletas o son experimentales. Por ahora, las funciones y tipos de los encabezados c_api.h
, c_api_types.h
y common.h
están disponibles. Tenga en cuenta que las funciones del encabezado c_api_experimental.h
no son compatibles. La documentación se puede encontrar en línea .
Puede utilizar funciones específicas de TensorFlow Lite con los servicios de Google Play incluyendo tflite.h
.