TensorFlow,Android Studio和Bazel:建立一个新项目

赫菲斯托斯

我正在尝试在Android移动应用中使用TensorFlow推断模型。首先,我已经构建并测试了TensorFlow图;它保存为protobuf文件。接下来,我进行了工具链设置,并构建并运行了Inception Android演示我的下一步是按照Android教程在Android Studio(启用C ++)中创建一个新的Android项目我已经创建了JNI Hello World应用程序,它可以在Nexus上编译并运行。但是,当我尝试导入“ org.tensorflow”时,我无法让Android Studio(AS)识别它。所以,我的主要问题是:如何将TensorFlow引入我的演示应用程序。
例如,我创建了一个简单的类以以下内容开头:

package com.foobar.tfdemo; 

import org.tensorflow.contrib.android.TensorFlowInferenceInterface;

public class TensorFlowClassifier implements Classifier {
// do something
}

但是Android Studio无法解决org.tensorflow可能的选项:1)修改build.gradle以将TF编译到项目中(使用Bazel)2)从外部编译TF库(.so)并将其导入,或3)使用CMakeList.txt导入TF库

详细:

选项1)修改build.gradle
我将“盗梦空间”build.gradle用作模型,并复制了大部分内容。import org.tensorflow即使没有其他错误,同样的问题仍然无法解决。这是build.gradle文件:

apply plugin: 'com.android.application'
def bazel_location = '/usr/local/bin/bazel'
def cpuType = 'armeabi-v7a'
def nativeDir = 'libs/' + cpuType

android {
    compileSdkVersion 24
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.algoint.tfdemo"
        minSdkVersion 23
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'
}

task buildNative(type:Exec) {
    workingDir '../../..'
    commandLine bazel_location, 'build', '-c', 'opt', \
      'tensorflow/examples/android:tensorflow_native_libs', \
       '--crosstool_top=//external:android/crosstool', \
       '--cpu=' + cpuType, \
       '--host_crosstool_top=@bazel_tools//tools/cpp:toolchain'
}

task copyNativeLibs(type: Copy) {
    from('../../../bazel-bin/tensorflow/examples/android') { include '**/*.so' }
    into nativeDir
    duplicatesStrategy = 'include'
}

copyNativeLibs.dependsOn buildNative
assemble.dependsOn copyNativeLibs
tasks.whenTaskAdded { task ->
    if (task.name == 'assembleDebug') {
        task.dependsOn 'copyNativelibs'
    }
}

选项2:导入一个tensorflow库(.so)文件。
我花了很多时间在这上面。我已经libtensorflow_demo.so在命令行中使用Bazel生成了:

bazel build //tensorflow/examples/android:tensorflow_native_libs --crosstool_top=//external:android/crosstool --cpu=$CPU --host_crosstool_top=@bazel_tools//tools/cpp:toolchain

并将其放在〜project / libs和〜project / src / app / src / main / jniLibs中。但是我似乎无济于事。

选项3:使用CMakeList.txt编译tensorflow。
我没有花很多时间在这上面。我认为CMakeList.txt无法调用Bazel或导入.so文件。我认为它需要一个.a文件来代替。

那么,其他人如何将Tensorflow集成到Android项目中呢?此致。

丹杰

在您的Android应用中嵌入预训练的TensorFlow模型变得容易得多。在这里查看我的博客文章:
https : //medium.com/@daj/using-a-pre-trained-tensorflow-model-on-android-e747831a3d6(第1部分)https://medium.com/@daj/在Android上使用预先训练的Tensorflow模型第2部分-153ebdd4c465(第2部分)

我的博客文章更加详细,但总而言之,您需要做的是:

  1. org.tensorflow:tensorflow-android:+在build.gradle中包括编译依赖项。
  2. 使用JavaTensorFlowInferenceInterface类与模型进行交互(无需修改任何本机代码)。

仅供参考,TensorFlow Android演示应用程序已更新为使用此新方法。请参阅TensorFlowImageClassifier.recognizeImage以了解它在哪里使用TensorFlowInferenceInterface

