2017-03-17 51 views
8

我想用Android的Python綁定構建Tensorflow核心 - 要從Android的Kivy應用程序使用,但不知道如何獲得Python綁定的工作方式。帶有Python綁定的Android上的Tensorflow?

編譯針對Android的Tensorflow核心適用於以下:

bazel build -c opt \ 
    --crosstool_top=//external:android/crosstool \ 
    --cpu=armeabi-v7a \ 
    [email protected]_tools//tools/cpp:toolchain \ 
    --verbose_failures \ 
    //tensorflow/core:android_tensorflow_lib 

有誰知道如何Python綁定補充呢?這甚至可能嗎?

我已閱讀文檔,做了大量搜索,但沒有找到任何關於此的運氣。我看到很多其他人也有興趣讓Tensorflow在Kivy上工作(Android和iOS),但似乎沒有人做到這一點。人們只會說我們需要一個python-for-android配方,但配方的第一步是使用Python綁定爲Android構建,因此上述問題。

回答

3

注:我從來沒有與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 thingy相關的線條。

所以,你明白的食譜是如何工作之後,有兩種可能性:

  • 您的代碼塊實際上是做一些事情,並建立在Android系統
  • 你的代碼是毫無價值

如果你的代碼實際工作,有你就可以結合一個很好的機會已經取得setup.py文件轉換成一個簡單的外觀希望只是與另一個平臺檢查(並使用正確的bazel二進制我假設)。由於已有setup.py文件,因此應將包文件移至爲Android編譯的Python。另一方面,如果你上面粘貼的代碼是毫無價值的,那麼你最終可能會自己編譯代碼,重新設計它們的setup.py,只是將P4A作爲配方。如果您不熟悉從源代碼構建所需的編譯步驟,我真的不會羨慕您的過程。


而且它可能是提最後APK的大小一件好事。你可以在PyPI上看到Tensorflow,只有13MB的小輪子。然而,Manylinux車輪是巨大的(37-42MB),我想如果你打算安裝Tensorflow本身以外的任何東西,你最終會在這兩者之間的大小爲Android。總是有NumPy,你必須將它拖放到手機作爲依賴。所以,這給你~50MB的APK文件,這可能不是真正想要的(取決於你)。

This piece of code在他們的回購可能會幫助你太涉及到Python。

+0

感謝您的詳細說明。很徹底。不幸的是,我的問題是獲取Android的Tensorflow編譯(請參閱我的問題中的編譯代碼)以包含Python綁定,因此不會生成setup.py。我希望Tensorflow的人能夠在這裏扎堆,因爲他們提出了在Stackoverflow上提出的問題,他們應該監視這些問題。無論是哪種情況,感謝Kivy食譜總體策略的非常詳細的描述。 –