使用gradle构建并运行tensorflow lite演示

时间:2018-05-14 12:20:40

标签: android android-studio machine-learning tensorflow-lite

所以最近根据这个comment tensorflow lite现在支持 用于对象检测的mobilenet_ssd。哪个好.. 我设法用bazel构建和运行演示,但最初我想用Android Studio做到这一点。不幸的是我无法做到。

以下是我收到的错误:

Error:Plugin with id 'com.android.application' not found.

阅读评论似乎我并不是唯一一个对此感到困惑的人。这有解决方案吗?或者目前没有这个特定更新的gradle支持?

任何可以澄清这个问题的信息都非常受欢迎,因为我还是AI世界的新手。

1 个答案:

答案 0 :(得分:2)

以下是在Bazel(方法1)和Gradle(方法2)中构建和运行以下TensorFlow Lite Android示例的说明;


如何获取TensorFlow Lite Android示例以运行[tensorflow / tensorflow / contrib / lite / examples / android];

(例如,对象检测/ ssd模型; detect.tflite [/mobilenet_ssd.tflite] /coco_labels_list.txt)

基于的指令; https://medium.com/tensorflow/training-and-serving-a-realtime-mobile-object-detector-in-30-minutes-with-cloud-tpus-b78971cf1193

方法1(无框)

  • git clone https://github.com/tensorflow/tensorflow
  • cd tensorflow
  • 可选:git checkout master / 938a3b77797164db736a1006a7656326240baa59
  • gedit WORKSPACE,并添加对android_sdk_repository和android_ndk_repository的引用;

    android_sdk_repository(
        name = "androidsdk",
        api_level = 28,
        build_tools_version = "28.0.1",
        # Replace with path to Android SDK on your system
        path = "/[INSERTCORRECTPATHHERE]/android-sdk-linux",
    )
    android_ndk_repository(
       name="androidndk",
       path="/[INSERTCORRECTPATHHERE]/android-ndk-r14b",
       api_level=28)
    
  • [这可以防止出现以下错误:

    ERROR: /.../tensorflow/contrib/lite/kernels/internal/BUILD:620:1: no such package '@androidndk//': The repository could not be resolved and referenced by '//tensorflow/contrib/lite/kernels/internal:cpu_check'
    ERROR: Analysis of target '//tensorflow/contrib/lite/examples/android:tflite_demo' failed; build aborted: Analysis failed
    FAILED: Build did NOT complete successfully (60 packages loaded)]
    
  • [注意,根据https://medium.com/tensorflow/training-and-serving-a-realtime-mobile-object-detector-in-30-minutes-with-cloud-tpus-b78971cf1193,Bazel需要android-ndk-r14b]

  • bazel build -c opt --config=android_arm --cxxopt='--std=c++11' //tensorflow/contrib/lite/examples/android:tflite_demo
  • adb install bazel-bin/tensorflow/contrib/lite/examples/android/tflite_demo.apk
  • 在Android手机上运行示例应用程序(tflDetect)(搜索-tflDetect)
  • [在请求时授予对应用程序的权限]

方法2(等级)

  • git clone https://github.com/tensorflow/tensorflow
  • cd tensorflow
  • 可选:git checkout master / 938a3b77797164db736a1006a7656326240baa59
  • 可选:从tensorflow中提取tensorflow / contrib / lite / examples / android文件夹
  • 在Android Studio项目中打开tensorflow / contrib / lite / examples / android目录。
  • [安装它要求的所有Gradle扩展。]
  • 修改app / build.gradle;

    • 删除(注释)此内容; jackOptions { enabled true }
    • compile 'org.tensorflow:tensorflow-lite:0.0.0-nightly'更改为compile 'org.tensorflow:tensorflow-lite:1.10.0' [最新的工作修订版](或compile 'org.tensorflow:tensorflow-lite:+'
  • [这可以防止出现以下错误:

    08-22 05:03:19.470 24480-24480/org.tensorflow.lite.demo W/System.err: TensorFlowLite: failed to load native library: dlopen failed: cannot locate symbol "__android_log_vprint" referenced by "/data/app/org.tensorflow.lite.demo-2/lib/arm/libtensorflowlite_jni.so"...
    08-22 02:48:55.728 29643-29643/org.tensorflow.lite.demo E/art: No implementation found for long org.tensorflow.lite.NativeInterpreterWrapper]
    
  • 成绩同步

  • 构建
  • 运行
  • [在请求时授予对应用程序的权限]
  • 在Android手机上运行示例应用程序(tflDetect)(搜索-tflDetect)

请注意是否在运行时抛出错误,例如;

    Unknown failure (at android.os.Binder.execTransact(Binder.java:573))
    Error while Installing APKs
    ...
    Installation failed with message Invalid File: /.../app/build/intermediates/split-apk/debug/slices/slice_5.apk.
    It is possible that this issue is resolved by uninstalling an existing version of the apk if it is present, and then re-installing.
    WARNING: Uninstalling will remove the application data!
    Do you want to uninstall the existing application?

然后尝试以下任一操作;

  • 重新启动电话,然后重新运行应用程序
  • 构建-重建项目,然后重新运行应用程序

[编辑: 为了使可选的对象跟踪正常工作,需要安装libtensorflow_demo.so

  • 假定上面带有Gradle(方法2)说明的TensorFlow Lite Android示例已完成
  • 使用上面的Bazel(方法1)说明执行TensorFlow Lite Android示例-这将使用libtensorflow_demo.so
  • 安装Android示例的有效版本。 现在需要从Android设备上已安装的APK中提取
  • libtensorflow_demo.so
  • 打开Android Studio-视图-工具窗口-设备文件资源管理器
  • 确保已选择Android设备
  • /data/app/org.tensorflow.lite.demo/lib/arm-右键单击libtensorflow_demo.so-另存为-保存到硬盘驱动器上的临时文件夹中
  • 创建文件夹tensorflow/contrib/lite/examples/android/app/src/main/jniLibs
  • 创建4个子文件夹(jniLibs/arm64-v8ajniLibs/armeabi-v7ajniLibs/x86jniLibs/x86_64
  • libtensorflow_demo.so放在所有子文件夹中
  • 在Android Studio中打开tensorflow/contrib/lite/examples/android
  • 使用Gradle重新构建
  • 运行]

如何获取TensorFlow Lite Java演示以运行[tensorflow / tensorflow / contrib / lite / java / demo]

(例如分类模型; mobilenet_quant_v1_224.tflite / labels_mobilenet_quant_v1_224.txt)

基于的指令; https://www.tensorflow.org/mobile/tflite/demo_android

方法1(无框)

请参见https://www.tensorflow.org/mobile/tflite/demo_android / https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/java/demo/README.md(未经测试)

方法2(等级)

  • git clone https://github.com/tensorflow/tensorflow
  • cd tensorflow
  • 可选:git checkout master / 938a3b77797164db736a1006a7656326240baa59
  • 可选:从tensorflow中提取tensorflow / contrib / lite / java / demo文件夹
  • 在Android Studio项目中打开tensorflow / contrib / lite / java / demo目录。
  • [安装它要求的所有Gradle扩展。]
  • 编辑应用程序-build.gradle;
    • androidTestCompile('androidx.test.espresso:espresso-core:3.1.0-alpha3'更改为androidTestCompile('com.android.support.test.espresso:espresso-core:3.0.2'
    • compile 'org.tensorflow:tensorflow-lite:0.0.0-nightly'更改为compile 'org.tensorflow:tensorflow-lite:1.10.0' [最新的工作修订版](或compile 'org.tensorflow:tensorflow-lite:+'
  • [这可以防止出现以下错误:

    08-22 05:03:19.470 24480-24480/org.tensorflow.lite.demo W/System.err: TensorFlowLite: failed to load native library: dlopen failed: cannot locate symbol "__android_log_vprint" referenced by "/data/app/org.tensorflow.lite.demo-2/lib/arm/libtensorflowlite_jni.so"...
    08-22 02:48:55.728 29643-29643/org.tensorflow.lite.demo E/art: No implementation found for long org.tensorflow.lite.NativeInterpreterWrapper]
    
  • [根据要求选择; '添加Maven存储库并同步项目']

  • 成绩同步
  • 构建
  • 运行
  • [在Android手机上运行演示应用程序(tflitecamerademo)(搜索-tflitecamerademo)]
  • [在请求时授予对应用程序的权限]