TensorFlow Lite en los servicios de Google Play (BETA)

TensorFlow Lite está disponible en la API de servicios de Google Play como una versión beta pública en todos los dispositivos Android que ejecutan la versión actual de los servicios de Play, a partir del 17 de febrero de 2022. Esta API le permite ejecutar modelos de aprendizaje automático sin agrupar estáticamente las bibliotecas de TensorFlow Lite en su aplicación. permitiéndote:

  • Reduzca el tamaño de su aplicación
  • Obtenga un rendimiento mejorado con la última versión estable de TensorFlow Lite

Esta página proporciona una breve descripción general sobre cómo usar el nuevo TensorFlow Lite en las API de servicios de Google Play en su aplicación de Android.

Para obtener más información sobre los servicios de Google Play, consulte el sitio web de servicios de Google Play .

Agregue TensorFlow Lite a su aplicación

Puede usar TensorFlow Lite en la API de servicios de Google Play haciendo algunos cambios en las dependencias del módulo de su aplicación, inicializando la nueva API y usando una clase específica como su objeto intérprete. Las siguientes instrucciones brindan más detalles sobre cómo modificar el código de su aplicación.

1. Agregar dependencias del proyecto

Agrega las siguientes dependencias al código del proyecto de tu aplicación para acceder a la API de Play Services para TensorFlow Lite:

dependencies {
...
    // Tensorflow Lite dependencies for Google Play services
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.0-beta02'
    // Optional: include Tensorflow Lite Support Library
    implementation 'com.google.android.gms:play-services-tflite-support:16.0.0-beta02'
...
}

2. Agrega la inicialización de TensorFlow Lite

Inicialice el componente TensorFlow Lite de la API de servicios de Google Play antes de usar las API de TensorFlow Lite:

kotlin

val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }

Java

Task<Void> initializeTask = TfLite.initialize(context);

3. Cree un intérprete y configure la opción de tiempo de ejecución

Crea un intérprete usando InterpreterApi.create() y configúralo para usar el tiempo de ejecución de los servicios de Google Play llamando a InterpreterApi.Options.setRuntime() , como se muestra en el siguiente código de ejemplo:

kotlin

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private lateinit var interpreter: InterpreterApi
...
initializeTask.addOnSuccessListener {
  val interpreterOption =
    InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  interpreter = InterpreterApi.create(
    modelBuffer,
    interpreterOption
  )}
  .addOnFailureListener { e ->
    Log.e("Interpreter", "Cannot initialize interpreter", e)
  }

Java

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private InterpreterApi interpreter;
...
initializeTask.addOnSuccessListener(a -> {
    interpreter = InterpreterApi.create(modelBuffer,
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY));
  })
  .addOnFailureListener(e -> {
    Log.e("Interpreter", String.format("Cannot initialize interpreter: %s",
          e.getMessage()));
  });

Debe usar la implementación anterior porque evita bloquear el subproceso de la interfaz de usuario de Android. Si necesita administrar la ejecución de subprocesos más de cerca, puede agregar una llamada Tasks.await() a la creación del intérprete:

kotlin

import androidx.lifecycle.lifecycleScope
...
lifecycleScope.launchWhenStarted { // uses coroutine
  initializeTask.await()
}

Java

@BackgroundThread
InterpreterApi initializeInterpreter() {
    Tasks.await(initializeTask);
    return InterpreterApi.create(...);
}

4. Ejecutar inferencias

Usando el objeto interpreter que creó, llame al método run() para generar una inferencia.

kotlin

interpreter.run(inputBuffer, outputBuffer)

Java

interpreter.run(inputBuffer, outputBuffer);

TensorFlow Lite en los servicios de Google Play

La API de TensorFlow Lite en los servicios de Google Play le permite acceder a la API Java de TensorFlow Lite real en su aplicación después de inicializarla con un nuevo método en los servicios de Play. Este enfoque le permite mantener al mínimo los cambios de código para las aplicaciones existentes y simplifica las nuevas implementaciones. Para obtener más información sobre la API para esta función, consulta la referencia de la API de TensorFlow Lite .

Migrar desde TensorFlow Lite independiente

Si planea migrar su aplicación de TensorFlow Lite independiente a la API de servicios de Play, revise la siguiente guía adicional para actualizar el código del proyecto de su aplicación:

  1. Revise la sección Limitaciones de esta página para asegurarse de que su caso de uso sea compatible.
  2. Antes de actualizar su código, realice verificaciones de rendimiento y precisión para sus modelos, especialmente si está usando versiones de TensorFlow Lite anteriores a la versión 2.1, para que tenga una línea de base para comparar con la nueva implementación.
  3. Si migró todo su código para usar la API de servicios de Play para TensorFlow Lite, debe eliminar las dependencias de la biblioteca de tiempo de ejecución de TensorFlow Lite existentes (entradas con org.tensorflow: tensorflow-lite :* ) de su archivo build.gradle para que puede reducir el tamaño de su aplicación.
  4. Identifique todas las apariciones de la creación de un new Interpreter en su código y modifíquelo para que use la llamada InterpreterApi.create(). Esta nueva API es asíncrona, lo que significa que en la mayoría de los casos no es un reemplazo directo y debe registrar un oyente para cuando se complete la llamada. Consulte el fragmento de código en el código del Paso 3 .
  5. Agregue import org.tensorflow.lite.InterpreterApi; e import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; a cualquier archivo fuente usando las clases org.tensorflow.lite.Interpreter u org.tensorflow.lite.InterpreterApi .
  6. Si alguna de las llamadas resultantes a InterpreterApi.create() tiene un solo argumento, agregue el new InterpreterApi.Options() a la lista de argumentos.
  7. .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) al último argumento de cualquier llamada a InterpreterApi.create() .
  8. Reemplace todas las demás apariciones de la clase org.tensorflow.lite.Interpreter con org.tensorflow.lite.InterpreterApi .

