Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Inicio rápido de Android

Para comenzar a usar TensorFlow Lite en Android, recomendamos explorar el siguiente ejemplo.

Ejemplo de clasificación de imágenes de Android

Lea la clasificación de imágenes de Android TensorFlow Lite para obtener una explicación del código fuente.

Esta aplicación de ejemplo utiliza la clasificación de imágenes para clasificar continuamente lo que ve desde la cámara trasera del dispositivo. La aplicación puede ejecutarse en dispositivo o emulador.

La inferencia se realiza utilizando la API Java TensorFlow Lite y la Biblioteca de soporte Android TensorFlow Lite . La aplicación de demostración clasifica los marcos en tiempo real, mostrando las clasificaciones más probables. Permite al usuario elegir entre un punto flotante o un modelo cuantificado , seleccionar el recuento de subprocesos y decidir si se ejecuta en la CPU, GPU o mediante NNAPI .

Construir en Android Studio

Para compilar el ejemplo en Android Studio, siga las instrucciones en README.md .

Crea tu propia aplicación de Android

Para comenzar a escribir rápidamente su propio código de Android, recomendamos utilizar nuestro ejemplo de clasificación de imágenes de Android como punto de partida.

Las siguientes secciones contienen información útil para trabajar con TensorFlow Lite en Android.

Utilice la biblioteca de soporte de Android TensorFlow Lite

La biblioteca de soporte de Android TensorFlow Lite facilita la integración de modelos en su aplicación. Proporciona API de alto nivel que ayudan a transformar los datos de entrada sin procesar en la forma requerida por el modelo e interpretan la salida del modelo, reduciendo la cantidad de código repetitivo requerido.

Admite formatos de datos comunes para entradas y salidas, incluidas imágenes y matrices. También proporciona unidades de procesamiento previo y posterior que realizan tareas como el cambio de tamaño y el recorte de imágenes.

Para comenzar, siga las instrucciones en la Biblioteca de soporte de Android TensorFlow Lite README.md .

Utilice el AAR TensorFlow Lite de JCenter

Para usar TensorFlow Lite en su aplicación de Android, le recomendamos usar el AAR TensorFlow Lite alojado en JCenter .

Puede especificar esto en sus dependencias build.gradle siguiente manera:

 dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly'
}
 

Este AAR incluye binarios para todas las ABI de Android . Puede reducir el tamaño del binario de su aplicación al incluir solo las ABI que necesita admitir.

Recomendamos que la mayoría de los desarrolladores omitan las arm32 x86 , x86_64 y arm32 . Esto se puede lograr con la siguiente configuración de Gradle, que incluye específicamente solo armeabi-v7a y arm64-v8a , que debería cubrir la mayoría de los dispositivos Android modernos.

 android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
}
 

Para obtener más información sobre abiFilters , consulte NdkOptions en la documentación de Android Gradle.

Construya TensorFlow Lite localmente

En algunos casos, es posible que desee utilizar una compilación local de TensorFlow Lite. Por ejemplo, es posible que esté creando un binario personalizado que incluya operaciones seleccionadas de TensorFlow o que desee realizar cambios locales en TensorFlow Lite.

Configurar el entorno de construcción con Docker

  • Descargue el archivo Docker. Al descargar el archivo Docker, acepta que los siguientes términos de servicio rigen su uso del mismo:

Al hacer clic para aceptar, usted acepta que todo uso de Android Studio y Android Native Development Kit se regirá por el Acuerdo de licencia de Android Software Development Kit disponible en https://developer.android.com/studio/terms (dicha URL puede ser actualizado o cambiado por Google de vez en cuando).

Debe reconocer los términos del servicio para descargar el archivo. Reconocer

  • Opcionalmente, puede cambiar la versión de Android SDK o NDK. Coloque el archivo Docker descargado en una carpeta vacía y cree su imagen de Docker ejecutando:
 docker build . -t tflite-builder -f tflite-android.Dockerfile
 
  • Inicie el contenedor docker de forma interactiva montando su carpeta actual en / tmp dentro del contenedor (tenga en cuenta que / tensorflow_src es el repositorio TensorFlow dentro del contenedor):
 docker run -it -v $PWD:/tmp tflite-builder bash
 

Si usa PowerShell en Windows, reemplace "$ PWD" con "pwd".

Si desea utilizar un repositorio TensorFlow en el host, monte ese directorio de host en su lugar (-v hostDir: / tmp).

  • Una vez que esté dentro del contenedor, puede ejecutar lo siguiente para descargar herramientas y bibliotecas adicionales de Android (tenga en cuenta que es posible que deba aceptar la licencia):
 android update sdk --no-ui -a --filter tools,platform-tools,android-${ANDROID_API_LEVEL},build-tools-${ANDROID_BUILD_TOOLS_VERSION}
 

