【问题标题】:Tensorflow on Android with Python bindings?带有 Python 绑定的 Android 上的 Tensorflow?
【发布时间】: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 构建,因此上面的问题。

【问题讨论】:

    标签: python tensorflow kivy


    【解决方案1】:

    注意:我从未使用过 Tensorflow


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

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

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

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

    他们每个人都有一个零件可以帮助您组装一个有效的食谱。现在,绑定有问题。有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 的人能在这里参与进来,因为他们建议在 Stackoverflow 上提出问题并且他们应该监控这些问题。无论哪种情况,感谢您对 Kivy 配方的一般策略的非常详细的描述。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 2017-03-30
    • 2020-04-21
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    相关资源
    最近更新 更多