Si desea usar TensorFlow Lite independiente y la API de servicios de Play en paralelo, debe usar TensorFlow Lite 2.9 (o posterior). TensorFlow Lite 2.8 y versiones anteriores no son compatibles con la versión de la API de los servicios de Play.

Aplicación de ejemplo

Puede revisar y probar una implementación de ejemplo de TensorFlow Lite en los servicios de Google Play en la aplicación de ejemplo .

Pruebas

Después de implementar TensorFlow Lite en los servicios de Google Play, asegúrese de probar su aplicación y ejercitar las funciones del modelo de aprendizaje automático de su aplicación. Si experimenta errores o problemas que no puede resolver, infórmenos utilizando los canales descritos en la sección Soporte y comentarios a continuación.

LoadingException: ningún módulo aceptable

Mientras prueba su aplicación a través de un entorno de desarrollo durante el período de lanzamiento Beta, es posible que obtenga una excepción cuando su aplicación intente inicializar la clase TensorFlow Lite ( TfLite.intialize(context) ):

com.google.android.gms.dynamite.DynamiteModule$LoadingException:
  No acceptable module com.google.android.gms.tflite_dynamite found.
  Local version is 0 and remote version is 0.

Este error significa que TensorFlow Lite en la API de servicios de Google Play aún no está disponible en su dispositivo de prueba. Puede resolver esta excepción uniéndose a este grupo de Google tflite-play-services-beta-access con la cuenta de usuario que está utilizando para probar en su dispositivo. Una vez que haya sido agregado al grupo de acceso beta, esta excepción debería resolverse.

Espere al menos un día hábil después de unirse a este grupo para que se le otorgue el acceso y se elimine el error. Si continúa experimentando este error, infórmelo utilizando los canales descritos en la sección Soporte y comentarios a continuación.

Limitaciones

TensorFlow Lite en los servicios de Google Play se encuentra actualmente en versión beta pública y tiene las siguientes limitaciones:

  • Actualmente, solo el delegado de NNAPI es compatible con los servicios de Google Play. Actualmente no se admiten otros delegados de TensorFlow Lite, incluidos GPU y Flex.
  • No se admite el acceso a TensorFlow Lite a través de API nativas . Solo las API de Java de TensorFlow Lite están disponibles a través de los servicios de Google Play.
  • No se admiten las API experimentales o obsoletas de TensorFlow Lite, incluidas las operaciones personalizadas.

Soporte y retroalimentación

Puede enviar comentarios y obtener soporte para esta función de versión beta a través del Rastreador de problemas de TensorFlow. Informe los problemas y las solicitudes de asistencia mediante la plantilla de problemas para TensorFlow Lite en los servicios de Google Play.

Términos y Política de Privacidad

El uso de TensorFlow Lite en los servicios de Google Play está sujeto a los Términos de servicio de las API de Google . Tenga en cuenta que TensorFlow Lite en los servicios de Google Play está en versión beta y, como tal, su funcionalidad y las API asociadas pueden cambiar sin previo aviso.

Cuando usa TensorFlow Lite en las API de los servicios de Google Play, el procesamiento de los datos de entrada, como imágenes, video, texto, ocurre completamente en el dispositivo, y TensorFlow Lite en los servicios de Google Play no envía esos datos a los servidores de Google. Como resultado, puede usar nuestras API para procesar datos que no deberían salir del dispositivo.

TensorFlow Lite en las API de los servicios de Google Play puede ponerse en contacto con los servidores de Google de vez en cuando para recibir cosas como correcciones de errores, modelos actualizados e información de compatibilidad del acelerador de hardware. TensorFlow Lite en las API de servicios de Google Play también envía métricas sobre el rendimiento y la utilización de las API en su aplicación a Google. Google utiliza estos datos de métricas para medir el rendimiento, depurar, mantener y mejorar las API y detectar el uso indebido o el abuso, como se describe más detalladamente en nuestra Política de privacidad .

Usted es responsable de informar a los usuarios de su aplicación sobre el procesamiento de Google de TensorFlow Lite en los datos de métricas de los servicios de Google Play según lo exija la ley aplicable.

Los datos que recopilamos incluyen lo siguiente:

  • Información del dispositivo (como fabricante, modelo, versión del sistema operativo y compilación) y aceleradores de hardware ML disponibles (GPU y DSP). Se utiliza para diagnósticos y análisis de uso.
  • Identificador de dispositivo utilizado para diagnósticos y análisis de uso.
  • Información de la aplicación (nombre del paquete, versión de la aplicación). Se utiliza para diagnósticos y análisis de uso.
  • Configuración de la API (como qué delegados se están utilizando). Se utiliza para diagnósticos y análisis de uso.
  • Tipo de evento (como creación de intérprete, inferencia). Se utiliza para diagnósticos y análisis de uso.
  • Códigos de error. Se utiliza para diagnósticos.
  • Métricas de rendimiento. Se utiliza para diagnósticos.

Próximos pasos

Para obtener más información sobre cómo implementar el aprendizaje automático en su aplicación móvil con TensorFlow Lite, consulte la Guía para desarrolladores de TensorFlow Lite . Puede encontrar modelos adicionales de TensorFlow Lite para clasificación de imágenes, detección de objetos y otras aplicaciones en TensorFlow Hub .