Google Play hizmetlerinde TensorFlow Lite'a, Native API'ye ek olarak Java API'leri kullanılarak da erişilebilir. Özellikle Google Play hizmetlerinde TensorFlow Lite, TensorFlow Lite Translateer API aracılığıyla kullanılabilir.
Çevirmen API'lerini kullanma
TensorFlow çalışma zamanı tarafından sağlanan TensorFlow Lite Interpreter API, makine öğrenimi modelleri oluşturmak ve çalıştırmak için genel amaçlı bir arayüz sunar. Google Play Hizmetleri çalışma zamanında TensorFlow Lite'ı kullanarak Translateer API ile çıkarım yapmak için aşağıdaki adımları uygulayın.
1. Proje bağımlılıkları ekleyin
TensorFlow Lite için Play hizmetleri API'sine erişmek üzere uygulama proje kodunuza aşağıdaki bağımlılıkları ekleyin:
dependencies {
...
// Tensorflow Lite dependencies for Google Play services
implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
// Optional: include Tensorflow Lite Support Library
implementation 'com.google.android.gms:play-services-tflite-support:16.0.1'
...
}
2. TensorFlow Lite başlatma işlemi ekleme
Google Play Services API'nin TensorFlow Lite bileşenini, TensorFlow Lite API'lerini kullanmadan önce başlatın:
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 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ü iş parçacığının engellenmesini önlediği için yukarıdaki uygulamayı kullanmanız gerekir. İleti dizisi yürütmeyi daha yakından yönetmeniz gerekirse çevirmen oluşturma işlemine bir Tasks.await()
çağrısı ekleyebilirsiniz:
Kotlin
import androidx.lifecycle.lifecycleScope ... lifecycleScope.launchWhenStarted { // uses coroutine initializeTask.await() }
Java
@BackgroundThread InterpreterApi initializeInterpreter() { Tasks.await(initializeTask); return InterpreterApi.create(...); }
4. Çıkarım yap
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
TensorFlow Lite, grafik işleme birimleri (GPU'lar) gibi özel donanım işlemcileri kullanarak modelinizin performansını hızlandırmanızı sağlar. Yetki verilmiş kullanıcılar adı verilen donanım sürücülerini kullanarak bu özel işlemcilerden yararlanabilirsiniz.
GPU yetkisi, Google Play Hizmetleri aracılığıyla sağlanır ve Translationer API'nin Play Hizmetleri sürümleri gibi dinamik olarak yüklenir.
Cihaz uyumluluğu kontrol ediliyor
Tüm cihazlar TFLite ile GPU donanım hızlandırmayı desteklemez. Hataları ve olası kilitlenmeleri azaltmak amacıyla, bir cihazın GPU yetkilisiyle uyumlu olup olmadığını kontrol etmek için 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'nun desteklenmediği durumlarda yedek olarak CPU'yu kullanın.
useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)
useGpuTask
gibi bir değişkeniniz olduğunda, cihazların GPU yetkilendirmesini kullanıp kullanmadığını belirlemek için bunu 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; });
Çevirmen API'leri olan GPU
GPU yetkisini Çevirmen API'leriyle kullanmak için:
Play hizmetlerindeki GPU temsilcisini 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ştirin:
addDelegateFactory() within
TranslateerApi.Options()` çağrısı 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 TensorFlow Lite'tan taşıma
Uygulamanızı bağımsız TensorFlow Lite'tan Play services API'ye taşımayı planlıyorsanız uygulama proje kodunuzu güncellemek için aşağıdaki ek yönergeleri inceleyin:
- Kullanım alanınızın desteklendiğinden emin olmak için bu sayfanın Sınırlamalar bölümünü inceleyin.
- Özellikle TensorFlow Lite'ın 2.1'den önceki sürümlerini kullanıyorsanız, kodunuzu güncellemeden önce modelleriniz için performans ve doğruluk kontrolleri yapın. Böylece yeni uygulamayla karşılaştırmak için bir temeliniz olur.
- TensorFlow Lite için Play hizmetleri API'sini kullanmak üzere kodunuzun tamamını taşıdıysanız uygulamanızın boyutunu küçültebilmek için mevcut TensorFlow Lite çalışma zamanı kitaplığı bağımlılıklarını (
org.tensorflow:tensorflow-lite:*
ile yapılan girişler) build.gradle dosyanızdan kaldırmanız gerekir. - Kodunuzda
new Interpreter
nesnesi oluşturma işleminin tüm oluşumlarını tanımlayın ve her birini YorumlayıcıApi.create() çağrısını kullanacak şekilde değiştirin. Yeni TfLite.initialize eşzamansız olduğundan çoğu durumda bu, ayrılmaz bir alternatif değildir. Çağrı tamamlandığında bir işleyici kaydetmeniz gerekir. 3. Adım'daki kod snippet'ine bakın. org.tensorflow.lite.Interpreter
veyaorg.tensorflow.lite.InterpreterApi
sınıflarını kullanarak tüm kaynak dosyalaraimport org.tensorflow.lite.InterpreterApi;
veimport org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime;
ekleyin.InterpreterApi.create()
için yapılan çağrıların herhangi birinde yalnızca tek bir bağımsız değişken varsa bağımsız değişken listesinenew InterpreterApi.Options()
ifadesini ekleyin.InterpreterApi.create()
için yapılan çağrıları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ıorg.tensorflow.lite.InterpreterApi
ile değiştirin.
Bağımsız TensorFlow Lite ile Play hizmetleri API'sini yan yana kullanmak istiyorsanız TensorFlow Lite 2.9 (veya üzeri) sürümünü kullanmanız gerekir. TensorFlow Lite 2.8 ve önceki sürümler, Play Services API sürümüyle uyumlu değildir.