直接在Android NDK端使用tensorflow(不使用JAVA api) 我试图在C++中运行一个Android的神经网络。示例()演示如何使用JNI API使用JNI函数调用C++的TysFoojava。有没有人试图在Android上直接使用C++中的TysFooFLUE?如何在Android上使用C++ API构建和链接TysFunFLUE库。你能指导我吗?我想在Android上使用C++ API,与iOS例子中的类似方法。<P>100%,有一点小小的警告……

直接在Android NDK端使用tensorflow(不使用JAVA api) 我试图在C++中运行一个Android的神经网络。示例()演示如何使用JNI API使用JNI函数调用C++的TysFoojava。有没有人试图在Android上直接使用C++中的TysFooFLUE?如何在Android上使用C++ API构建和链接TysFunFLUE库。你能指导我吗?我想在Android上使用C++ API,与iOS例子中的类似方法。<P>100%,有一点小小的警告……,android,c++,tensorflow,android-ndk,Android,C++,Tensorflow,Android Ndk,Android的大部分UI都是用Java完成的。您可以创建一个,但要获得屏幕上的任何输出,您需要使用OpenGL(它没有所有漂亮的Android UI视图),或者需要转换JNI屏障,以获得与本机代码之间的数据输出,并显示给用户 取决于您对OpenGLES、EGL等的熟悉程度。。您可以选择转换JNI屏障,而不是创建本机的_活动,但横截面要小得多 您可以创建一个Runnable,并在有工作要执行时发出信号。使用一个并发队列(Java)提交工作,使用另一个(并发)队列从中接收结果。Runnable弹出

Android的大部分UI都是用Java完成的。您可以创建一个,但要获得屏幕上的任何输出,您需要使用OpenGL(它没有所有漂亮的Android UI视图),或者需要转换JNI屏障,以获得与本机代码之间的数据输出,并显示给用户

取决于您对OpenGLES、EGL等的熟悉程度。。您可以选择转换JNI屏障,而不是创建本机的_活动,但横截面要小得多


您可以创建一个Runnable,并在有工作要执行时发出信号。使用一个并发队列(Java)提交工作,使用另一个(并发)队列从中接收结果。Runnable弹出工作队列,调用单个JNI/C函数来提交工作并返回JSON字符串。然后它将工作提交到完成的队列。

以下是我如何解决这个问题的。虽然在Android上使用C++ API和编译和链接TraceFoSurd到NDK的文档不多,但MaFag文件有重要的注释以及相关的脚本。编译步骤与ios非常相似

  • 安装以下依赖项a)autoconf b)automake c)automake。然后运行tensorflow/contrib/makefile/download_dependencies.sh;我在2017年5月10日第一次运行了repository,当时它运行得非常好。在6月1日左右的更高版本中,由于tensorflow/workspace.bzl中的一些更改,我不了解download_dependencies.sh中的内容。sh无法识别download_dependencies尝试下载的tar文件。我刚从5月10日的repo commit中替换了workspace.bzl
  • 第2步是像这样运行tensorflow/contrib/makefile/compile_android_protobuf.sh

    NDK_ROOT=absolute/path/to/NDK/folder./tensorflow/contrib/makefile/compile_android_protobuf.sh

  • 跑来跑去。但首先您可能需要在Makefile中进行一些更改。将-fPIE标志替换为-fPIC标志。还将-fPIC标志添加到主机\u CXXFLAGS。然后像这样运行make:

    make-f tensorflow/contrib/makefile/makefile TARGET=ANDROID NDK_ROOT=absolute/path/to/NDK/folder

    或者,您也可以运行build_all_android.sh,它可以一次性运行所有3个步骤,但您可能需要对标志进行Makefile更改

  • 这生成了tensorflow/contrib/makefile/gen/protobuf/lib/libprotobuf.a和tensorflow/contrib/makefile/gen/libtensorflow core.a;这可以链接到本地_LDLIBS下的Android.mk文件中的Android NDK项目。我们应该在Android.mk文件的本地标签和Application.mk文件中的APP_STL:=gnustl_shared中使用这些链接的标志


    这应该足以构建NDK项目的共享库

    如果我的问题不清楚,我很抱歉。我根本不关心UI部分。无论如何,我将通过JNI传递数据来处理。我的问题是关于如何构建Android的ToSoFrand并将其包含在Android项目中,调用Android应用程序C++侧的TysFraceAPI。我在C++侧有一个图像缓冲区,我想通过神经网络运行,而不把它发送给java。有没有想过如何用CMake代替在新的Android中工作?我尝试了一系列的东西,但是不能使用Android NDK C++代码C++。