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:
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'
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());
BaseOptions
ile GPU temsilci seçeneğini etkinleştirin:Kotlin
val baseOptions = BaseOptions.builder().useGpu().build()
Java
BaseOptions baseOptions = BaseOptions.builder().useGpu().build();
.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:
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'
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());
InterpreterApi.Options()
addDelegateFactory()
çağırarakDelegateFactory
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:
- Kullanım durumunuzun desteklendiğinden emin olmak için bu sayfanın Sınırlamalar bölümünü inceleyin.
- 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.
- 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. - 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. -
import org.tensorflow.lite.InterpreterApi;
veimport org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime;
org.tensorflow.lite.Interpreter
veyaorg.tensorflow.lite.InterpreterApi
sınıflarını kullanarak herhangi bir kaynak dosyaya. - 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 listesinenew InterpreterApi.Options()
öğesini ekleyin. -
InterpreterApi.create()
çağrılarının son argümanına.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.
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.