我想在C++的Android上運行神經網絡。這些示例(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/androidhttps://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/android)顯示瞭如何使用使用JNI函數調用C++的JAVA API的tensorflow。有沒有人試圖直接在Android上使用C++進行tensorflow?張量流庫如何構建和鏈接以在Android上使用C++ API。你能指導我嗎?我想以類似於iOS示例中的方式在Android上使用C++ apis。直接在Android NDK端使用tensorflow(不使用JAVA API)
回答
100%的可能,用小的警告......
大多數Android的用戶界面是用Java實現。您可以創建一個native activity,但要獲得任何輸出到屏幕上,您需要使用OpenGL(它沒有所有漂亮的Android UI視圖),或者您需要轉換JNI屏障以將您的數據輸出和從顯示給用戶的本機代碼。
取決於您對OpenGLES,EGL等的熟悉程度。您可以選擇轉換JNI屏障,而不是創建native_activity,但是截面要小得多。
您可以創建一個Runnable並在需要執行工作時發出信號。使用併發隊列(以Java)提交工作,並使用另一個(併發)隊列從中接收結果。 Runnable彈出工作隊列,調用單個JNI/C函數來提交工作並返回JSON字符串。然後它將工作提交到完成的隊列。
這是我如何解決這個問題。儘管在android上使用C++ apis的文檔並不多,並且編譯和鏈接tensorflow到NDK,但makefile還有重要的註釋以及相關的腳本。編譯步驟與ios非常相似。
- 安裝以下依賴性的)的autoconf b)中的automake c)中的automake。然後運行tensorflow/contrib/makefile/download_dependencies.sh;我運行在2017年5月10日,第一次,當它完美的工作。在6月1日左右的更新版本中,由於tensorflow/workspace.bzl中的某些更改,我在download_dependencies.sh中無法識別download_dependencies正在嘗試下載的tar文件。我剛剛從5月10日更換了workspace.bzl。
步驟2是運行tensorflow /了contrib /生成文件/ compile_android_protobuf.sh這樣
NDK_ROOT =絕對/路徑/到/ NDK /文件夾./tensorflow/contrib/makefile/compile_android_protobuf.sh
運行make。但首先您可能需要對Makefile進行一些更改。用-fPIC標誌替換-fPIE標誌。同時向HOST_CXXFLAGS添加-fPIC標誌。然後運行使這樣的:
化妝-f tensorflow /了contrib /生成文件/生成文件TARGET =機器人NDK_ROOT =絕對/路徑/到/ NDK /文件夾
或者,可以還運行build_all_android.sh它運行所有3一步到位,但您可能需要對標誌進行Makefile更改。
這個生成tensorflow /了contrib /生成文件/根/ protobuf的/ LIB/libprotobuf.a和tensorflow /了contrib /生成文件/根/ LIB/libtensorflow-core.a;這可以鏈接到LOCAL_LDLIBS下的Android.mk文件中的Android NDK項目。應該在Android.mk文件的LOCAL_CFLAGS中使用這些鏈接標誌-Wl,--build-id -Wl,--allow-multiple-definition -Wl,--whole-archive
-std = C++ 11,並在Application.mk文件中使用APP_STL:= gnustl_shared。
這應該足以構建NDK項目的共享庫。
任何想法如何使用CMake在新的Android中完成這項工作?我已經嘗試了一堆東西,但一直未能使用Android NDK C++代碼使用C++ tensorflow調用。 –
- 1. Android KeyLogger(Java/NDK Api)
- 2. 在Android上使用NDK連接SQLite庫
- 3. Android使用C(ndk)
- 4. 在Android NDK中使用libcurl
- 5. 在Android中使用Skia NDK
- 6. 在Android NDK中使用「sp」
- 7. 在Android中使用Java API
- 8. 如何在android中使用android ndk
- 9. 使用Java客戶端API
- 10. 使用套接字()Android中NDK
- 11. 如何直接在Android應用程序中使用Graph API
- 12. Keras與TensorFlow後端不使用GPU
- 13. Android - 使用NDK構建Gradle
- 14. 使用JRuby直接調用Android Java方法
- 15. 使用ndk-gdb進行Android NDK調試
- 16. Android NDK:使用NDK上傳文件
- 17. INSTALL_FAILED_MISSING_SHARED_LIBRARY使用NDK
- 18. 用於Android的Dropbox API NDK
- 19. 直接在Java API中使用C++數組,需要byte []
- 20. Ubuntu接管Android。我們現在要使用Android的GCC還是Java NDK/SDK?
- 21. 我如何使用'glGenVertexArrays'使用android-ndk
- 22. 使用java連接QC API JAR使用
- 23. 使用C與Android ndk
- 24. 使用Android NDK編譯libpcap
- 25. android ndk使用mupdf庫
- 26. 使用minizip與android ndk
- 27. 使用Android NDK和C++
- 28. 設置使用Android NDK
- 29. 使用STL與Android NDK C++
如果我的問題不清楚,我很抱歉。我根本不關心UI部分。我將通過JNI傳遞數據來處理。 我的問題是關於如何爲android構建tensorflow並將其包含在android項目中,以在Android應用程序的C++端調用tensorflow apis。我在C++端有圖像緩衝區,我想通過神經網絡運行而不發送給JAVA。 –