Ahora puede pasar a la sección "Compilar e instalar". Una vez que haya terminado de crear las bibliotecas, puede copiarlas en / tmp dentro del contenedor para poder acceder a ellas en el host.

Configurar entorno de compilación sin Docker

Instale los requisitos previos de Bazel y Android

Bazel es el sistema de compilación principal para TensorFlow. Para construir con él, debe tenerlo instalado y el NDK y SDK de Android instalados en su sistema.

  1. Instale la última versión del sistema de compilación Bazel .
  2. Se requiere el NDK de Android para construir el código nativo TensorFlow Lite (C / C ++). La versión actual recomendada es 17c, que se puede encontrar aquí .
  3. El SDK de Android y las herramientas de compilación se pueden obtener aquí , o como parte de Android Studio . Build tools API> = 23 es la versión recomendada para compilar TensorFlow Lite.
Configure WORKSPACE y .bazelrc

Ejecute el script ./configure en el directorio raíz de pago de TensorFlow y responda "Sí" cuando el script solicite configurar interactivamente el ./WORKSPACE para ./WORKSPACE de Android. El script intentará configurar los ajustes utilizando las siguientes variables de entorno:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

Si no se establecen estas variables, se deben proporcionar de forma interactiva en el símbolo del sistema. La configuración exitosa debería generar entradas similares a las siguientes en el archivo .tf_configure.bazelrc en la carpeta raíz:

 build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r17c"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="28.0.3"
build --action_env ANDROID_SDK_API_LEVEL="23"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"
 

Construir e instalar

Una vez que Bazel esté configurado correctamente, puede compilar el AAR de TensorFlow Lite desde el directorio de pago raíz de la siguiente manera:

 bazel build -c opt --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
  --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
  //tensorflow/lite/java:tensorflow-lite
 

Esto generará un archivo AAR en bazel-bin/tensorflow/lite/java/ . Tenga en cuenta que esto crea un AAR "grueso" con varias arquitecturas diferentes; Si no los necesita todos, use el subconjunto apropiado para su entorno de implementación. A partir de ahí, hay varios enfoques que puede tomar para usar el .aar en su proyecto de Android Studio.

Agregar AAR directamente al proyecto

Mueva el archivo tensorflow-lite.aar a un directorio llamado libs en su proyecto. Modifique el archivo build.gradle su aplicación para hacer referencia al nuevo directorio y reemplace la dependencia existente de TensorFlow Lite con la nueva biblioteca local, por ejemplo:

 allprojects {
    repositories {
        jcenter()
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    compile(name:'tensorflow-lite', ext:'aar')
}
 
Instalar AAR en el repositorio local de Maven

Ejecute el siguiente comando desde su directorio raíz de pago:

 mvn install:install-file \
  -Dfile=bazel-bin/tensorflow/lite/java/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
 

En build.gradle su aplicación, asegúrese de tener la dependencia mavenLocal() y reemplace la dependencia estándar de TensorFlow Lite con la que tiene soporte para operaciones seleccionadas de TensorFlow:

 allprojects {
    repositories {
        jcenter()
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
}
 

Tenga en cuenta que la versión 0.1.100 aquí es puramente para probar / desarrollar. Con el AAR local instalado, puede usar las API de inferencia estándar Java TensorFlow Lite en el código de su aplicación.

Compile la aplicación de Android usando C ++

Hay dos formas de usar TFLite a través de C ++ si compila su aplicación con el NDK:

Utilice la API de TFLite C

Este es el enfoque recomendado . Descargue el AAR TensorFlow Lite alojado en JCenter , cámbiele el nombre a tensorflow-lite-*.zip y descomprímalo. Debe incluir los cuatro archivos de headers/tensorflow/lite/ en headers/tensorflow/lite/ y headers/tensorflow/lite/c/ folder y la biblioteca dinámica libtensorflowlite_jni.so relevante en jni/ folder en su proyecto NDK.

El archivo de encabezado c_api.h contiene documentación básica sobre el uso de TFLite C API.

Use TFLite C ++ API

Si desea utilizar TFLite a través de la API de C ++, puede compilar las bibliotecas compartidas de C ++:

32bit armeabi-v7a:

 bazel build -c opt --config=android_arm //tensorflow/lite:libtensorflowlite.so
 

64 bits arm64-v8a:

 bazel build -c opt --config=android_arm64 //tensorflow/lite:libtensorflowlite.so
 

Actualmente, no hay una forma directa de extraer todos los archivos de encabezado necesarios, por lo que debe incluir todos los archivos de encabezado en tensorflow/lite/ del repositorio de TensorFlow. Además, necesitará archivos de encabezado de FlatBuffers y Abseil .