Google Play hizmetlerinde TensorFlow Lite

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

TensorFlow Lite, Play hizmetlerinin mevcut sürümünü çalıştıran tüm Android cihazlar için Google Play hizmetleri çalışma zamanında mevcuttur. Bu çalışma zamanı, TensorFlow Lite kitaplıklarını uygulamanızda statik olarak gruplamadan makine öğrenimi (ML) modellerini çalıştırmanıza olanak tanır.

Google Play hizmetleri API'si ile uygulamalarınızın boyutunu küçültebilir ve kitaplıkların en son kararlı sürümünden daha iyi performans elde edebilirsiniz. Google Play hizmetlerindeki TensorFlow Lite, Android'de TensorFlow Lite'ı kullanmanın önerilen yoludur.

Örnek bir uygulamayı uygulamak için adım adım kılavuz sağlayan Quickstart ile Play hizmetleri çalışma zamanını kullanmaya başlayabilirsiniz. Uygulamanızda zaten bağımsız TensorFlow Lite kullanıyorsanız, Play hizmetleri çalışma zamanını kullanmak üzere mevcut bir uygulamayı güncellemek için Bağımsız TensorFlow Lite'tan Geçiş bölümüne bakın. Google Play hizmetleri hakkında daha fazla bilgi için Google Play hizmetleri web sitesine bakın.

Play hizmetleri çalışma zamanını kullanma

Google Play hizmetlerindeki TensorFlow Lite, TensorFlow Lite Görev API'si ve TensorFlow Lite Yorumlayıcı API'si aracılığıyla kullanılabilir. Görev Kitaplığı, görsel, işitsel ve metin verilerini kullanan yaygın makine öğrenimi görevleri için kullanıma hazır optimize edilmiş model arabirimleri sağlar. TensorFlow çalışma zamanı ve destek kitaplıkları tarafından sağlanan TensorFlow Lite Yorumlayıcı API'si, makine öğrenimi modelleri oluşturmak ve çalıştırmak için daha genel amaçlı bir arabirim sağlar.

Aşağıdaki bölümlerde, Google Play hizmetlerinde Yorumlayıcı ve Görev Kitaplığı API'lerinin nasıl uygulanacağına ilişkin talimatlar sağlanmaktadır. Bir uygulamanın hem Yorumlayıcı API'lerini hem de Görev Kitaplığı API'lerini kullanması mümkün olsa da, çoğu uygulama yalnızca bir API kümesi kullanmalıdır.

Görev Kitaplığı API'lerini Kullanma

TensorFlow Lite Görev API'si, Yorumlayıcı API'sini sarar ve görsel, işitsel ve metin verilerini kullanan yaygın makine öğrenimi görevleri için üst düzey bir programlama arabirimi sağlar. Uygulamanız desteklenen görevlerden birini gerektiriyorsa Task API'yi kullanmalısınız.

1. Proje bağımlılıkları ekleyin

Proje bağımlılığınız, makine öğrenimi kullanım durumunuza bağlıdır. Görev API'leri aşağıdaki kitaplıkları içerir:

  • Vision kitaplığı: org.tensorflow:tensorflow-lite-task-vision-play-services
  • Ses kitaplığı: org.tensorflow:tensorflow-lite-task-audio-play-services
  • Metin kitaplığı: org.tensorflow:tensorflow-lite-task-text-play-services

TensorFlow Lite için Play hizmetleri API'sine erişmek için uygulama proje kodunuza bağımlılıklardan birini ekleyin. Örneğin, bir vizyon görevini uygulamak için aşağıdakileri kullanın:

dependencies {
...
    implementation 'org.tensorflow:tensorflow-lite-task-vision-play-services:0.4.2'
...
}

2. TensorFlow Lite'ın başlatılmasını ekleyin

TensorFlow Lite API'lerini kullanmadan önce Google Play hizmetleri API'sinin TensorFlow Lite bileşenini başlatın. Aşağıdaki örnek, vizyon kitaplığını başlatır:

Kotlin

init {
  TfLiteVision.initialize(context)
    }
  }

3. Çıkarımları çalıştırın

TensorFlow Lite bileşenini başlattıktan sonra, çıkarımlar oluşturmak için detect() yöntemini çağırın. detect() yöntemindeki tam kod, kitaplığa ve kullanım durumuna göre değişir. Aşağıdakiler, TfLiteVision kitaplığı ile basit bir nesne algılama kullanım durumu içindir:

Kotlin

