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

Construye TensorFlow Lite para Android

Este documento describe cómo compilar la biblioteca de Android TensorFlow Lite por su cuenta. Normalmente, no es necesario crear localmente la biblioteca de Android TensorFlow Lite. Si solo desea usarlo, la forma más fácil es usar el AAR de TensorFlow Lite alojado en JCenter . Consulte la guía de inicio rápido de Android para obtener más detalles sobre cómo usarlos en sus proyectos de Android.

Compila TensorFlow Lite localmente

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

Configurar el entorno de compilación con Docker

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

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

Debe aceptar los términos de servicio para descargar el archivo. Reconocer

  • Opcionalmente, puede cambiar la versión de Android SDK o NDK. Coloque el archivo de 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 de la ventana acoplable de forma interactiva montando su carpeta actual en / tmp dentro del contenedor (tenga en cuenta que / tensorflow_src es el repositorio de TensorFlow dentro del contenedor):
docker run -it -v $PWD:/tmp tflite-builder bash

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

Si desea utilizar un repositorio de 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 de Android adicionales (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 "Crear 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 el entorno de compilación sin Docker

Instalar los requisitos previos de Bazel y Android

Bazel es el sistema de compilación principal de TensorFlow. Para construir con él, debe tenerlo 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 compilar el código nativo (C / C ++) de TensorFlow Lite. La versión recomendada actual es 17c, que se puede encontrar aquí .
  3. El SDK de Android y las herramientas de compilación se pueden obtener aquí o, alternativamente, como parte de Android Studio . La API de herramientas de compilación> = 23 es la versión recomendada para compilar TensorFlow Lite.

Configurar WORKSPACE y .bazelrc

Ejecute la secuencia de comandos ./configure en el directorio raíz de pago de TensorFlow y responda "Sí" cuando la secuencia de comandos solicite configurar interactivamente ./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 estas variables no están configuradas, deben proporcionarse de forma interactiva en el símbolo del sistema. La configuración .tf_configure.bazelrc debería producir 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"

Construye e instala

Una vez que Bazel esté configurado correctamente, puede compilar el AAR de TensorFlow Lite desde el directorio raíz de pago 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 "gordo" con varias arquitecturas diferentes; si no los necesita todos, utilice el subconjunto apropiado para su entorno de implementación.

bash tensorflow/lite/tools/build_aar.sh \
  --input_models=model1,model2 \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

El script anterior generará el archivo tensorflow-lite.aar y, opcionalmente, el archivo tensorflow-lite-select-tf-ops.aar si uno de los modelos está usando las operaciones de Tensorflow. Para obtener más detalles, consulte la sección Reducir el tamaño binario de TensorFlow Lite .

Agregar AAR directamente al proyecto

Mueva el archivo tensorflow-lite.aar a un directorio llamado libs en su proyecto. Modifica el archivo build.gradle tu aplicación para hacer referencia al nuevo directorio y reemplaza 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')
}

Instale 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 tu aplicación, asegúrate de tener la dependencia mavenLocal() y reemplaza la dependencia estándar de TensorFlow Lite con la que tiene soporte para determinadas operaciones 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 por el bien de la prueba / desarrollo. Con el AAR local instalado, puede usar las API de inferencia Java estándar de TensorFlow Lite en el código de su aplicación.