Сборка TensorFlowLite Swift Custom Framework - PullRequest
0 голосов
/ 04 октября 2019

Мне нужно собрать TensorFlowLite Swift Framework / cocoapod из исходных кодов, а затем использовать его вместо оригинального фреймворка в одном из проектов Swift.

Загрузил код и следовал инструкциям в нескольких сценариях, но безуспешно:

1) https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/experimental/swift

a) python configure.py

b) Разработчики CocoaPods не применимы, так как не берут источник из локальной папки TensofFlow (или я ошибаюсь?)

c) Разработчики Bazel Ido: bazel build tensorflow/lite/experimental/swift:TensorFlowLite

bazel test tensorflow/lite/experimental/swift:Tests --swiftcopt=-enable-testing

и в конечном итоге

generate_xcodeproj.sh --genconfig tensorflow/lite/experimental/swift/TensorFlowLite.tulsiproj:TensorFlowLite --outputfolder ~/path/to/generated/TensorFlowLite.xcodeproj

, в результате я получаю проект с помощью libtensorflow-lite-Экспериментальный-swift-TensorFlowLite.a и несколько файлов idx . Он компилируется, и я вижу файл .a (но приложение и тесты не компилируются по разным причинам), и я не совсем понимаю, как я могу использовать этот файл .a lib с файлами Swift, так как нет никаких модулей / заголовков и т. Д. . files.

После всех этих упражнений в корне TensorFlow и в папках experimental/Swift есть TensorFlowLiteSwift.podspec. Это все еще зависит от TensorFlowLiteC, и если я обращаюсь к этому подспеку в другом проекте через параметр пути, я могу сделать import TensorFlowLiteC, но не import TensorFlowLiteSwift / import TensorFlowLite, и я считаю, что TensorFlowLiteC по-прежнему берется из Интернета, а не локально.

2) Путь к пользовательскому фреймворку отсюда: https://firebase.google.com/docs/ml-kit/ios/use-custom-tflite

Вот несколько проблем:

a) если я попытаюсь просто использовать проект с добавленной тензорным потоком_lite.frameworkвнутренне я не могу ссылаться на TensorFlowLite / TensorFlowLiteC и т. д. в файле Swift. б) если я попытаюсь следовать маршруту создания локального модуля и сослаться на проект модуля, то pod install не будет работать, поскольку не установлены обязательные параметры (используется приведенный пример).

Я ожидаю получитьПроект или рабочее пространство Xcode, построенный из локальных файлов TensorFlowFiles и на который я могу ссылаться из других проектов, таких как 'import TensorFlowLiteSwift' или 'import TensorFlowLite'

Проблема заключается в том, что я даже не понимаю, какой правильный путь кСделай это.

Спасибо.

1 Ответ

0 голосов
/ 21 октября 2019

Хорошо, я разобрался с ответом здесь:

  1. сборка фреймворка TensorFlowLiteC из корневой папки тензорного потока:

     bazel build --config=ios_fat -c opt //tensorflow/lite/experimental/ios:TensorFlowLiteC_framework
    
  2. Результат может бытьнайдено здесь: bazel-bin/tensorflow/lite/experimental/ios/TensorFlowLiteC_framework.zip
  3. Разархивируйте файл и добавьте содержимое в новый проект XCode (в моем случае это было приложение Swift Single Window App). Если вы сделаете это с помощью drag'n'drop, то XCode автоматически изменит раздел , рамки и встроенный контент , а также изменит Framework paths
  4. Измените этонастройка Настройки сборки \ Связывание \ Другие флаги компоновщика * от 1019 * до -lc++
  5. Готово. Вы можете сделать

     import TensorFlowLiteC
    
  6. и использовать исходные файлы из папки swift.
...