带有 Python 绑定的 Android 上的 Tensorflow?

Posted

技术标签:

【中文标题】带有 Python 绑定的 Android 上的 Tensorflow?【英文标题】:Tensorflow on Android with Python bindings? 【发布时间】:2017-08-09 05:48:26 【问题描述】:

我正在尝试使用适用于 android 的 Python 绑定构建 Tensorflow 核心 - 以便在 Android 中的 Kivy 应用程序中使用,但不确定如何使 Python 绑定正常工作。

编译适用于 Android 的 Tensorflow 核心可使用以下内容:

bazel build -c opt \
  --crosstool_top=//external:android/crosstool \
  --cpu=armeabi-v7a \
  --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
  --verbose_failures \
  //tensorflow/core:android_tensorflow_lib

有人知道如何给它添加 Python 绑定吗?这可能吗?

我已阅读文档,进行了大量搜索,但没有找到任何关于此的内容。我看到很多其他人也有兴趣让 Tensorflow 在 Kivy(适用于 Android 和 ios)上运行,但到目前为止似乎没有人这样做。人们只是说我们需要构建一个 python-for-android 配方,但配方的第一步是使用 Python 绑定为 Android 构建,因此上面的问题。

【问题讨论】:

【参考方案1】:

注意:我从未使用过 Tensorflow


从pypi来看,这里唯一的依赖问题可能是NumPy,但有一个recipe for it。所以,我们有 NumPy,但是 Tensorflow 本身没有秘诀。现在呢?

答案在documentation 中,了解如何制作食谱。

首先我会看一下已经工作的食谱,以真正了解它们是如何工作的,尤其是那些使用 C/C++ 而不使用 Cython 的,因为它更容易制作一个Cython 的配方(即使您编写了代码也会更多)。

这些是我认为创建 Tensorflow 配方的基石:

Protobuf(C++) OpenSSL

他们每个人都有一个零件可以帮助您组装一个有效的食谱。现在,绑定有问题。有manylinux ***,但这些***很可能不会在Android 上帮助你(就像根本)在它们的状态下。因此,您需要从源代码构建(显然),并且它们具有与该部分相关的 a whole folder。

这将我们引向您的bazel 代码。在build_pip_package.sh 中有很多与 bazel 相关的内容。

所以,在您了解食谱的工作原理后,有两种可能性:

您的代码实际上做了一些事情并为 android 构建它 你的代码一文不值

如果您的代码确实有效,那么您很有可能能够将已经制作的 setup.py 文件组合成一个看起来很简单的配方,希望只需使用另一个平台检查(并使用正确的bazel 二进制我假设)。由于已经有setup.py 文件,因此应将包文件移动到为 Android 编译的 Python 中。

另一方面,如果您在上面粘贴的那段代码毫无价值,那么您最终可能会自己编译代码 + 重新发明他们的 setup.py 只是为了 P4A 作为配方。如果您不熟悉从源代码构建所需的编译步骤,我真的不羡慕您。


另外,提及最终 APK 的 大小 可能是件好事。你可以在 PyPI 上看到 Tensorflow,只需要一个 13MB 的 Windows 小***。然而,许多 linux ***是 巨大 (37-42MB),如果你打算安装除 Tensorflow 本身以外的任何东西,我认为你最终会得到介于这两者之间的大小。总是有 NumPy,你必须将它作为依赖项拖到手机上。这样就可以为您提供大约 50MB+ 的 APK 文件,这可能不是真正需要的(取决于您)。

This piece of code 在他们的 repo 中与 Python 相关可能也会对您有所帮助。

【讨论】:

感谢您的详细说明。非常彻底。不幸的是,我的问题是为 Android 编译 Tensorflow(请参阅问题中的我的编译代码)以包含 Python 绑定,因此不会生成 setup.py。我希望 Tensorflow 的人能在这里参与进来,因为他们建议在 *** 上提出问题并且他们应该监控这些问题。无论哪种情况,感谢您对 Kivy 配方的一般策略的非常详细的描述。

以上是关于带有 Python 绑定的 Android 上的 Tensorflow?的主要内容,如果未能解决你的问题,请参考以下文章

如何将联系人光标数据绑定到带有芯片的 MultiAutoCompleteTextView

带有单选按钮的 Android 双向数据绑定

xml 带有数据绑定的mvvm模式的Android xml视图示例。

如何将架构组件与android上的数据绑定结合起来?

带有 CurrentValueSubject 绑定的 TextField 上的“Binding<String> 操作尝试每帧更新多次”

带有按钮的表格上的敲除映射和 foreach 数据绑定,缺少对视图模型的引用?