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:
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'
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());
Çevirmen seçeneklerinde GPU yetkilendirmesini etkinleştir: yetki verilmiş fabrika ayarını şuna ayarlayın:
addDelegateFactory() within
YorumerApi.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:
- Bu sayfanın Sınırlamalar bölümünü inceleyerek destekleniyor.
- 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.
- 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. - 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. - Herhangi bir kaynağa
import org.tensorflow.lite.InterpreterApi;
veimport org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime;
ekleyinorg.tensorflow.lite.Interpreter
veyaorg.tensorflow.lite.InterpreterApi
sınıf. InterpreterApi.create()
çağrılarından 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 oluşumlarını değiştirorg.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.