fun detect(...) {
  if (!TfLiteVision.isInitialized()) {
    Log.e(TAG, "detect: TfLiteVision is not initialized yet")
    return
  }

  if (objectDetector == null) {
    setupObjectDetector()
  }

  ...

}

Veri biçimine bağlı olarak, çıkarımlar oluşturmadan önce verilerinizi detect() yöntemi içinde önceden işlemeniz ve dönüştürmeniz de gerekebilir. Örneğin, bir nesne dedektörü için görüntü verileri aşağıdakileri gerektirir:

val imageProcessor = ImageProcessor.Builder().add(Rot90Op(-imageRotation / 90)).build()
val tensorImage = imageProcessor.process(TensorImage.fromBitmap(image))
val results = objectDetector?.detect(tensorImage)

Yorumlayıcı API'lerini Kullanma

Yorumlayıcı API'leri, Görev Kitaplığı API'lerinden daha fazla kontrol ve esneklik sunar. Makine öğrenimi göreviniz Görev kitaplığı tarafından desteklenmiyorsa veya ML modelleri oluşturmak ve çalıştırmak için daha genel amaçlı bir arabirime ihtiyacınız varsa, Yorumlayıcı API'lerini kullanmalısınız.

1. Proje bağımlılıkları ekleyin

TensorFlow Lite için Play hizmetleri API'sine erişmek için 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'ın başlatılmasını ekleyin

TensorFlow Lite API'lerini kullanmadan önce Google Play hizmetleri API'sinin TensorFlow Lite bileşenini başlatın:

Kotlin

val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }

Java

Task<Void> initializeTask = TfLite.initialize(context);

3. Bir Yorumlayıcı oluşturun ve çalışma zamanı seçeneğini ayarlayın

InterpreterApi.create() kullanarak bir yorumlayıcı oluşturun ve aşağıdaki örnek kodda gösterildiği gibi InterpreterApi.Options.setRuntime() çağırarak onu 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ı arabirimi dizisini engellemekten kaçındığı için yukarıdaki uygulamayı kullanmalısınız. İş parçacığı yürütmesini daha yakından yönetmeniz gerekiyorsa, yorumlayıcı oluşturmaya 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ımları çalıştırın

Oluşturduğunuz interpreter nesnesini kullanarak bir çıkarım oluşturmak için run() yöntemini çağırın.

Kotlin

interpreter.run(inputBuffer, outputBuffer)

Java

interpreter.run(inputBuffer, outputBuffer);

Donanım ivmesi

TensorFlow Lite, grafik işleme birimleri (GPU'lar) gibi özel donanım işlemcileri kullanarak modelinizin performansını hızlandırmanıza olanak tanır. Temsilci adı verilen donanım sürücülerini kullanarak bu özel işlemcilerden yararlanabilirsiniz. Google Play hizmetlerinde TensorFlow Lite ile aşağıdaki donanım hızlandırma temsilcilerini kullanabilirsiniz:

  • GPU temsilcisi (önerilir) - Bu temsilci, Google Play hizmetleri aracılığıyla sağlanır ve tıpkı Task API ve Interpreter API'sinin Play hizmetleri sürümleri gibi dinamik olarak yüklenir.

  • NNAPI temsilcisi - Bu temsilci, Android geliştirme projenize dahil edilmiş bir kitaplık bağımlılığı olarak mevcuttur ve uygulamanızda paketlenmiştir.

TensorFlow Lite ile donanım hızlandırma hakkında daha fazla bilgi için TensorFlow Lite Temsilcileri sayfasına bakın.

Cihaz uyumluluğunu kontrol etme

Tüm cihazlar, TFLite ile GPU donanım hızlandırmasını desteklemez. Hataları ve olası çökmeleri azaltmak için, bir cihazın GPU temsilcisiyle uyumlu olup olmadığını kontrol etmek için TfLiteGpu.isGpuDelegateAvailable yöntemini kullanın.

Bir aygıtın GPU ile uyumlu olup olmadığını doğrulamak için bu yöntemi kullanın ve GPU desteklenmediğinde geri dönüş olarak CPU veya NNAPI temsilcisini kullanın.

useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

useGpuTask gibi bir değişkeniniz olduğunda, aygıtların GPU temsilcisini kullanıp kullanmadığını belirlemek için bunu kullanabilirsiniz. Aşağıdaki örnekler, bunun hem Görev Kitaplığı hem de Yorumlayıcı API'leri ile nasıl yapılabileceğini göstermektedir.

Görev API'si ile

Kotlin

lateinit val optionsTask = useGpuTask.continueWith { task ->
  val baseOptionsBuilder = BaseOptions.builder()
  if (task.result) {
    baseOptionsBuilder.useGpu()
  }
 ObjectDetectorOptions.builder()
          .setBaseOptions(baseOptionsBuilder.build())
          .setMaxResults(1)
          .build()
}
    

Java

Task<ObjectDetectorOptions> optionsTask = useGpuTask.continueWith({ task ->
  BaseOptions baseOptionsBuilder = BaseOptions.builder();
  if (task.getResult()) {
    baseOptionsBuilder.useGpu();
  }
  return ObjectDetectorOptions.builder()
          .setBaseOptions(baseOptionsBuilder.build())
          .setMaxResults(1)
          .build()
});
    

Tercüman Api ile

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;
});
    

