Google Play Hizmetleri'ndeki LiteRT'ye, yerel API'ye ek olarak Java veya Kotlin kodundan kullanılabilen Java API'leri kullanılarak da erişilebilir. Özellikle, Google Play hizmetlerindeki LiteRT özelliği LiteRT Translateer API üzerinden 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. Google Play Hizmetleri çalışma zamanında TensorFlow Lite'i kullanarak Interpreter API ile çıkarım çalıştırmak için aşağıdaki adımları uygulayın.
1. Proje bağımlılıklarını ekleme
LiteRT için Play Hizmetleri API'sine erişmek üzere uygulama projenizin koduna aşağıdaki bağımlılıkları ekleyin:
dependencies {
...
// LiteRT dependencies for Google Play services
implementation 'com.google.android.gms:play-services-tflite-java:16.1.0'
// Optional: include LiteRT Support Library
implementation 'com.google.android.gms:play-services-tflite-support:16.1.0'
...
}
2. LiteRT'nin ilk başlatılmasını ekleme
LiteRT API'lerini kullanmadan önce Google Play Hizmetleri API'sinin LiteRT bileşenini başlatın:
Kotlin
val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }
Java
Task<Void> initializeTask = TfLite.initialize(context);
3. Yorumlayıcı 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ü 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 yapma
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
LiteRT, grafik işlem birimleri (GPU'lar) gibi özel donanım işlemcileri kullanarak modelinizin performansını hızlandırmanıza olanak tanır. Temsilciler adlı donanım sürücülerini kullanarak bu özel işlemcilerden yararlanabilirsiniz.
GPU temsilcisi, Google Play Hizmetleri aracılığıyla sağlanır ve tıpkı Interpreter API'nin Play Hizmetleri sürümleri gibi dinamik olarak yüklenir.
Cihaz uyumluluğunu kontrol etme
Bazı cihazlar TFLite ile GPU donanım hızlandırmayı desteklemez. Hataları ve olası kilitlenmeleri azaltmak için bir cihazın GPU temsilcisiyle uyumlu olup olmadığını kontrol etmek üzere 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 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:
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.2.0'
TFlite başlatma işleminde GPU temsilcisi seçeneğini etkinleştirin:
Kotlin
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build())
Java
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build());
Yorumlayıcı seçeneklerinde GPU temsilcisini etkinleştirin:
addDelegateFactory() within
InterpreterApi.Options()` çağrısını 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 LiteRT'ten taşıma
Uygulamanızı bağımsız LiteRT'den Play Services API'ye taşımayı planlıyorsanız uygulama proje kodunuzu güncellemek için aşağıdaki ek rehberleri inceleyin:
- Kullanım alanınızın desteklendiğinden emin olmak için bu sayfanın Sınırlılıklar bölümünü inceleyin.
- Kodunuzu güncellemeden önce, özellikle LiteRT'nin (TF Lite) 2.1 sürümünden önceki sürümlerini kullanıyorsanız modelleriniz için performans ve doğruluk kontrolleri yapmanızı öneririz. Böylece, yeni uygulamayla karşılaştırmak için bir referans noktanız olur.
- LiteRT için Play Services API'yi kullanmak üzere kodunuzun tamamını taşıdıysanız build.gradle dosyanızdan mevcut LiteRT çalışma zamanı kitaplığı bağımlılıklarını (
org.tensorflow:tensorflow-lite:*
içeren girişler) kaldırmanız gerekir. Böylece uygulamanızın boyutunu küçültebilirsiniz. - Kodunuzda
new Interpreter
nesnesi oluşturma işleminin tüm tekrarlarını tanımlayın ve her birini,InterpreterApi.create()
çağrısını kullanacak şekilde değiştirin. YeniTfLite.initialize
asynkrondur. Diğer bir deyişle, çoğu durumda doğrudan değiştirilemez: Arama tamamlandığında bir dinleyici kaydetmeniz gerekir. 3. Adım kodundaki kod snippet'ine bakın. org.tensorflow.lite.Interpreter
veyaorg.tensorflow.lite.InterpreterApi
sınıflarını kullanarak herhangi bir kaynak dosyayaimport org.tensorflow.lite.InterpreterApi;
veimport org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime;
ekleyin.InterpreterApi.create()
işlevine yapılan çağrılardan herhangi biri yalnızca tek bir bağımsız değişkene sahipsenew InterpreterApi.Options()
bağımsız değişkenini bağımsız değişken listesine ekleyin.InterpreterApi.create()
çağrılarının son bağımsız değişkenine.setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
ekleyin.org.tensorflow.lite.Interpreter
sınıfının diğer tüm örnekleriniorg.tensorflow.lite.InterpreterApi
ile değiştirin.
Bağımsız LiteRT ve Play Hizmetleri API'yi birlikte kullanmak istiyorsanız LiteRT (TF Lite) 2.9 veya sonraki bir sürümü kullanmanız gerekir. LiteRT (TF Lite) 2.8 ve önceki sürümler Play Services API sürümüyle uyumlu değildir.