このドキュメントでは、TensorFlow Lite Android ライブラリを独自に構築する方法について説明します。通常、TensorFlow Lite Android ライブラリをローカルでビルドする必要はありません。単に使用したい場合は、Android プロジェクトでそれらを使用する方法の詳細について、 Android クイックスタートを参照してください。
毎晩のスナップショットを使用する
毎晩のスナップショットを使用するには、次のリポジトリをルート Gradle ビルド構成に追加します。
allprojects {
repositories { // should be already there
mavenCentral() // should be already there
maven { // add this repo to use snapshots
name 'ossrh-snapshot'
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
}
}
TensorFlow Lite をローカルでビルドする
場合によっては、TensorFlow Lite のローカル ビルドを使用したい場合があります。たとえば、 TensorFlow から選択された操作を含むカスタム バイナリを構築している場合や、TensorFlow Lite にローカルな変更を加えたい場合があります。
Docker を使用してビルド環境をセットアップする
- Docker ファイルをダウンロードします。 Docker ファイルをダウンロードすることにより、次の利用規約がその使用に適用されることに同意したことになります。
クリックして同意することにより、Android Studio および Android Native Development Kit のすべての使用が、 https://developer.android.com/studio/termsで入手可能な Android ソフトウェア開発キット ライセンス契約に準拠することに同意したことになります (このような URL は、 Google によって随時更新または変更されます)。
ファイルをダウンロードするには、利用規約に同意する必要があります。 l10n確認- 必要に応じて、Android SDK または NDK のバージョンを変更できます。ダウンロードした Docker ファイルを空のフォルダーに置き、次を実行して Docker イメージをビルドします。
docker build . -t tflite-builder -f tflite-android.Dockerfile
- 現在のフォルダーをコンテナー内の /host_dir にマウントして、docker コンテナーを対話的に開始します (/tensorflow_src はコンテナー内の TensorFlow リポジトリであることに注意してください)。
docker run -it -v $PWD:/host_dir tflite-builder bash
Windows で PowerShell を使用する場合は、「$PWD」を「pwd」に置き換えます。
ホストで TensorFlow リポジトリを使用する場合は、代わりにそのホスト ディレクトリをマウントします (-v hostDir:/host_dir)。
- コンテナー内に入ったら、次のコマンドを実行して、追加の Android ツールとライブラリをダウンロードできます (ライセンスに同意する必要がある場合があることに注意してください)。
sdkmanager \
"build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
"platform-tools" \
"platforms;android-${ANDROID_API_LEVEL}"
次に、ワークスペースと .bazelrc の構成セクションに進み、ビルド設定を構成する必要があります。
ライブラリのビルドが完了したら、それらをコンテナー内の /host_dir にコピーして、ホスト上でアクセスできるようにします。
Docker なしでビルド環境をセットアップする
Bazel と Android の前提条件をインストールする
Bazel は、TensorFlow の主要なビルド システムです。それを使用してビルドするには、それと Android NDK および SDK がシステムにインストールされている必要があります。
- Bazel ビルド システムの最新バージョンをインストールします。
- ネイティブ (C/C++) TensorFlow Lite コードをビルドするには、Android NDK が必要です。現在推奨されているバージョンは 19c で、ここで見つけることができます。
- Android SDK とビルド ツールは、こちらから、またはAndroid Studioの一部として入手できます。ビルド ツール API >= 23 は、TensorFlow Lite のビルドに推奨されるバージョンです。
WORKSPACE と .bazelrc を構成する
これは、TF Lite ライブラリをビルドするために必要な 1 回限りの構成手順です。ルートの TensorFlow チェックアウト ディレクトリで./configure
スクリプトを実行し、スクリプトが Android ビルド用の./WORKSPACE
をインタラクティブに構成するように求められたら、「はい」と答えます。スクリプトは、次の環境変数を使用して設定を構成しようとします。
-
ANDROID_SDK_HOME
-
ANDROID_SDK_API_LEVEL
-
ANDROID_NDK_HOME
-
ANDROID_NDK_API_LEVEL
これらの変数が設定されていない場合は、スクリプト プロンプトで対話的に指定する必要があります。構成が成功すると、ルート フォルダーの.tf_configure.bazelrc
ファイルに次のようなエントリが生成されます。
build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r19c"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="28.0.3"
build --action_env ANDROID_SDK_API_LEVEL="23"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"
ビルドしてインストールする
Bazel が適切に構成されたら、次のようにルート チェックアウト ディレクトリから TensorFlow Lite AAR をビルドできます。
bazel build -c opt --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
//tensorflow/lite/java:tensorflow-lite
これにより、 bazel-bin/tensorflow/lite/java/
に AAR ファイルが生成されます。これにより、いくつかの異なるアーキテクチャで「太い」AAR が構築されることに注意してください。それらすべてが必要ない場合は、デプロイメント環境に適したサブセットを使用してください。
次のように、一連のモデルのみを対象とするより小さな AAR ファイルを作成できます。
bash tensorflow/lite/tools/build_aar.sh \
--input_models=model1,model2 \
--target_archs=x86,x86_64,arm64-v8a,armeabi-v7a
上記のスクリプトは、モデルの 1 つが Tensorflow ops を使用している場合、 tensorflow-lite.aar
ファイルとオプションでtensorflow-lite-select-tf-ops.aar
ファイルを生成します。詳細については、 TensorFlow Lite バイナリ サイズの削減セクションを参照してください。
AAR をプロジェクトに直接追加する
tensorflow-lite.aar
ファイルをプロジェクトのlibs
というディレクトリに移動します。アプリのbuild.gradle
ファイルを変更して新しいディレクトリを参照し、既存の TensorFlow Lite 依存関係を新しいローカル ライブラリに置き換えます。例:
allprojects {
repositories {
mavenCentral()
maven { // Only for snapshot artifacts
name 'ossrh-snapshot'
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
flatDir {
dirs 'libs'
}
}
}
dependencies {
compile(name:'tensorflow-lite', ext:'aar')
}
AAR をローカルの Maven リポジトリにインストールする
ルート チェックアウト ディレクトリから次のコマンドを実行します。
mvn install:install-file \
-Dfile=bazel-bin/tensorflow/lite/java/tensorflow-lite.aar \
-DgroupId=org.tensorflow \
-DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
アプリのbuild.gradle
で、 mavenLocal()
依存関係があることを確認し、標準の TensorFlow Lite 依存関係を選択した TensorFlow ops をサポートする依存関係に置き換えます。
allprojects {
repositories {
mavenCentral()
maven { // Only for snapshot artifacts
name 'ossrh-snapshot'
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
mavenLocal()
}
}
dependencies {
implementation 'org.tensorflow:tensorflow-lite:0.1.100'
}
ここでのバージョン0.1.100
は、純粋にテスト/開発用であることに注意してください。ローカル AAR をインストールすると、標準のTensorFlow Lite Java 推論 APIをアプリ コードで使用できます。