您仍然需要指定一些配置,例如图中的输入和输出节点的名称以及输入的大小,但是由于您构建了自己的TensorFlow图,您可能知道此信息。:-)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

适用于一个项目的Android Studio多Windows

来自分类Dev

Android Studio 0.2.9无法创建新项目

来自分类Dev

Android Studio 0.2.9和新项目

来自分类Dev

“新项目”失败:Android Studio 0.3.4

来自分类Dev

android studio是一个开源项目吗?

来自分类Dev

Android Studio第一个项目错误

来自分类Dev

一个针对Eclipse和Android Studio的Android项目

来自分类Dev

如何将一个Android Studio项目合并到另一个Android Studio项目

来自分类Dev

Android Studio:更改项目中一个特定模块的检查配置文件

来自分类Dev

如何在Android Studio中打开另一个项目

来自分类Dev

使用Android Studio中的一个项目创建多个APK文件

来自分类Dev

使用Android Studio中的一个项目创建多个APK文件

来自分类Dev

Android Studio不会创建新项目

来自分类Dev

尝试向RecyclerView添加和删除新项目时出现IndexOutOfBoundsException-Android Studio

来自分类Dev

Android Studio无法创建新项目

来自分类Dev

无法使用Android Studio启动新项目

来自分类Dev

复制一个android studio项目

来自分类Dev

Android Studio无法正确设置新项目

来自分类Dev

从现有的android代码创建一个新项目时,我的日食有些问题

来自分类Dev

新项目的Android Studio构建错误

来自分类Dev

我们可以手动创建一个Android Studio项目吗?

来自分类Dev

Android Studio卡在新项目上

来自分类Dev

Android Studio不会创建新项目

来自分类Dev

无法在Android Studio上运行新项目

来自分类Dev

如何在我的Android Studio项目中使用一个代号迁移工具?

来自分类Dev

Android Studio无法创建新项目

来自分类Dev

当我使用Android Studio终端切换到另一个分支时,如何刷新项目文件?

来自分类Dev

我如何共享一个Android Studio项目

来自分类Dev

如何在一个Android Studio项目上进行协作?

Related 相关文章

  1. 1

    适用于一个项目的Android Studio多Windows

  2. 2

    Android Studio 0.2.9无法创建新项目

  3. 3

    Android Studio 0.2.9和新项目

  4. 4

    “新项目”失败:Android Studio 0.3.4

  5. 5

    android studio是一个开源项目吗?

  6. 6

    Android Studio第一个项目错误

  7. 7

    一个针对Eclipse和Android Studio的Android项目

  8. 8

    如何将一个Android Studio项目合并到另一个Android Studio项目

  9. 9

    Android Studio:更改项目中一个特定模块的检查配置文件

  10. 10

    如何在Android Studio中打开另一个项目

  11. 11

    使用Android Studio中的一个项目创建多个APK文件

  12. 12

    使用Android Studio中的一个项目创建多个APK文件

  13. 13

    Android Studio不会创建新项目

  14. 14

    尝试向RecyclerView添加和删除新项目时出现IndexOutOfBoundsException-Android Studio

  15. 15

    Android Studio无法创建新项目

  16. 16

    无法使用Android Studio启动新项目

  17. 17

    复制一个android studio项目

  18. 18

    Android Studio无法正确设置新项目

  19. 19

    从现有的android代码创建一个新项目时,我的日食有些问题

  20. 20

    新项目的Android Studio构建错误

  21. 21

    我们可以手动创建一个Android Studio项目吗?

  22. 22

    Android Studio卡在新项目上

  23. 23

    Android Studio不会创建新项目

  24. 24

    无法在Android Studio上运行新项目

  25. 25

    如何在我的Android Studio项目中使用一个代号迁移工具?

  26. 26

    Android Studio无法创建新项目

  27. 27

    当我使用Android Studio终端切换到另一个分支时,如何刷新项目文件?

  28. 28

    我如何共享一个Android Studio项目

  29. 29

    如何在一个Android Studio项目上进行协作?

热门标签

归档