构建 TensorFlowLite Swift 自定义框架

Posted

技术标签:

【中文标题】构建 TensorFlowLite Swift 自定义框架【英文标题】:Build TensorFlowLite Swift Custom Framework 【发布时间】:2019-10-04 08:37:08 【问题描述】:

我需要从源代码构建 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 的根目录和 experimental/Swift 文件夹中都有 TensorFlowLiteSwift.podspec。它仍然取决于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】:

好吧,我在这里想出了答案:

    从根 tensorflow 文件夹构建 TensorFlowLiteC 框架:

     bazel build --config=ios_fat -c opt //tensorflow/lite/experimental/ios:TensorFlowLiteC_framework
    
    结果可以在这里找到:bazel-bin/tensorflow/lite/experimental/ios/TensorFlowLiteC_framework.zip 解压缩文件并将内容添加到新的 XCode 项目(在我的例子中是 Swift Single Window App)。如果你通过拖放操作,那么 XCode 会自动更改 Frameworks, libraries and embedded content 部分,也会修改 Framework 路径 将此设置 Build Settings\Linking\Other Linker Flags 更改为 -lc++

    完成。你可以这样做

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

【讨论】:

在目标 c 项目中运行交互的 TensorFlowLiteC_framework 时,出现错误“无法安装“应用程序名称””。我正在使用 Xcode 11.6 你能帮帮我吗?

以上是关于构建 TensorFlowLite Swift 自定义框架的主要内容,如果未能解决你的问题,请参考以下文章

社区说 | 使用 TensorFlow Lite 构建和部署自定义对象检测模型

社区说 |今晚直播! 使用 TensorFlow Lite 构建和部署自定义对象检测模型

社区说 |今晚直播! 使用 TensorFlow Lite 构建和部署自定义对象检测模型

社区说 |今晚直播! 使用 TensorFlow Lite 构建和部署自定义对象检测模型

社区说 |今晚直播! 使用 TensorFlow Lite 构建和部署自定义对象检测模型

无法在 UINT8 类型的 TensorFlowLite 张量和 Java 对象之间转换