Android için TensorFlow Lite'ı oluşturma

Bu belgede, TensorFlow Lite Android kitaplığını kendi kendinize nasıl oluşturacağınız açıklanmaktadır. Normalde, yerel olarak TensorFlow Lite Android kitaplığı oluşturmanız gerekmez.

Gecelik Anlık Görüntüleri Kullan

Gecelik anlık görüntüleri kullanmak için aşağıdaki depoyu kök Gradle derleme yapılandırmanıza ekleyin.

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

build.gradle dosyanızdaki bağımlılıklara gecelik anlık görüntüler ekleyin (veya gerektiği şekilde düzenleyin)

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

TensorFlow Lite'ı yerel olarak oluşturma

Bazı durumlarda, TensorFlow Lite'ın yerel bir derlemesini kullanmak isteyebilirsiniz. Örneğin, TensorFlow'dan seçilen işlemleri içeren bir özel ikili program derliyor veya TensorFlow Lite'ta yerel değişiklikler yapmak isteyebilirsiniz.

Docker kullanarak derleme ortamı oluşturma

  • Docker dosyasını indirin. Docker dosyasını indirerek bu dosyayı kullanımınızın aşağıdaki hizmet şartlarına tabi olduğunu kabul etmiş olursunuz:

Kabul et'i tıklayarak Android Studio ve Android Yerel Geliştirme Kiti'nin tüm kullanımlarının https://developer.android.com/studio/terms adresinde bulunan Android Yazılım Geliştirme Kiti Lisans Sözleşmesi'ne tabi olacağını (bu tür URL'ler Google tarafından zaman zaman güncellenebilir veya değiştirilebilir) kabul etmiş olursunuz.

Dosyayı indirmek için hizmet şartlarını kabul etmeniz gerekir.

  • İsteğe bağlı olarak Android SDK veya NDK sürümünü değiştirebilirsiniz. İndirilen Docker dosyasını boş bir klasöre yerleştirin ve aşağıdaki komutu çalıştırarak docker görüntünüzü oluşturun:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • Mevcut klasörünüzü kapsayıcının içindeki /host_dir öğesine ekleyerek Docker container'ını etkileşimli bir şekilde başlatın (/tensorflow_src yönergesinin container içindeki TensorFlow deposu olduğunu unutmayın):
docker run -it -v $PWD:/host_dir tflite-builder bash

Windows'da PowerShell kullanıyorsanız "$PWD" ifadesini "pwd" ile değiştirin.

Ana makine üzerinde bir TensorFlow deposu kullanmak isterseniz bunun yerine o ana makine dizinini ekleyin (-v sunucuDir:/host_dir).

  • Kapsayıcının içine girdikten sonra, ek Android araçlarını ve kitaplıklarını indirmek için aşağıdakileri çalıştırabilirsiniz (lisansı kabul etmeniz gerekebileceğini unutmayın):
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

Şimdi, derleme ayarlarını yapılandırmak için WORKSPACE ve .bazelrc'i yapılandırma bölümüne geçmelisiniz.

Kitaplıkları oluşturmayı tamamladıktan sonra, ana makinede erişmek için bunları container içindeki /host_dir konumuna kopyalayabilirsiniz.

Docker olmadan derleme ortamı oluşturma

Bazel ve Android Önkoşullarını Yükleme

Bazel, TensorFlow için birincil derleme sistemidir. Uygulamayla derlemek için önce SDK'nın, Android NDK ve SDK'nın sisteminizde yüklü olması gerekir.

  1. Bazel derleme sisteminin en son sürümünü yükleyin.
  2. Yerel (C/C++) TensorFlow Lite kodunu oluşturmak için Android NDK gereklidir. Önerilen mevcut sürüm 25b'dir. Sürüme buradan ulaşabilirsiniz.
  3. Android SDK ve derleme araçları buradan veya alternatif olarak Android Studio'nun bir parçası olarak edinilebilir. Build Tools API >= 23, TensorFlow Lite'ı oluşturmak için önerilen sürümdür.

WORKSPACE ve .bazelrc dosyalarını yapılandırma

Bu, TF Lite kitaplıkları oluşturmak için gerekli olan tek seferlik bir yapılandırma adımıdır. Kök TensorFlow ödeme dizininde ./configure komut dosyasını çalıştırın ve komut dosyası, Android derlemeleri için ./WORKSPACE öğesini etkileşimli olarak yapılandırmak istediğinde "Evet" yanıtını verin. Komut dosyası, aşağıdaki ortam değişkenlerini kullanarak ayarları yapılandırmaya çalışır:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

Bu değişkenler ayarlanmadıysa komut dosyası isteminde etkileşimli olarak sağlanmalıdır. Başarılı yapılandırma, kök klasördeki .tf_configure.bazelrc dosyasında aşağıdakilere benzer girişler sağlamalıdır:

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"

Derleyin ve yükleyin

Bazel düzgün bir şekilde yapılandırıldıktan sonra, TensorFlow Lite AAR'yi kök ödeme dizininden aşağıdaki gibi derleyebilirsiniz:

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

Bu işlem, bazel-bin/tensorflow/lite/java/ içinde bir AAR dosyası oluşturur. Bunun birkaç farklı mimariye sahip "şişman" bir AAR oluşturduğunu unutmayın. Bunların tümüne ihtiyacınız yoksa dağıtım ortamınız için uygun alt kümeyi kullanın.

Aşağıdaki şekilde, yalnızca bir dizi modeli hedefleyen daha küçük AAR dosyaları oluşturabilirsiniz:

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

Yukarıdaki komut dosyası, tensorflow-lite.aar dosyasını ve modellerden biri Tensorflow işlemlerini kullanıyorsa isteğe bağlı olarak tensorflow-lite-select-tf-ops.aar dosyasını oluşturur. Daha fazla bilgi için lütfen TensorFlow Lite ikili program boyutunu küçültme bölümüne bakın.

AAR'yi doğrudan projeye ekleme

tensorflow-lite.aar dosyasını, projenizdeki libs adlı bir dizine taşıyın. Uygulamanızın build.gradle dosyasını yeni dizine referans verecek şekilde ve mevcut TensorFlow Lite bağımlılığını yeni yerel kitaplıkla değiştirin. Örneğin:

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

Yerel Maven deposuna AAR yükleme

Kök ödeme dizininizden aşağıdaki komutu yürütün:

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

Uygulamanızın build.gradle öğesinde mavenLocal() bağımlılığı bulunduğundan emin olun ve standart TensorFlow Lite bağımlılığını, belirli TensorFlow işlemlerini destekleyenle değiştirin:

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

Buradaki 0.1.100 sürümünün yalnızca test/geliştirme amaçlı olduğunu unutmayın. Yerel AAR yüklüyken uygulama kodunuzda standart TensorFlow Lite Java çıkarım API'lerini kullanabilirsiniz.