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 hizmetlerindeki LiteRT, LiteRT Çevirmen API'si aracılığıyla kullanılabilir.

Çevirmen API'lerini kullanma

TensorFlow çalışma zamanı tarafından sağlanan LiteRT Interpreter API, ML modelleri oluşturmak ve çalıştırmak için genel amaçlı bir arayüz sağlar. Ş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'nin ilk başlatılmasını ekleme

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 kullanıcı arayüzü mesaj dizisinin engellenmesini önlediği için yukarıdaki uygulamayı kullanmanız gerekir. Konuk yürütmeyi daha yakından yönetmeniz gerekiyorsa yorumlayıcı oluşturma işlemine Tasks.await() çağrı ekleyebilirsiniz:

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, grafik işlem birimleri (GPU'lar) gibi özel donanım işlemcileri kullanarak modelinizin performansını hızlandırmanıza olanak tanır. 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.

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

useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

useGpuTask gibi bir değişken oluşturduktan sonra, cihazların GPU temsilcisini kullanıp kullanmadığını belirlemek için bu değişkeni 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;
});
    

Yorumlayıcı API'leri ile 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, özellikle LiteRT'nin 2.1 sürümünden önceki sürümlerini kullanıyorsanız modelleriniz için performans ve doğruluk kontrolleri yapın. Böylece, yeni uygulamayla karşılaştırabileceğiniz bir referans noktanız olur.
  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 örneklerini tanımlayın ve her birini InterpreterApi.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() çağrılarından herhangi biri yalnızca tek bir bağımsız değişkene sahipse new InterpreterApi.Options() bağımsız değişkenini bağımsız değişken listesine ekleyin.
  7. InterpreterApi.create() çağrılarını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ı 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üyle uyumlu değildir.