Android için TensorFlow Lite'ı oluşturun

Bu belgede TensorFlow Lite Android kütüphanesini kendi başınıza nasıl oluşturacağınız açıklanmaktadır. Normalde TensorFlow Lite Android kitaplığını yerel olarak oluşturmanıza gerek yoktur. Yalnızca kullanmak istiyorsanız bunları Android projelerinizde nasıl kullanacağınızla ilgili daha fazla ayrıntı için Android hızlı başlangıcına bakın.

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

Gecelik anlık görüntüleri kullanmak için aşağıdaki repo'yu kök Gradle build 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'ınıza bağımlılıklara gecelik anlık görüntüler ekleyin (veya gerektiği gibi 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şturun

Bazı durumlarda TensorFlow Lite'ın yerel yapısını kullanmak isteyebilirsiniz. Örneğin, TensorFlow'dan seçilen işlemleri içeren özel bir ikili dosya oluşturuyor olabilirsiniz veya TensorFlow Lite'ta yerel değişiklikler yapmak isteyebilirsiniz.

Docker'ı kullanarak derleme ortamını ayarlama

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

Kabul etmek için tıklayarak, Android Studio ve Android Yerel Geliştirme Kitinin tüm kullanımının, https://developer.android.com/studio/terms adresinde bulunan Android Yazılım Geliştirme Kiti Lisans Sözleşmesine tabi olacağını kabul etmiş olursunuz (söz konusu URL, Google tarafından zaman zaman güncellenebilir veya değiştirilebilir).

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

  • İsteğe bağlı olarak Android SDK veya NDK sürümünü değiştirebilirsiniz. İndirilen Docker dosyasını boş bir klasöre koyun ve aşağıdakileri çalıştırarak docker görüntünüzü oluşturun:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • Geçerli klasörünüzü konteynerin içindeki /Host_dir dizinine bağlayarak docker konteynerini etkileşimli olarak başlatın (/tensorflow_src'nin konteynerin içindeki TensorFlow deposu olduğunu unutmayın):
docker run -it -v $PWD:/host_dir tflite-builder bash

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

Ana bilgisayarda bir TensorFlow deposu kullanmak istiyorsanız bunun yerine o ana bilgisayar dizinini bağlayın (-v hostDir:/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 yapı ayarlarını yapılandırmak için WORKSPACE ve .bazelrc'yi Yapılandır bölümüne geçmelisiniz.

Kitaplıkları oluşturmayı tamamladıktan sonra bunları kapsayıcının içindeki /host_dir dizinine kopyalayabilir ve böylece ana bilgisayardan bunlara erişebilirsiniz.

Docker olmadan derleme ortamını ayarlama

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

Bazel, TensorFlow'un birincil yapı sistemidir. Bununla derlemek için, sisteminizde yüklü olması ve Android NDK ile SDK'ya sahip olmanız 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. Şu anda önerilen sürüm 25b'dir ve burada bulunabilir.
  3. Android SDK ve derleme araçları buradan veya alternatif olarak Android Studio'nun bir parçası olarak edinilebilir. Derleme araçları API'si >= 23, TensorFlow Lite oluşturmak için önerilen sürümdür.

WORKSPACE ve .bazelrc'yi yapılandırma

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

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

Bu değişkenler ayarlanmamışsa, bunların komut dosyası isteminde etkileşimli olarak sağlanması gerekir. Başarılı yapılandırma, kök klasördeki .tf_configure.bazelrc dosyasında aşağıdakine 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="26"
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"

Oluşturun ve yükleyin

Bazel uygun şekilde yapılandırıldıktan sonra TensorFlow Lite AAR'ı kök ödeme dizininden aşağıdaki gibi oluşturabilirsiniz:

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 bazel-bin/tensorflow/lite/java/ konumunda bir AAR dosyası oluşturacaktır. Bunun birkaç farklı mimariye sahip "şişman" bir AAR oluşturduğunu unutmayın; hepsine ihtiyacınız yoksa dağıtım ortamınıza uygun alt kümeyi kullanın.

Yalnızca bir dizi modeli hedefleyen daha küçük AAR dosyalarını aşağıdaki gibi 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 ops kullanıyorsa isteğe bağlı olarak tensorflow-lite-select-tf-ops.aar dosyasını oluşturacaktır. Daha fazla ayrıntı için lütfen TensorFlow Lite ikili boyutunu azaltın bölümüne bakın.

AAR'ı doğrudan projeye ekleyin

tensorflow-lite.aar dosyasını projenizde libs adlı bir dizine taşıyın. Uygulamanızın build.gradle dosyasını yeni dizine referans verecek şekilde değiştirin 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')
}

AAR'ı yerel Maven deposuna yükleyin

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 dosyasında, mavenLocal() bağımlılığına sahip olduğunuzdan emin olun ve standart TensorFlow Lite bağımlılığını, belirli TensorFlow operasyonlarını destekleyen bağımlılıkla 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 tamamen test/geliştirme amaçlı olduğunu unutmayın. Yerel AAR yüklendiğinde uygulama kodunuzda standart TensorFlow Lite Java çıkarım API'lerini kullanabilirsiniz.