Google Play hizmetleri için TensorFlow Lite Java API'si

Google Play hizmetlerinde TensorFlow Lite'a, Native API'ye ek olarak Java API'leri kullanılarak da erişilebilir. Özellikle Google Play hizmetlerinde TensorFlow Lite, TensorFlow Lite Translateer API aracılığıyla kullanılabilir.

Çevirmen API'lerini kullanma

TensorFlow çalışma zamanı tarafından sağlanan TensorFlow Lite Interpreter API, makine öğrenimi modelleri oluşturmak ve çalıştırmak için genel amaçlı bir arayüz sunar. Google Play Hizmetleri çalışma zamanında TensorFlow Lite'ı kullanarak Translateer API ile çıkarım yapmak için aşağıdaki adımları uygulayın.

1. Proje bağımlılıkları ekleyin

TensorFlow Lite için Play hizmetleri API'sine erişmek üzere uygulama proje kodunuza aşağıdaki bağımlılıkları ekleyin:

dependencies {
...
    // Tensorflow Lite dependencies for Google Play services
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
    // Optional: include Tensorflow Lite Support Library
    implementation 'com.google.android.gms:play-services-tflite-support:16.0.1'
...
}

2. TensorFlow Lite başlatma işlemi ekleme

Google Play Services API'nin TensorFlow Lite bileşenini, TensorFlow Lite API'lerini kullanmadan önce başlatın:

Kotlin

val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }

Java

Task<Void> initializeTask = TfLite.initialize(context);

3. Çevirmen oluşturma ve çalışma zamanı seçeneğini ayarlama

InterpreterApi.create() kullanarak bir çevirmen oluşturun ve aşağıdaki örnek kodda gösterildiği gibi InterpreterApi.Options.setRuntime() yöntemini çağırarak Google Play Hizmetleri çalışma zamanını kullanacak şekilde yapılandırın:

Kotlin

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private lateinit var interpreter: InterpreterApi
...
initializeTask.addOnSuccessListener {
  val interpreterOption =
    InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  interpreter = InterpreterApi.create(
    modelBuffer,
    interpreterOption
  )}
  .addOnFailureListener { e ->
    Log.e("Interpreter", "Cannot initialize interpreter", e)
  }

Java

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private InterpreterApi interpreter;
...
initializeTask.addOnSuccessListener(a -> {
    interpreter = InterpreterApi.create(modelBuffer,
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY));
  })
  .addOnFailureListener(e -> {
    Log.e("Interpreter", String.format("Cannot initialize interpreter: %s",
          e.getMessage()));
  });

Android kullanıcı arayüzü iş parçacığının engellenmesini önlediği için yukarıdaki uygulamayı kullanmanız gerekir. İleti dizisi yürütmeyi daha yakından yönetmeniz gerekirse çevirmen oluşturma işlemine bir Tasks.await() çağrısı ekleyebilirsiniz:

Kotlin

import androidx.lifecycle.lifecycleScope
...
lifecycleScope.launchWhenStarted { // uses coroutine
  initializeTask.await()
}

Java

@BackgroundThread
InterpreterApi initializeInterpreter() {
    Tasks.await(initializeTask);
    return InterpreterApi.create(...);
}

4. Çıkarım yap

Oluşturduğunuz interpreter nesnesini kullanarak çıkarım oluşturmak için run() yöntemini çağırın.

Kotlin

interpreter.run(inputBuffer, outputBuffer)

Java

interpreter.run(inputBuffer, outputBuffer);

Donanım hızlandırma

TensorFlow Lite, grafik işleme birimleri (GPU'lar) gibi özel donanım işlemcileri kullanarak modelinizin performansını hızlandırmanızı sağlar. Yetki verilmiş kullanıcılar adı verilen donanım sürücülerini kullanarak bu özel işlemcilerden yararlanabilirsiniz.

GPU yetkisi, Google Play Hizmetleri aracılığıyla sağlanır ve Translationer API'nin Play Hizmetleri sürümleri gibi dinamik olarak yüklenir.

Cihaz uyumluluğu kontrol ediliyor

Tüm cihazlar TFLite ile GPU donanım hızlandırmayı desteklemez. Hataları ve olası kilitlenmeleri azaltmak amacıyla, bir cihazın GPU yetkilisiyle uyumlu olup olmadığını kontrol etmek için TfLiteGpu.isGpuDelegateAvailable yöntemini kullanın.

Bir cihazın GPU ile uyumlu olup olmadığını onaylamak için bu yöntemi kullanın ve GPU'nun desteklenmediği durumlarda yedek olarak CPU'yu kullanın.

useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

useGpuTask gibi bir değişkeniniz olduğunda, cihazların GPU yetkilendirmesini kullanıp kullanmadığını belirlemek için bunu kullanabilirsiniz.

Kotlin

val interpreterTask = useGpuTask.continueWith { task ->
  val interpreterOptions = InterpreterApi.Options()
      .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  if (task.result) {
      interpreterOptions.addDelegateFactory(GpuDelegateFactory())
  }
  InterpreterApi.create(FileUtil.loadMappedFile(context, MODEL_PATH), interpreterOptions)
}
    

Java

Task<InterpreterApi.Options> interpreterOptionsTask = useGpuTask.continueWith({ task ->
  InterpreterApi.Options options =
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY);
  if (task.getResult()) {
     options.addDelegateFactory(new GpuDelegateFactory());
  }
  return options;
});
    

