私はAndroidのモバイルアプリケーションでTensorFlowを使用してモデルを推測しようとしています。まず、TensorFlowグラフを作成してテストしました。 protobufファイルとして保存されます。次に、私はツールチェインのセットアップを持っており、Inception Android demoをビルドして実行しています。私の次のステップは、Android tutorialに続いて、Androidスタジオ(C++を有効にする)で新しくAndroidプロジェクトを作成することです。私はJNI Hello Worldアプリケーションを作成しました。これはコンパイルされ、Nexus上で動作します。しかし、「org.tensorflow」をインポートしようとすると、Android Studio(AS)にそれを認識させることができません。だから私の主な質問は、私のデモアプリにTensorFlowをもたらす方法です。
は例えば、私はで開始する単純なクラスを作成しました:TensorFlow、Android StudioとBazel:新しいプロジェクトを設定する
package com.foobar.tfdemo;
import org.tensorflow.contrib.android.TensorFlowInferenceInterface;
public class TensorFlowClassifier implements Classifier {
// do something
}
しかし、Androidのメーカーはorg.tensorflow
を解決することはできません。 可能なオプション: 1)TFライブラリ
build.gradle
を変更
詳細:
オプション1)build.gradle
を変更してください。
私はInception 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, \
'[email protected]_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の)ファイルに持参ここbuild.gradle
ファイルです。
私はこれに多くの時間を費やしました。私は、コマンドラインでBazelを使用してlibtensorflow_demo.so
を生成した:
bazel build //tensorflow/examples/android:tensorflow_native_libs --crosstool_top=//external:android/crosstool --cpu=$CPU [email protected]_tools//tools/cpp:toolchain
と〜プロジェクト/ libsにと〜プロジェクト/ srcに/アプリ/ srcに/メイン/ jniLibsの両方でそれを置きます。しかし、私は何も助けてくれないようです。
オプション3:CMakeList.txtを使用してテンソルフローをコンパイルします。
私はこれに多くの時間を費やしていません。 CMakeList.txt
はBazelを起動したり、.soファイルをインポートしたりすることはできません。代わりに.aファイルが必要だと思います。
他の人がTensorflowをAndroidプロジェクトに組み込む方法はありますか? よろしくお願いいたします。代わりにtensorflow_inference
使用TensorFlow-Android-Inference
の https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/android/cmake
そしてdebugCompile
とreleaseCompile
で: