TensorFlow Lite en los servicios de Google Play (BETA)

TensorFlow Lite está disponible en la API de servicios de Google Play como versión beta pública en todos los dispositivos Android que ejecutan la versión actual de los servicios de Play. La API le permite ejecutar modelos de aprendizaje automático (ML) sin agrupar estáticamente las bibliotecas de TensorFlow Lite en su aplicación, lo que le permite:

  • 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 implementar las API de intérprete en los servicios de Google 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 clasificación de imágenes . Esta aplicación de ejemplo usa TensorFlow Lite dentro de los servicios de Play para implementar un clasificador de imágenes.

Uso de TensorFlow Lite con las API de intérprete

Puede usar TensorFlow Lite en los servicios de Google Play con las API de intérprete. Las siguientes instrucciones le muestran cómo agregar dependencias, inicializar TensorFlow Lite, crear una instancia de InterpreterApi y ejecutar inferencias.

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-beta03'
    // Optional: include Tensorflow Lite Support Library
    implementation 'com.google.android.gms:play-services-tflite-support:16.0.0-beta03'
...
}

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);

Aceleracion de hardware

TensorFlow Lite te permite acelerar el rendimiento de tu modelo mediante procesadores de hardware especializados, como unidades de procesamiento de gráficos (GPU). Puede aprovechar estos procesadores especializados utilizando controladores de hardware llamados delegados . Puedes usar los siguientes delegados de aceleración de hardware con TensorFlow Lite en Google Play Services:

  • Delegado de GPU (recomendado) : este delegado se proporciona a través de los servicios de Google Play y se carga dinámicamente, al igual que las versiones de servicios de Play de la API de tareas y la API de intérprete.

  • Delegado de NNAPI : este delegado está disponible como una dependencia de biblioteca incluida en su proyecto de desarrollo de Android y está incluido en su aplicación.

Para usar el delegado de GPU con TensorFlow Lite en Google Play Services:

  1. Actualice las dependencias del proyecto para usar el delegado de GPU de Play Services:

    implementation 'com.google.android.gms:play-services-tflite-gpu:16.0.0-beta03'
    
  2. Habilite la opción de delegado de GPU en la inicialización de TFlite:

    kotlin

          TfLite.initialize(context,
            TfLiteInitializationOptions.builder()
             .setEnableGpuDelegateSupport(true)
             .build())
        

    Java

          TfLite.initialize(context,
            TfLiteInitializationOptions.builder()
             .setEnableGpuDelegateSupport(true)
             .build());
        
  3. Configure el delegado de GPU en las opciones del intérprete para usar DelegateFactory llamando a addDelegateFactory() dentro de InterpreterApi.Options() :

    kotlin

          val interpreterOption = InterpreterApi.Options()
           .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
           .addDelegateFactory(GpuDelegateFactory())
        

    Java

          Options interpreterOption = InterpreterApi.Options()
            .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
            .addDelegateFactory(new GpuDelegateFactory());
        

Para obtener más información sobre la aceleración de hardware con TensorFlow Lite, consulte la página de delegados 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.

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 tiene las siguientes limitaciones:

  • La compatibilidad con los delegados de aceleración de hardware se limita a los delegados enumerados en la sección Aceleración de hardware . No se admiten otros delegados de aceleración.
  • 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 proporcionar comentarios y obtener soporte 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 .