В этом документе описывается, как самостоятельно собрать библиотеку TensorFlow Lite для iOS. Обычно вам не нужно локально собирать библиотеку TensorFlow Lite для iOS. Если вы просто хотите использовать его, проще всего использовать готовые стабильные или ночные выпуски TensorFlow Lite CocoaPods. См. краткий обзор iOS для получения дополнительной информации о том, как использовать их в своих проектах iOS.
Локальное строительство
В некоторых случаях вы можете захотеть использовать локальную сборку TensorFlow Lite, например, если вы хотите внести локальные изменения в TensorFlow Lite и протестировать эти изменения в своем приложении iOS, или вы предпочитаете использовать статическую платформу, а не предоставленную нами динамическую. Чтобы локально создать универсальную платформу iOS для TensorFlow Lite, вам необходимо создать ее с помощью Bazel на компьютере с macOS.
Установить Xcode
Если вы еще этого не сделали, вам нужно будет установить Xcode 8 или более позднюю версию и инструменты, использующие xcode-select
:
xcode-select --install
Если это новая установка, вам нужно будет принять лицензионное соглашение для всех пользователей с помощью следующей команды:
sudo xcodebuild -license accept
Установить Базель
Bazel — это основная система сборки для TensorFlow. Установите Bazel в соответствии с инструкциями на веб-сайте Bazel . Обязательно выберите версию между _TF_MIN_BAZEL_VERSION
и _TF_MAX_BAZEL_VERSION
в файле configure.py
в корне репозитория tensorflow
.
Настройте WORKSPACE и .bazelrc
Запустите скрипт ./configure
в корневом каталоге проверки TensorFlow и ответьте «Да», когда скрипт спросит, хотите ли вы собрать TensorFlow с поддержкой iOS.
Создайте динамическую структуру TensorFlowLiteC (рекомендуется)
Как только Bazel правильно настроен с поддержкой iOS, вы можете создать платформу TensorFlowLiteC
с помощью следующей команды.
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_framework
Эта команда создаст файл TensorFlowLiteC_framework.zip
в bazel-bin/tensorflow/lite/ios/
вашего корневого каталога TensorFlow. По умолчанию сгенерированный фреймворк содержит «толстый» двоичный файл, содержащий armv7, arm64 и x86_64 (но не i386). Полный список флагов сборки, используемых при указании --config=ios_fat
, см. в разделе конфигурации iOS в файле .bazelrc
.
Создайте статическую структуру TensorFlowLiteC.
По умолчанию мы распространяем динамический фреймворк только через Cocoapods. Если вы хотите вместо этого использовать статическую структуру, вы можете создать статическую структуру TensorFlowLiteC
с помощью следующей команды:
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_static_framework
Команда создаст файл с именем TensorFlowLiteC_static_framework.zip
в bazel-bin/tensorflow/lite/ios/
вашего корневого каталога TensorFlow. Этот статический фреймворк можно использовать точно так же, как и динамический.
Выборочное создание фреймворков TFLite
Вы можете создавать фреймворки меньшего размера, ориентированные только на набор моделей, используя выборочную сборку, которая будет пропускать неиспользуемые операции в вашем наборе моделей и включать только ядра операций, необходимые для запуска данного набора моделей. Команда выглядит следующим образом:
bash tensorflow/lite/ios/build_frameworks.sh \
--input_models=model1.tflite,model2.tflite \
--target_archs=x86_64,armv7,arm64
Приведенная выше команда создаст статическую структуру bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
для встроенных и пользовательских операций TensorFlow Lite; и, при необходимости, создает статическую структуру bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
, если ваши модели содержат операции Select TensorFlow. Обратите внимание, что флаг --target_archs
можно использовать для указания архитектуры развертывания.
Используйте в своем приложении
Разработчики CocoaPods
Есть три CocoaPods для TensorFlow Lite:
-
TensorFlowLiteSwift
: предоставляет API-интерфейсы Swift для TensorFlow Lite. -
TensorFlowLiteObjC
: предоставляет API-интерфейсы Objective-C для TensorFlow Lite. -
TensorFlowLiteC
: общий базовый модуль, который включает в себя основную среду выполнения TensorFlow Lite и предоставляет базовые API-интерфейсы C, используемые двумя вышеуказанными модулями. Не предназначен для непосредственного использования пользователями.
Как разработчик, вы должны выбрать модуль TensorFlowLiteSwift
или TensorFlowLiteObjC
в зависимости от языка, на котором написано ваше приложение, но не оба сразу. Точные шаги по использованию локальных сборок TensorFlow Lite различаются в зависимости от того, какую именно часть вы хотите построить.
Использование локальных API Swift или Objective-C
Если вы используете CocoaPods и хотите протестировать только некоторые локальные изменения в API-интерфейсах Swift или Objective-C TensorFlow Lite, выполните действия, описанные здесь.
Внесите изменения в API Swift или Objective-C в кассе
tensorflow
.Откройте файл
TensorFlowLite(Swift|ObjC).podspec
и обновите эту строку:
s.dependency 'TensorFlowLiteC', "#{s.version}"
быть:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Это делается для того, чтобы вы создавали свои API-интерфейсы Swift или Objective-C на основе последней доступной ночной версии API-интерфейсовTensorFlowLiteC
(создается каждую ночь с 1 до 4:00 по тихоокеанскому времени), а не стабильной версии, которая может быть устаревшей по сравнению с вашим локальнымtensorflow
проверить. Кроме того, вы можете опубликовать свою собственную версиюTensorFlowLiteC
и использовать эту версию (см. раздел « Использование локального ядра TensorFlow Lite » ниже).В
Podfile
вашего проекта iOS измените зависимость следующим образом, чтобы указать локальный путь к корневому каталогу вашегоtensorflow
.
Для Свифта:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Для цели-C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Обновите установку модуля из корневого каталога проекта iOS.
$ pod update
Снова откройте сгенерированное рабочее пространство (
<project>.xcworkspace
) и перестройте свое приложение в Xcode.
Использование локального ядра TensorFlow Lite
Вы можете настроить частный репозиторий спецификаций CocoaPods и опубликовать свою пользовательскую платформу TensorFlowLiteC
в своем частном репозитории. Вы можете скопировать этот файл podspec и изменить несколько значений:
...
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'
...
После создания собственного файла TensorFlowLiteC.podspec
вы можете следовать инструкциям по использованию частных CocoaPods , чтобы использовать его в своем собственном проекте. Вы также можете изменить TensorFlowLite(Swift|ObjC).podspec
, чтобы она указывала на ваш собственный модуль TensorFlowLiteC
, и использовать модуль Swift или Objective-C в своем проекте приложения.
Разработчики Базель
Если вы используете Bazel в качестве основного инструмента сборки, вы можете просто добавить зависимость TensorFlowLite
к своей цели в файле BUILD
.
Для Свифта:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Для цели-C:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Когда вы создаете проект приложения, любые изменения в библиотеке TensorFlow Lite будут учтены и встроены в ваше приложение.
Измените настройки проекта Xcode напрямую
Настоятельно рекомендуется использовать CocoaPods или Bazel для добавления зависимости TensorFlow Lite в ваш проект. Если вы по-прежнему хотите добавить инфраструктуру TensorFlowLiteC
вручную, вам потребуется добавить инфраструктуру TensorFlowLiteC
в качестве встроенной платформы в проект вашего приложения. Разархивируйте TensorFlowLiteC_framework.zip
, созданный из приведенной выше сборки, чтобы получить каталог TensorFlowLiteC.framework
. Этот каталог является фактической структурой, которую Xcode может понять.
После того, как вы подготовили TensorFlowLiteC.framework
, сначала вам нужно добавить его как встроенный двоичный файл в целевое приложение. Точный раздел настроек проекта для этого может отличаться в зависимости от вашей версии Xcode.
- Xcode 11: перейдите на вкладку «Общие» редактора проекта для вашего целевого приложения и добавьте
TensorFlowLiteC.framework
в раздел «Фреймворки, библиотеки и встроенный контент». - Xcode 10 и ниже: перейдите на вкладку «Общие» редактора проекта для вашего целевого приложения и добавьте
TensorFlowLiteC.framework
в разделе «Встроенные двоичные файлы». Фреймворк также должен быть добавлен автоматически в разделе «Связанные фреймворки и библиотеки».
Когда вы добавляете фреймворк в виде встроенного двоичного файла, Xcode также обновляет запись «Пути поиска фреймворка» на вкладке «Настройки сборки», чтобы включить родительский каталог вашего фреймворка. Если это не происходит автоматически, вам следует вручную добавить родительский каталог каталога TensorFlowLiteC.framework
.
После того, как эти две настройки будут выполнены, вы сможете импортировать и вызывать C API TensorFlow Lite, определяемый файлами заголовков в каталоге TensorFlowLiteC.framework/Headers
.