Görev Kitaplığı API'leri ile GPU

GPU temsilcisini Görev API'leri ile kullanmak için:

  1. Play hizmetlerinden 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'
    
  2. GPU temsilcisini setEnableGpuDelegateSupport ile başlatın. Örneğin, TfLiteVision için GPU temsilcisini aşağıdakilerle başlatabilirsiniz:

    Kotlin

        TfLiteVision.initialize(context, TfLiteInitializationOptions.builder().setEnableGpuDelegateSupport(true).build())
        

    Java

        TfLiteVision.initialize(context, TfLiteInitializationOptions.builder().setEnableGpuDelegateSupport(true).build());
        
  3. BaseOptions ile GPU temsilci seçeneğini etkinleştirin:

    Kotlin

        val baseOptions = BaseOptions.builder().useGpu().build()
        

    Java

        BaseOptions baseOptions = BaseOptions.builder().useGpu().build();
        
  4. .setBaseOptions kullanarak seçenekleri yapılandırın. Örneğin, ObjectDetector GPU'yu aşağıdakilerle ayarlayabilirsiniz:

    Kotlin

        val options =
            ObjectDetectorOptions.builder()
                .setBaseOptions(baseOptions)
                .setMaxResults(1)
                .build()
        

    Java

        ObjectDetectorOptions options =
            ObjectDetectorOptions.builder()
                .setBaseOptions(baseOptions)
                .setMaxResults(1)
                .build();
        

Yorumlayıcı API'leri ile GPU

GPU temsilcisini Yorumlayıcı API'leri ile kullanmak için:

  1. Play hizmetlerinden 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'
    
  2. TFlite başlatmada GPU temsilci seçeneğini etkinleştirin:

    Kotlin

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build())
        

    Java

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build());
        
  3. InterpreterApi.Options() addDelegateFactory() çağırarak DelegateFactory kullanmak için yorumlayıcı seçeneklerinde GPU temsilcisini 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());
        

Tek başına TensorFlow Lite'tan geçiş yapma

Uygulamanızı bağımsız TensorFlow Lite'tan Play hizmetleri API'sine taşımayı planlıyorsanız, uygulama proje kodunuzu güncellemek için aşağıdaki ek kılavuzu inceleyin:

  1. Kullanım durumunuzun desteklendiğinden emin olmak için bu sayfanın Sınırlamalar bölümünü inceleyin.
  2. Kodunuzu güncellemeden önce, özellikle TensorFlow Lite'ın 2.1'den önceki sürümlerini kullanıyorsanız, modelleriniz için performans ve doğruluk kontrolleri yapın, böylece yeni uygulamayla karşılaştırmak için bir temeliniz olur.
  3. Kodunuzun tamamını TensorFlow Lite için Play hizmetleri API'sini kullanmak üzere taşıdıysanız, mevcut TensorFlow Lite çalışma zamanı kitaplığı bağımlılıklarını ( org.tensorflow: tensorflow-lite :* ile girişler) build.gradle dosyanızdan kaldırmalısınız. uygulamanızın boyutunu küçültebilir.
  4. Kodunuzda new Interpreter nesnesi oluşturmanın tüm oluşumlarını tanımlayın ve InterpreterApi.create() çağrısını kullanacak şekilde değiştirin. Bu yeni API zaman uyumsuzdur, yani çoğu durumda bir yedek parça değildir ve çağrı tamamlandığında bir dinleyici kaydetmeniz gerekir. Adım 3 kodundaki kod parçacığına bakın.
  5. import org.tensorflow.lite.InterpreterApi; ve import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; org.tensorflow.lite.Interpreter veya org.tensorflow.lite.InterpreterApi sınıflarını kullanarak herhangi bir kaynak dosyaya.
  6. Sonuç olarak InterpreterApi.create() çağrılarından herhangi birinin yalnızca tek bir bağımsız değişkeni varsa, bağımsız değişken listesine new InterpreterApi.Options() öğesini ekleyin.
  7. InterpreterApi.create() çağrılarının son argümanına .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) ekleyin.
  8. org.tensorflow.lite.Interpreter sınıfının diğer tüm oluşumlarını org.tensorflow.lite.InterpreterApi ile değiştirin.

