使用Python绑定的Android上的Tensorflow?

Zol*_*dor 11 python kivy tensorflow

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

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

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

Key*_*Usr 3

注意:我从未使用过 Tensorflow


pypi来看,这里唯一的依赖问题可能是 NumPy,但有一个解决办法。所以,我们有 NumPy,Tensorflow 本身没有配方。现在怎么办?

答案就在如何制作菜谱的文档中。

首先,我会查看已经可用的配方,以实际了解它们是如何工作的,尤其是那些与 C/C++ 一起使用而不是与 Cython 一起使用的配方,因为为 Cython 制作配方要容易一些(即使您制作了代码)。

我认为这些是创建 Tensorflow 配方的基本原则:

他们每个人都有一个部分可以帮助您组装一个可行的配方。现在,绑定出现了问题。有manylinux轮子,但它们很可能不会在 Android 上为您提供帮助(就像根本一样)。因此,您需要从源代码构建(显然),并且它们有一个与该部分相关的整个文件夹。

这引导我们找到你的代码bazel。在build_pip_package.sh中有很多与 bazel 相关的行。

因此,在了解了食谱的工作原理后,有两种可能性:

  • 你的代码实际上做了一些事情并为 android 构建它
  • 你的代码毫无价值

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

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


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

他们的存储库中与 Python 相关的这段代码也可能对您有帮助。