构建TensorFlowLite Swift自定义框架

时间:2019-10-04 08:37:08

标签: ios swift tensorflow cocoapods tensorflow-lite

我需要从源代码构建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开发人员,我这样做: 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-experimental-swift-TensorFlowLite.a和几个 idx 文件的项目。它可以编译,并且我看到.a文件(但是由于各种原因,应用程序和测试都不能编译),而且我还不太了解如何将.a lib与Swift文件一起使用,因为它没有模块/头文件等文件。

所有这些练习之后,在TensorFlow的根目录和TensorFlowLiteSwift.podspec文件夹中都有experimental/Swift。它仍然取决于TensorFlowLiteC,如果我通过路径参数在另一个项目中引用此podspec,我可以执行import TensorFlowLiteC但不能执行import TensorFlowLiteSwift / import TensorFlowLite,并且我相信TensorFlowLiteC是仍然来自互联网,而不是本地。

2)来自此处的自定义框架路径: https://firebase.google.com/docs/ml-kit/ios/use-custom-tflite

这里有几个问题:

a)如果我尝试仅使用内部添加了tensorflow_lite.framework的项目,则无法在Swift文件中引用TensorFlowLite / TensorFlowLiteC等。 b)如果我尝试遵循创建本地pod并引用pod项目的路线,则pod install不起作用,因为未设置强制性参数(使用提供的示例)。

我希望获得一个从本地TensorFlowFiles构建的Xcode项目或工作区,并且可以从其他项目(例如“ import TensorFlowLiteSwift”或“ import TensorFlowLite”)中引用

问题是我什至不知道实现它的正确方法是什么。

谢谢。

1 个答案:

答案 0 :(得分:1)

好的,我在这里找到答案:

  1. 从根tensorflow文件夹构建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)。如果通过拖放操作完成,则XCode将自动更改框架,库和嵌入的内容部分,还将修改框架路径
  4. 将此设置内部设置\链接\其他链接器标记更改为-lc++
  5. 完成。你可以做

     import TensorFlowLiteC
    
  6. ,并使用swift文件夹中的源文件。