Tek başına TensorFlow Lite ve Play hizmetleri API'sini yan yana kullanmak istiyorsanız, TensorFlow Lite 2.9 (veya üstü) kullanmanız gerekir. TensorFlow Lite 2.8 ve önceki sürümleri, Play hizmetleri API sürümüyle uyumlu değildir.

sınırlamalar

Google Play hizmetlerindeki TensorFlow Lite aşağıdaki sınırlamalara sahiptir:

  • Donanım hızlandırma temsilcileri için destek, Donanım hızlandırma bölümünde listelenen temsilcilerle sınırlıdır. Başka hızlandırma delegeleri desteklenmez.
  • Yerel API'ler aracılığıyla TensorFlow Lite'a erişim desteklenmez. Google Play hizmetleri aracılığıyla yalnızca TensorFlow Lite Java API'leri kullanılabilir.
  • Özel işlemler de dahil olmak üzere deneysel veya kullanımdan kaldırılmış TensorFlow Lite API'leri desteklenmez.

Destek ve geri bildirim

TensorFlow Sorun İzleyici aracılığıyla geri bildirim sağlayabilir ve destek alabilirsiniz. Lütfen Google Play hizmetlerinde TensorFlow Lite için Sorun şablonunu kullanarak sorunları ve destek isteklerini bildirin.

Kullanım Şartları

TensorFlow Lite'ın Google Play hizmetleri API'lerinde kullanımı, Google API'lerinin Hizmet Şartları'na tabidir.

Gizlilik ve veri toplama

Google Play hizmetleri API'lerinde TensorFlow Lite kullandığınızda, resimler, video, metin gibi giriş verilerinin işlenmesi tamamen cihazda gerçekleşir ve Google Play hizmetleri API'lerinde TensorFlow Lite bu verileri Google sunucularına göndermez. Sonuç olarak, cihazdan çıkmaması gereken verileri işlemek için API'lerimizi kullanabilirsiniz.

Google Play hizmetleri API'lerindeki TensorFlow Lite, hata düzeltmeleri, güncellenmiş modeller ve donanım hızlandırıcı uyumluluk bilgileri gibi şeyler almak için zaman zaman Google sunucularıyla iletişim kurabilir. Google Play hizmetleri API'lerindeki TensorFlow Lite, uygulamanızdaki API'lerin performansı ve kullanımıyla ilgili ölçümleri de Google'a gönderir. Google bu metrik verilerini, performansı ölçmek, hata ayıklamak, API'leri korumak ve iyileştirmek ve Gizlilik Politikamızda daha ayrıntılı olarak açıklandığı gibi kötüye kullanımı veya kötüye kullanımı tespit etmek için kullanır.

Google'ın TensorFlow Lite'ı Google Play hizmetleri API'leri metrik verilerini işlemesi hakkında uygulamanızın kullanıcılarını geçerli yasanın gerektirdiği şekilde bilgilendirmekle sorumlusunuz.

Topladığımız veriler şunları içerir:

  • Cihaz bilgileri (üretici, model, işletim sistemi sürümü ve yapı gibi) ve kullanılabilir ML donanım hızlandırıcıları (GPU ve DSP). Teşhis ve kullanım analitiği için kullanılır.
  • Tanılama ve kullanım analitiği için kullanılan cihaz tanımlayıcısı.
  • Uygulama bilgileri (paket adı, uygulama sürümü). Teşhis ve kullanım analitiği için kullanılır.
  • API yapılandırması (hangi delegelerin kullanıldığı gibi). Teşhis ve kullanım analitiği için kullanılır.
  • Olay türü (tercüman oluşturma, çıkarım gibi). Teşhis ve kullanım analitiği için kullanılır.
  • Hata kodları. Teşhis için kullanılır.
  • Performans metrikleri. Teşhis için kullanılır.

Sonraki adımlar

TensorFlow Lite ile mobil uygulamanızda makine öğrenimini uygulama hakkında daha fazla bilgi için TensorFlow Lite Geliştirici Kılavuzu'na bakın. TensorFlow Hub'da görüntü sınıflandırma, nesne algılama ve diğer uygulamalar için ek TensorFlow Lite modelleri bulabilirsiniz.