このページは Cloud Translation API によって翻訳されました。
Switch to English

Android用TensorFlow Liteを構築する

このドキュメントでは、TensorFlow Lite Androidライブラリを自分で構築する方法について説明します。通常、TensorFlow Lite Androidライブラリをローカルでビルドする必要はありません。単に使用したい場合は、 JCenterでホストされているTensorFlow Lite AARを使用するのが最も簡単な方法です。 Androidプロジェクトでそれらを使用する方法の詳細については、 Androidクイックスタートを参照してください。

TensorFlow Liteをローカルでビルドする

場合によっては、TensorFlow Liteのローカルビルドを使用できます。たとえば、TensorFlowから選択されたオペレーションを含むカスタムバイナリを構築している場合や、TensorFlow Liteにローカルの変更を加えたい場合があります。

Dockerを使用してビルド環境をセットアップする

  • Dockerファイルをダウンロードします。 Dockerファイルをダウンロードすると、次の利用規約がその使用に適用されることに同意したことになります。

クリックして同意すると、Android StudioおよびAndroid Native Development Kitのすべての使用が、 https://developer.android.com/studio/termsで入手可能なAndroid Software Development Kit License Agreementに準拠することに同意したことになります (このようなURL Googleによって随時更新または変更される)。

ファイルをダウンロードするには、利用規約に同意する必要があります。 確認

  • オプションで、Android SDKまたはNDKのバージョンを変更できます。ダウンロードしたDockerファイルを空のフォルダーに入れ、次のコマンドを実行してdockerイメージをビルドします。
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • 現在のフォルダーをコンテナー内の/ tmpにマウントして、Dockerコンテナーを対話的に起動します(/ tensorflow_srcはコンテナー内のTensorFlowリポジトリであることに注意してください)。
docker run -it -v $PWD:/tmp tflite-builder bash

WindowsでPowerShellを使用する場合は、「$ PWD」を「pwd」に置き換えます。

ホストでTensorFlowリポジトリを使用する場合は、代わりにそのホストディレクトリをマウントします(-v hostDir:/ tmp)。

  • コンテナの内部に移動したら、次のコマンドを実行して、追加のAndroidツールとライブラリをダウンロードできます(ライセンスに同意する必要がある場合があります)。
android update sdk --no-ui -a --filter tools,platform-tools,android-${ANDROID_API_LEVEL},build-tools-${ANDROID_BUILD_TOOLS_VERSION}

これで、「ビルドとインストール」セクションに進むことができます。ライブラリの作成が完了したら、それらをコンテナ内の/ tmpにコピーして、ホスト上のライブラリにアクセスできるようにします。

Dockerなしでビルド環境をセットアップする

BazelとAndroidの前提条件をインストールする

BazelはTensorFlowの主要なビルドシステムです。これを使用してビルドするには、システムとAndroid NDKおよびSDKがシステムにインストールされている必要があります。

  1. Bazelビルドシステムの最新バージョンをインストールします。
  2. ネイティブ(C / C ++)TensorFlow Liteコードをビルドするには、Android NDKが必要です。現在推奨されているバージョンは17cで、 こちらで確認できます
  3. Android SDKとビルドツールは、 ここから 、またはAndroid Studioの一部として入手できます。ビルドツールAPI> = 23は、TensorFlow Liteをビルドするための推奨バージョンです。

WORKSPACEおよび.bazelrcを構成する

ルートTensorFlowチェックアウトディレクトリで./configureスクリプトを実行し、スクリプトがAndroidビルドの./WORKSPACEをインタラクティブに構成するように求めてき./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-r17c"
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を構築することに注意してください。それらのすべてが必要ない場合は、デプロイメント環境に適したサブセットを使用してください。

bash tensorflow/lite/tools/build_aar.sh \
  --input_models=model1,model2 \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

上記のスクリプトは、モデルの1つがtensorflow-lite-select-tf-ops.aar opsを使用している場合、 tensorflow-lite.aarファイルと、オプションでtensorflow-lite-select-tf-ops.aarファイルをtensorflow-lite-select-tf-ops.aarます。詳細については、 TensorFlow Liteバイナリサイズの縮小セクションをご覧ください。

AARをプロジェクトに直接追加

tensorflow-lite.aarファイルをプロジェクトのlibsというディレクトリに移動します。アプリのbuild.gradleファイルを変更して新しいディレクトリを参照し、既存のTensorFlow Lite依存関係を新しいローカルライブラリで置き換えます。例:

allprojects {
    repositories {
        jcenter()
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    compile(name:'tensorflow-lite', ext:'aar')
}

ローカルのMavenリポジトリにAARをインストールする

ルートチェックアウトディレクトリから次のコマンドを実行します。

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演算をサポートする依存関係に置き換えます。

allprojects {
    repositories {
        jcenter()
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
}

ここでの0.1.100バージョンは純粋にテスト/開発のためのものであることに注意してください。ローカルAARをインストールすると、アプリコードで標準のTensorFlow Lite Java推論APIを使用できます。