Google Play Hizmetleri'nde LiteRT Java API'si

Google Play Hizmetleri'ndeki LiteRT'e, Java API'leri kullanılarak da erişilebilir. ve Native API'ye ek olarak. Özellikle, Google Play'deki LiteRT LiteRT Çevirmeni aracılığıyla sunulur API.

Çevirmen API'lerini kullanma

TensorFlow çalışma zamanı tarafından sağlanan LiteRT Consulter API, ML modelleri oluşturmak ve çalıştırmak için genel amaçlı bir arayüz sunar. Şunu kullanın: aşağıdaki adımları izleyerek TensorFlow'u kullanarak Consulter API ile çıkarımlar yapın. Google Play Hizmetleri çalışma zamanında Basit.

1. Proje bağımlılıklarını ekleme

Play'e erişmek için aşağıdaki bağımlılıkları uygulama proje kodunuza ekleyin LiteRT için hizmetler API'si:

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

2. LiteRT'yi başlatma ekle

Google Play Hizmetleri API'sinin LiteRT bileşenini başlatın LiteRT API'lerini kullanmadan önce:

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 InterpreterApi.Options.setRuntime() numaralı telefonu arayarak Google Play hizmetlerinin çalışma zamanı. aşağıdaki örnek kodda gösterildiği gibidir:

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'in engellenmesini önlediği için yukarıdaki uygulamayı kullanmalısınız. kullanıcı arayüzü iş parçacığı. İleti dizisi yürütmesini daha yakından yönetmeniz gerekiyorsa çevirmen oluşturmaya bir Tasks.await() çağrısı ekleyebilir:

Kotlin

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

Java

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

4. Çıkarımları çalıştırma

Oluşturduğunuz interpreter nesnesini kullanarak run() yöntemini çağırarak çıkarım.

Kotlin

interpreter.run(inputBuffer, outputBuffer)

Java

interpreter.run(inputBuffer, outputBuffer);

Donanım hızlandırma

LiteRT, aşağıdakileri kullanarak modelinizin performansını hızlandırmanıza olanak tanır: grafik işlem birimleri (GPU'lar) gibi özel donanım işlemcileri. Siz donanım sürücülerini kullanarak bu özel işlemcilerden yararlanabilir. yetki verilmiş kullanıcı.

GPU temsilcisi, Google Play Hizmetleri üzerinden sağlanır ve Google Play Store'daki Play Hizmetleri sürümlerinde olduğu gibi, Çevirmen API'si.

Cihaz uyumluluğunu kontrol etme

TFLite ile GPU donanım hızlandırması her cihaz tarafından desteklenmez. Bu amaçla hataları ve olası kilitlenmeleri azaltmak için Cihazın şu özelliklere sahip olup olmadığını kontrol etmek için TfLiteGpu.isGpuDelegateAvailable yöntemi: tamamen uyumlu olduğundan emin olun.

Cihazın GPU ile uyumlu olup olmadığını doğrulamak için bu yöntemi kullanın ve CPU'yu kullanın olarak kullanılabilir.

useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

useGpuTask gibi bir değişkeniniz olduğunda, bu değişkeni kullanarak cihazlar arasında GPU yetkilendirmesi kullanılır.

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

Çevirmen API'leriyle GPU yetki verilmişse kullanmak için:

  1. Play Hizmetleri'ndeki GPU yetkilendirmesini 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ştir: yetki verilmiş fabrika ayarını şuna ayarlayın: addDelegateFactory() withinYorumerApi.Options()" çağrısı yaparak GpuDelegateFactory:

    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 LiteRT'den taşıma

Uygulamanızı bağımsız LiteRT'den Play Services API'yi kullanıyorsanız, uygulama projesi kodu:

  1. Bu sayfanın Sınırlamalar bölümünü inceleyerek destekleniyor.
  2. Kodunuzu güncellemeden önce web sitenizin modelleri (özellikle de LiteRT'in daha eski sürümlerini kullanıyorsanız) olduğundan, yeni sürümle karşılaştırabileceğiniz bir temeliniz olur. bazı ipuçları vereceğim.
  3. Kodunuzun tamamını Play Services API'yi kullanmak için taşıdıysanız: LiteRT çalışma zamanını kaldırmanız gerekir. kitaplık bağımlılıkları ( org.tensorflow:tensorflow-lite:*) kaldırın. dosyanızın boyutunu küçültebilirsiniz.
  4. Kodunuzda new Interpreter nesnesi oluşturma işleminin tüm tekrarlarını tanımlayın ve her birini, ConsulterApi.create() çağrısını kullanacak şekilde değiştirin. İlgili içeriği oluşturmak için kullanılan new TfLite.launchize, eşzamansız olduğundan çoğu durumda müşterinin ihtiyaçlarına yanıt veren bir dinleyici kaydetmeniz gerekir. gerekir. 3. adımdaki kod snippet'ine bakın.
  5. Herhangi bir kaynağa import org.tensorflow.lite.InterpreterApi; ve import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; ekleyin org.tensorflow.lite.Interpreter veya org.tensorflow.lite.InterpreterApi sınıf.
  6. InterpreterApi.create() için yapılan çağrılardan herhangi birinde yalnızca bir tek bağımsız değişken için, bağımsız değişken listesine new InterpreterApi.Options() ekleyin.
  7. .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) değişkeninin son bağımsız değişkenine şunu ekle: InterpreterApi.create() numaralı telefona yapılan tüm aramalar.
  8. org.tensorflow.lite.Interpreter sınıfının diğer tüm oluşumlarını değiştir org.tensorflow.lite.InterpreterApi ile.

Bağımsız LiteRT ve Play Hizmetleri API'sini kullanmak istiyorsanız LiteRT 2.9 veya sonraki bir sürümü kullanmanız gerekir. LiteRT 2.8 ve önceki sürümler Play hizmetleri API sürümü ile uyumlu değildir.