小编mar*_*arz的帖子

在Android Studio Project中使用tensorflow lite C++ API的问题

我目前正在研究一个关于神经网络的项目.为此,我想构建一个Android应用程序,它应该使用tensorflow [lite]来解决一些对象检测/识别问题.

因为我希望代码尽可能地可移植,所以我想用C++编写大部分代码,因此使用tensorflow lite的C++ API而不是Java API/wrapper.因此,我修改了tensorflow/contrib/lite/BUILD并添加了以下内容以便能够创建共享张量流库.

cc_binary(
name = "libtensorflowLite.so",

linkopts=["-shared", "-Wl"],
linkshared=1,

copts = tflite_copts(),
deps = [
    ":framework",
    "//tensorflow/contrib/lite/kernels:builtin_ops",
],

)
Run Code Online (Sandbox Code Playgroud)

(这是基于解决这个问题的:https://github.com/tensorflow/tensorflow/issues/17826)

然后我用了

bazel build //tensorflow/contrib/lite:libtensorflowLite.so --crosstool_top=//external:android/crosstool --cpu=arm64-v8a --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --cxxopt="-std=c++11"
Run Code Online (Sandbox Code Playgroud)

最终建立它.

之后我转向Android Studio并设置了一个基本项目.为了将共享库添加到项目中,我参考了这个示例:

https://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs

我还为flatbuffers添加了所需的依赖项.

构建/编译过程成功,没有任何链接器错误(好吧,至少在尝试了几个小时之后......).

然后APK成功安装在Android设备上,但在启动后立即崩溃.Logcat提供以下输出:

04-14 20:09:59.084 9623-9623/com.example.hellolibs E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.hellolibs, PID: 9623
    java.lang.UnsatisfiedLinkError: dlopen failed: library "/home/User/tensorflowtest/app/src/main/cpp/../../../../distribution/tensorflow/lib/x86/libtensorflowLite.so" not found
        at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
        at java.lang.System.loadLibrary(System.java:1657)
        at com.example.hellolibs.MainActivity.<clinit>(MainActivity.java:36)
        at java.lang.Class.newInstance(Native Method)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1174)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at …
Run Code Online (Sandbox Code Playgroud)

c++ android android-ndk tensorflow android-studio-3.0

4
推荐指数
1
解决办法
4264
查看次数