Rup*_*aya 10 c++ android android-ndk tensorflow
我试图在Android上用C++运行神经网络.示例(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/android)显示如何使用tensorflow使用JAVA apis,它使用JNI函数调用C++.有人试图在Android上直接在C++中使用tensorflow吗?如何在Android上使用C++ apis构建和链接tensorflow库.你能指导我吗?我想在Android上以类似于iOS示例的方式使用C++ apis.
这是我解决此问题的方法。尽管没有太多关于在android上使用c ++ api以及将tensorflow编译并链接到NDK的文档,但是makefile具有重要的注释以及相关的脚本。编译步骤与ios非常相似。
第2步是这样运行tensorflow / contrib / makefile / compile_android_protobuf.sh
NDK_ROOT =绝对/路径/到/ ndk /文件夹./tensorflow/contrib/makefile/compile_android_protobuf.sh
运行make。但是首先,您可能需要在Makefile中进行一些更改。用-fPIC标志替换-fPIE标志。还要将-fPIC标志添加到HOST_CXXFLAGS。然后像这样运行make:
make -f tensorflow / contrib / makefile / Makefile TARGET = ANDROID NDK_ROOT =绝对/路径/到/ ndk /文件夹
另外,也可以一次运行build_all_android.sh,它一次执行所有3个步骤,但是您可能需要对标记进行Makefile更改。
这生成了tensorflow / contrib / makefile / gen / protobuf / lib / libprotobuf.a和tensorflow / contrib / makefile / gen / lib / libtensorflow-core.a; 这可以链接到LOCAL_LDLIBS下的Android.mk文件中的Android NDK项目。应该-Wl,--build-id -Wl,--allow-multiple-definition -Wl,--whole-archive在Android.mk文件中的LOCAL_CFLAGS中使用-std = c ++ 11,在Application.mk文件中使用APP_STL:= gnustl_shared。
这足以构建您的NDK项目的共享库。
100% 可能,但有一个小警告......
Android 的大部分 UI 都是用 Java 完成的。您可以创建一个本机活动,但要将任何输出输出到屏幕,您需要使用 OpenGL(它没有所有漂亮的 Android UI 视图),或者您需要将 JNI 屏障转换为将数据输出到并从本机代码显示给用户。
根据您对 OpenGLES、EGL 等的熟悉程度。您可能会选择转换 JNI 屏障而不是创建 native_activity,但横截面要小得多。
您可以创建一个 Runnable 并在有工作需要执行时向其发出信号。使用并发队列(在 Java 中)提交工作,并使用另一个(并发)队列接收结果。Runnable 弹出工作队列,调用单个 JNI/C 函数来提交工作并返回 JSON 字符串。然后它将工作提交到完成队列。
| 归档时间: |
|
| 查看次数: |
2910 次 |
| 最近记录: |