Bangun TensorFlow Lite untuk Android

Dokumen ini menjelaskan cara membuat pustaka Android TensorFlow Lite sendiri. Biasanya, Anda tidak perlu membuat pustaka Android TensorFlow Lite secara lokal. Jika Anda hanya ingin menggunakannya, lihat mulai cepat Android untuk detail lebih lanjut tentang cara menggunakannya dalam proyek Android Anda.

Gunakan Snapshot Malam Hari

Untuk menggunakan snapshot malam, tambahkan repo berikut ke konfigurasi root Gradle build Anda.

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'
        }
    }
}

tambahkan snapshot malam ke dependensi (atau edit sesuai kebutuhan) ke build.gradle Anda

...
dependencies {
    ...
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
    implementation 'org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly-SNAPSHOT'
    implementation 'org.tensorflow:tensorflow-lite-support:0.0.0-nightly-SNAPSHOT'
    ...
}
...

Bangun TensorFlow Lite secara lokal

Dalam beberapa kasus, Anda mungkin ingin menggunakan TensorFlow Lite versi lokal. Misalnya, Anda mungkin membuat biner khusus yang menyertakan operasi yang dipilih dari TensorFlow , atau Anda mungkin ingin membuat perubahan lokal pada TensorFlow Lite.

Siapkan lingkungan build menggunakan Docker

  • Unduh file Docker. Dengan mengunduh file Docker, Anda setuju bahwa ketentuan layanan berikut mengatur penggunaan Anda terhadapnya:

Dengan mengklik untuk menerima, Anda dengan ini setuju bahwa semua penggunaan Android Studio dan Android Native Development Kit akan diatur oleh Perjanjian Lisensi Kit Pengembangan Perangkat Lunak Android yang tersedia di https://developer.android.com/studio/terms (URL tersebut mungkin diperbarui atau diubah oleh Google dari waktu ke waktu).

Anda harus menyetujui persyaratan layanan untuk mengunduh file.

  • Anda juga dapat mengubah versi Android SDK atau NDK. Letakkan file Docker yang diunduh ke dalam folder kosong dan buat image buruh pelabuhan Anda dengan menjalankan:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • Mulai container buruh pelabuhan secara interaktif dengan memasang folder Anda saat ini ke /host_dir di dalam container (perhatikan bahwa /tensorflow_src adalah repositori TensorFlow di dalam container):
docker run -it -v $PWD:/host_dir tflite-builder bash

Jika Anda menggunakan PowerShell di Windows, ganti "$PWD" dengan "pwd".

Jika Anda ingin menggunakan repositori TensorFlow di host, pasang direktori host tersebut (-v hostDir:/host_dir).

  • Setelah berada di dalam container, Anda dapat menjalankan perintah berikut untuk mendownload alat dan pustaka Android tambahan (perhatikan bahwa Anda mungkin harus menerima lisensinya):
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

Sekarang Anda harus melanjutkan ke bagian Konfigurasi WORKSPACE dan .bazelrc untuk mengonfigurasi pengaturan build.

Setelah Anda selesai membangun perpustakaan, Anda dapat menyalinnya ke /host_dir di dalam wadah sehingga Anda dapat mengaksesnya di host.

Siapkan lingkungan build tanpa Docker

Instal Prasyarat Bazel dan Android

Bazel adalah sistem build utama untuk TensorFlow. Untuk membangunnya, Anda harus memilikinya dan Android NDK serta SDK terinstal di sistem Anda.

  1. Instal versi terbaru sistem build Bazel .
  2. Android NDK diperlukan untuk membuat kode TensorFlow Lite asli (C/C++). Versi yang direkomendasikan saat ini adalah 25b, yang dapat ditemukan di sini .
  3. SDK Android dan alat pembangunan dapat diperoleh di sini , atau sebagai bagian dari Android Studio . API alat build >= 23 adalah versi yang direkomendasikan untuk membuat TensorFlow Lite.

Konfigurasikan WORKSPACE dan .bazelrc

Ini adalah langkah konfigurasi satu kali yang diperlukan untuk membangun perpustakaan TF Lite. Jalankan skrip ./configure di direktori checkout root TensorFlow, dan jawab "Ya" saat skrip meminta untuk mengonfigurasi ./WORKSPACE untuk build Android secara interaktif. Skrip akan mencoba mengonfigurasi pengaturan menggunakan variabel lingkungan berikut:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

Jika variabel ini tidak disetel, variabel tersebut harus disediakan secara interaktif di prompt skrip. Konfigurasi yang berhasil akan menghasilkan entri yang mirip dengan berikut ini di file .tf_configure.bazelrc di folder akar:

build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r25b"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="30.0.3"
build --action_env ANDROID_SDK_API_LEVEL="30"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"

Bangun dan pasang

Setelah Bazel dikonfigurasi dengan benar, Anda dapat membuat TensorFlow Lite AAR dari direktori root checkout sebagai berikut:

bazel build -c opt --cxxopt=--std=c++17 --config=android_arm64 \
  --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
  --define=android_dexmerger_tool=d8_dexmerger \
  --define=android_incremental_dexing_tool=d8_dexbuilder \
  //tensorflow/lite/java:tensorflow-lite

Ini akan menghasilkan file AAR di bazel-bin/tensorflow/lite/java/ . Perhatikan bahwa ini membangun AAR "gemuk" dengan beberapa arsitektur berbeda; jika Anda tidak memerlukan semuanya, gunakan subset yang sesuai untuk lingkungan penerapan Anda.

Anda dapat membuat file AAR yang lebih kecil yang hanya menargetkan sekumpulan model sebagai berikut:

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

Skrip di atas akan menghasilkan file tensorflow-lite.aar dan secara opsional file tensorflow-lite-select-tf-ops.aar jika salah satu model menggunakan operasi Tensorflow. Untuk lebih jelasnya, silakan lihat bagian Mengurangi ukuran biner TensorFlow Lite .

Tambahkan AAR langsung ke proyek

Pindahkan file tensorflow-lite.aar ke direktori bernama libs di proyek Anda. Ubah file build.gradle aplikasi Anda untuk mereferensikan direktori baru dan ganti dependensi TensorFlow Lite yang ada dengan perpustakaan lokal baru, misalnya:

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')
}

Instal AAR ke repositori Maven lokal

Jalankan perintah berikut dari direktori root checkout Anda:

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

Di build.gradle aplikasi Anda, pastikan Anda memiliki dependensi mavenLocal() dan ganti dependensi TensorFlow Lite standar dengan dependensi yang mendukung operasi TensorFlow tertentu:

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'
}

Perhatikan bahwa versi 0.1.100 di sini murni untuk kepentingan pengujian/pengembangan. Dengan AAR lokal terinstal, Anda dapat menggunakan API inferensi Java TensorFlow Lite standar dalam kode aplikasi Anda.