Çevirmen API'leri olan GPU

GPU yetkisini Çevirmen API'leriyle kullanmak için:

  1. Play hizmetlerindeki GPU temsilcisini kullanmak için proje bağımlılıklarını güncelleyin:

    implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
    
  2. TFlite başlatmada GPU yetkilendirme seçeneğini etkinleştirin:

    Kotlin

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build())
        

    Java

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build());
        
  3. Çevirmen seçeneklerinde GPU yetkilendirmesini etkinleştirin: addDelegateFactory() withinTranslateerApi.Options()` çağrısı yaparak temsilci fabrikasını GpuDelegateFactory olarak ayarlayın:

    Kotlin

    val interpreterOption = InterpreterApi.Options()
    .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
    .addDelegateFactory(GpuDelegateFactory())
    

    Java

    Options interpreterOption = InterpreterApi.Options()
    .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(new
    GpuDelegateFactory());
    

Bağımsız TensorFlow Lite'tan taşıma

Uygulamanızı bağımsız TensorFlow Lite'tan Play services API'ye taşımayı planlıyorsanız uygulama proje kodunuzu güncellemek için aşağıdaki ek yönergeleri inceleyin:

  1. Kullanım alanınızın desteklendiğinden emin olmak için bu sayfanın Sınırlamalar bölümünü inceleyin.
  2. Özellikle TensorFlow Lite'ın 2.1'den önceki sürümlerini kullanıyorsanız, kodunuzu güncellemeden önce modelleriniz için performans ve doğruluk kontrolleri yapın. Böylece yeni uygulamayla karşılaştırmak için bir temeliniz olur.
  3. TensorFlow Lite için Play hizmetleri API'sini kullanmak üzere kodunuzun tamamını taşıdıysanız uygulamanızın boyutunu küçültebilmek için mevcut TensorFlow Lite çalışma zamanı kitaplığı bağımlılıklarını (org.tensorflow:tensorflow-lite:* ile yapılan girişler) build.gradle dosyanızdan kaldırmanız gerekir.
  4. Kodunuzda new Interpreter nesnesi oluşturma işleminin tüm oluşumlarını tanımlayın ve her birini YorumlayıcıApi.create() çağrısını kullanacak şekilde değiştirin. Yeni TfLite.initialize eşzamansız olduğundan çoğu durumda bu, ayrılmaz bir alternatif değildir. Çağrı tamamlandığında bir işleyici kaydetmeniz gerekir. 3. Adım'daki kod snippet'ine bakın.
  5. org.tensorflow.lite.Interpreter veya org.tensorflow.lite.InterpreterApi sınıflarını kullanarak tüm kaynak dosyalara import org.tensorflow.lite.InterpreterApi; ve import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; ekleyin.
  6. InterpreterApi.create() için yapılan çağrıların herhangi birinde yalnızca tek bir bağımsız değişken varsa bağımsız değişken listesine new InterpreterApi.Options() ifadesini ekleyin.
  7. InterpreterApi.create() için yapılan çağrıların son bağımsız değişkenine .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) ekleyin.
  8. org.tensorflow.lite.Interpreter sınıfının diğer tüm oluşumlarını org.tensorflow.lite.InterpreterApi ile değiştirin.

Bağımsız TensorFlow Lite ile Play hizmetleri API'sini yan yana kullanmak istiyorsanız TensorFlow Lite 2.9 (veya üzeri) sürümünü kullanmanız gerekir. TensorFlow Lite 2.8 ve önceki sürümler, Play Services API sürümüyle uyumlu değildir.