En este documento, se describe cómo compilar una biblioteca LiteRT para iOS por tu cuenta. Por lo general, no es necesario compilar localmente la biblioteca LiteRT de iOS. Si solo quiero usarla, la forma más sencilla es usar la capa precompilada estable más recientes de LiteRT CocoaPods. Consulta iOS quickstart para obtener más información sobre cómo usarlos en tu iOS proyectos.
Compila de forma local
En algunos casos, tal vez te convenga usar una compilación local de LiteRT para ejemplo cuando quieres realizar cambios locales en LiteRT y probarlos cambios en tu app para iOS o prefieres usar un framework estático en lugar de los dinámico. Para crear un framework universal de iOS para LiteRT de forma local, haz lo siguiente: debes compilarlo usando Bazel en una máquina macOS.
Instala Xcode
Si aún no lo hiciste, deberás instalar Xcode 8 o una versión posterior, y las herramientas
usando xcode-select
:
xcode-select --install
Si se trata de una instalación nueva, deberás aceptar el contrato de licencia para todas las usuarios con el siguiente comando:
sudo xcodebuild -license accept
Instala Bazel
Bazel es el sistema de compilación principal de TensorFlow. Instala Bazel según el
instrucciones en el sitio web de Bazel. Asegúrate de elegir
versión entre _TF_MIN_BAZEL_VERSION
y _TF_MAX_BAZEL_VERSION
en
Archivo configure.py
en la raíz del repositorio tensorflow
.
Configura WORKSPACE y .bazelrc
Ejecuta la secuencia de comandos ./configure
en el directorio raíz de confirmación de la compra de TensorFlow.
Responder "Sí" cuando en la secuencia de comandos se te pregunte si quieres compilar TensorFlow con iOS.
y asistencia.
Compila el framework dinámico de TensorFlowLiteC (recomendado)
Una vez que Bazel esté configurado correctamente con la compatibilidad con iOS, podrás compilar el
Framework TensorFlowLiteC
con el siguiente comando.
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_framework
Este comando generará el archivo TensorFlowLiteC_framework.zip
en
bazel-bin/tensorflow/lite/ios/
en tu directorio raíz de TensorFlow.
De forma predeterminada, el framework generado contiene un elemento “fat” binario, que contiene armv7,
arm64 y x86_64 (pero no i386). Para ver la lista completa de marcas de compilación que se usan cuando
especificas --config=ios_fat
, consulta la sección de configuración de iOS en
Archivo .bazelrc
.
Compila un framework estático de TensorFlowLiteC
Según la configuración predeterminada, solo distribuimos el framework dinámico a través de CocoaPods. Si quieres
si quieres usar el framework estático, puedes compilar la imagen estática TensorFlowLiteC
framework con el siguiente comando:
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_static_framework
El comando generará un archivo llamado TensorFlowLiteC_static_framework.zip
.
en el directorio bazel-bin/tensorflow/lite/ios/
, en tu carpeta raíz de TensorFlow
. Este framework estático puede usarse exactamente igual que el
dinámico.
Compila frameworks de TFLite de forma selectiva
Puedes compilar frameworks más pequeños segmentados solo para un conjunto de modelos usando modelos que omitirá las operaciones no usadas en tu conjunto de modelos y solo incluirá el kernels operativos que se necesitan para ejecutar un conjunto determinado de modelos. El comando es el siguiente:
bash tensorflow/lite/ios/build_frameworks.sh \
--input_models=model1.tflite,model2.tflite \
--target_archs=x86_64,armv7,arm64
El comando anterior generará el framework estático
bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
para TensorFlow
Operaciones Lite integradas y personalizadas y, opcionalmente, genera el framework estático
bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
si
tus modelos contienen ops Select TensorFlow. Ten en cuenta que la marca --target_archs
para especificar las arquitecturas de implementación.
Úsalo en tu propia aplicación
Desarrolladores de CocoaPods
Existen tres CocoaPods para LiteRT:
TensorFlowLiteSwift
: Proporciona las APIs de Swift para LiteRT.TensorFlowLiteObjC
: Proporciona las APIs de Objective-C para LiteRT.TensorFlowLiteC
: Pod base común, que incorpora el núcleo de LiteRT y expone las APIs de C de base que usan los dos Pods anteriores. No pretende que los usuarios utilicen directamente.
Como desarrollador, debes elegir TensorFlowLiteSwift
o
TensorFlowLiteObjC
Pod basado en el lenguaje en el que está escrita tu app, pero
pero no ambas. Los pasos exactos para usar compilaciones locales de LiteRT son distintos.
según la pieza exacta que le gustaría construir.
Usa las APIs locales de Swift o Objective-C
Si usas CocoaPods y solo quieres probar algunos cambios locales en el Las APIs de Swift o las APIs de Objective-C de LiteRT sigue estos pasos.
Realiza cambios a las APIs de Objective-C o Swift en la confirmación de la compra con
tensorflow
.Abre el archivo
TensorFlowLite(Swift|ObjC).podspec
y actualiza esta línea:
s.dependency 'TensorFlowLiteC', "#{s.version}"
debe ser:
.s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Esto permite garantizar que compilas tus APIs de Objective-C o Swift en la versión nocturna más reciente de las APIs deTensorFlowLiteC
(se construyen todas las noches entre las 1 y las 4 a. m., hora del Pacífico) en vez de la estación que puede estar desactualizada en comparación con tu confirmación de la compra local detensorflow
. Como alternativa, puedes optar por publicar tu propia versión deTensorFlowLiteC
y usa esa versión (consulta Cómo usar LiteRT local) principal a continuación).En el
Podfile
de tu proyecto de iOS, cambia la dependencia de la siguiente manera: apuntan a la ruta local al directorio raíz detensorflow
.
Para Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Para Objective-C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Actualiza la instalación de tu Pod desde el directorio raíz del proyecto de iOS.
$ pod update
Vuelve a abrir el lugar de trabajo generado (
<project>.xcworkspace
) y compila de nuevo tu en Xcode.
Cómo usar el núcleo de LiteRT local
Puedes configurar un repositorio privado de especificaciones de CocoaPods y publicar tu
Framework TensorFlowLiteC
a tu repositorio privado. Puedes copiar este podspec
y modifica algunos valores:
...
s.version = <your_desired_version_tag>
...
# Note the `///`, two from the `file://` and one from the `/path`.
s.source = { :http => "file:///path/to/TensorFlowLiteC_framework.zip" }
...
s.vendored_frameworks = 'TensorFlowLiteC.framework'
...
Después de crear tu propio archivo TensorFlowLiteC.podspec
, puedes seguir las
instrucciones para usar CocoaPods privado y usarlo en tu
para tu propio proyecto. También puedes modificar el TensorFlowLite(Swift|ObjC).podspec
para
apunta a tu Pod de TensorFlowLiteC
personalizado y usa Swift o Objective-C
Pod del proyecto de la app.
Desarrolladores de Bazel
Si estás usando Bazel como herramienta de compilación principal, puedes agregar simplemente
TensorFlowLite
para tu destino en tu archivo BUILD
.
Para Swift:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Para Objective-C:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Cuando compiles tu proyecto de app, cualquier cambio en la biblioteca de LiteRT se retomen e integren en tu app.
Modifica la configuración del proyecto de Xcode directamente
Es muy recomendable usar CocoaPods o Bazel para agregar LiteRT.
dependencia en tu proyecto. Si aún deseas agregar TensorFlowLiteC
de forma manual, deberás agregar el framework TensorFlowLiteC
como un
framework incorporado en tu proyecto de aplicación. Descomprime el archivo
TensorFlowLiteC_framework.zip
generado a partir de la compilación anterior para obtener la
TensorFlowLiteC.framework
. Este directorio es el framework real
que Xcode puede comprender.
Una vez que hayas preparado el elemento TensorFlowLiteC.framework
, primero debes agregarlo.
como un objeto binario incorporado en el destino de la app. La sección de configuración exacta del proyecto para
Esto puede variar según la versión de Xcode.
- Xcode 11: Ve a la pestaña “General” del editor de proyectos para el destino de tu app
y agrega
TensorFlowLiteC.framework
en Marcos de trabajo, bibliotecas Contenido incorporado" sección. - Xcode 10 y versiones anteriores: Ve a la pestaña "General" del editor de proyectos de tu
segmentación de app y agrega
TensorFlowLiteC.framework
en "Embedded" binarios". El framework también debería agregarse automáticamente en “Linked Frameworks y bibliotecas sección.
Al agregar el framework como un objeto binario incorporado, Xcode también actualizaba el archivo
"Rutas de búsqueda del marco de trabajo" entrada en “Configuración de compilación” pestaña para incluir el elemento superior
de tu framework. En caso de que esto no suceda automáticamente, puedes
Debes agregar manualmente el directorio superior de TensorFlowLiteC.framework
.
Una vez que completes estos dos parámetros de configuración, deberías poder importar y llamar
la API para C de LiteRT, definida por los archivos de encabezado
TensorFlowLiteC.framework/Headers
.