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:
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 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.
- 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 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. - 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()
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 listesinenew InterpreterApi.Options()
ekleyin..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.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ü ile uyumlu değildir.