Присоединяйтесь к TensorFlow на Google I/O, 11-12 мая Зарегистрируйтесь сейчас

Сборка TensorFlow Lite для iOS

В этом документе описывается, как самостоятельно собрать библиотеку TensorFlow Lite для iOS. Обычно вам не нужно создавать локальную библиотеку TensorFlow Lite для iOS. Если вы просто хотите его использовать, самый простой способ - использовать предварительно созданные стабильные или ночные выпуски TensorFlow Lite CocoaPods. См IOS QuickStart для более подробной информации о том , как использовать их в ваших 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 в соответствии с инструкциями на веб - сайте Базельского . Убедитесь в том , чтобы выбрать вариант между _TF_MIN_BAZEL_VERSION и _TF_MAX_BAZEL_VERSION в configure.py файл в корне tensorflow хранилища.

Настроить рабочее пространство и .bazelrc

Запустите ./configure скрипт в каталоге кассы корня TensorFlow, и ответ «Да» , когда скрипт спросит , если вы хотите построить TensorFlow с поддержкой IOS.

После того, как Базэлы правильно настроены с поддержкой IOS, вы можете построить TensorFlowLiteC рамку с помощью следующей команды.

bazel build --config=ios_fat -c opt \
  //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 \
  //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 если ваши модели содержат Выберите TensorFlow опа. Обратите внимание , что --target_archs флаг может быть использован для определения ваших архитектур развертывания.

Используйте в своем собственном приложении

Разработчики CocoaPods

Для TensorFlow Lite существует три CocoaPods:

  • TensorFlowLiteSwift : Предоставляет API - интерфейсы Swift для TensorFlow Lite.
  • TensorFlowLiteObjC : Предоставляет API для Objective-C для TensorFlow Lite.
  • TensorFlowLiteC : Общая база стручка, которая встраивает ядро выполнения TensorFlow Lite и предоставляет API для базового C , используемое выше двух стручков. Не предназначен для непосредственного использования пользователями.

Как разработчик, вы должны выбрать либо TensorFlowLiteSwift или TensorFlowLiteObjC POD на основе языка , на котором написано ваше приложение, но не оба. Точные шаги для использования локальных сборок TensorFlow Lite различаются в зависимости от того, какую именно часть вы хотите создать.

Использование локальных API Swift или Objective-C

Если вы используете CocoaPods, и только хотите проверить некоторые местные изменения в TensorFlow Lite в Swift API , или Objective-C API , выполните действия , описанные здесь.

  1. Внесите изменения в Swift или API , Objective-C в вашей tensorflow кассе.

  2. Откройте TensorFlowLite(Swift|ObjC).podspec файл и обновите эту строку:
    s.dependency 'TensorFlowLiteC', "#{s.version}"
    быть:
    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
    Это должно гарантировать , что вы строите ваши Swift или Objective-C API , с последней доступной ночной версии TensorFlowLiteC API , (построен каждую ночь между 1-4AM Pacific Time) , а не версии стабильной, который может быть устаревшим по сравнению с вашим местным tensorflow проверить. Кроме того , вы можете выбрать , чтобы опубликовать свою собственную версию TensorFlowLiteC и использовать эту версию (см Использование локального ядра TensorFlow Lite раздел ниже).

  3. В Podfile вашего проекта IOS, изменить зависимость следующим образом, чтобы указать на локальный путь к вашему tensorflow корневой директории.
    Для Swift:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    Для Objective-C:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. Обновите установку модуля из корневого каталога проекта iOS.
    $ pod update

  5. Возобновить сформированную рабочую область ( <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:

swift_library(
  deps = [
      "//tensorflow/lite/swift:TensorFlowLite",
  ],
)

Для Objective-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 в разделе «рамочные, библиотеки и Embedded Content».
  • Xcode 10 и ниже: Перейдите на вкладку «Общие» редактора проекта для вашей цели приложения, и добавьте TensorFlowLiteC.framework под «вложенная Binaries». Фреймворк также должен автоматически добавляться в раздел «Связанные фреймворки и библиотеки».

Когда вы добавляете фреймворк как встроенный двоичный файл, Xcode также обновляет запись «Пути поиска фреймворка» на вкладке «Параметры сборки», чтобы включить родительский каталог вашей фреймворка. В случае , если это не происходит автоматически, вы должны вручную добавить родительский каталог TensorFlowLiteC.framework каталога.

После того, как эти две настройки сделаны, вы должны быть в состоянии импортировать и вызвать C API в TensorFlow Lite в, определенный заголовочные файлы под TensorFlowLiteC.framework/Headers каталога.