TensorFlow Lite, Play hizmetlerinin güncel 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ıza statik olarak paketlemeden makine öğrenimi (ML) modellerini çalıştırmanıza olanak tanır.
Google Play hizmetleri API'sı 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, TensorFlow Lite'ı Android'de kullanmanın önerilen yoludur.
Örnek bir uygulamayı uygulamaya yönelik adım adım kılavuz sağlayan Hızlı Başlangıç ile Play hizmetleri çalışma zamanını kullanmaya başlayabilirsiniz. Uygulamanızda zaten bağımsız TensorFlow Lite kullanıyorsanız, mevcut bir uygulamayı Play hizmetleri çalışma zamanını kullanacak şekilde 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 hizmetlerinde TensorFlow Lite , TensorFlow Lite Görev API'si ve TensorFlow Lite Interpreter API'si aracılığıyla edinilebilir. Görev Kitaplığı, görsel, işitsel ve metin verilerini kullanan yaygın makine öğrenimi görevleri için optimize edilmiş kullanıma hazır model arayüzleri sağlar. TensorFlow çalışma zamanı ve destek kitaplıkları tarafından sağlanan TensorFlow Lite Interpreter API, ML modellerini oluşturmak ve çalıştırmak için daha genel amaçlı bir arayüz sağlar.
Aşağıdaki bölümlerde, Tercüman ve Görev Kitaplığı API'lerinin Google Play hizmetlerinde nasıl uygulanacağına ilişkin talimatlar verilmektedir. 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, Interpreter API'yi sarar ve görsel, işitsel ve metin verilerini kullanan yaygın makine öğrenimi görevleri için üst düzey bir programlama arayüzü sağlar. Uygulamanız desteklenen görevlerden birini gerektiriyorsa Görev API'sini kullanmalısınız.
1. Proje bağımlılıklarını ekleyin
Proje bağımlılığınız makine öğrenimi kullanım senaryonuza bağlıdır. Görev API'leri aşağıdaki kitaplıkları içerir:
- Görüntü 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 bağımlılıklardan birini uygulama proje kodunuza 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ığıyla 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 formatına bağlı olarak, çıkarımlar oluşturmadan önce detect()
yöntemi dahilinde verilerinizi ön işlemeniz ve dönüştürmeniz de gerekebilir. Örneğin, bir nesne dedektörünün 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)
Tercüman API'lerini kullanma
Yorumlayıcı API'leri, Görev Kitaplığı API'lerine göre 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 arayüze ihtiyacınız varsa Yorumlayıcı API'lerini kullanmalısınız.
1. Proje bağımlılıklarını 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'ı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 Tercüman oluşturun ve çalışma zamanı seçeneğini ayarlayın
InterpreterApi.create()
kullanarak bir tercüman oluşturun ve aşağıdaki örnek kodda gösterildiği gibi InterpreterApi.Options.setRuntime()
öğesini çağırarak bunu 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())); });
Yukarıdaki uygulamayı kullanmalısınız çünkü Android kullanıcı arayüzü iş parçacığının engellenmesini önler. İş parçacığı yürütmeyi daha yakından yönetmeniz gerekiyorsa, yorumlayıcı oluşturmaya 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ımları çalıştırın
Oluşturduğunuz interpreter
nesneyi 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şlem birimleri (GPU'lar) gibi özel donanım işlemcilerini kullanarak modelinizin performansını artı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ı Görev API'sinin ve Yorumlayıcı API'sinin Play hizmetleri sürümleri gibi dinamik olarak yüklenir.
NNAPI temsilcisi - Bu temsilci, Android geliştirme projenize dahil edilen bir kitaplık bağımlılığı olarak mevcuttur ve uygulamanızda paketlenir.
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ırmayı desteklemez. Hataları ve olası çökmeleri azaltmak amacıyla 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'nun desteklenmediği durumlarda geri dönüş olarak CPU'yu veya NNAPI temsilcisini kullanın.
useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)
useGpuTask
gibi bir değişkene sahip olduğunuzda, bunu cihazların GPU temsilcisini kullanıp kullanmadığını belirlemek için kullanabilirsiniz. Aşağıdaki örneklerde bunun hem Görev Kitaplığı hem de Yorumlayıcı API'leri ile nasıl yapılabileceği gösterilmektedir.
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'si 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'lerine sahip GPU
GPU temsilcisini Görev API'leriyle 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();
Seçenekleri
.setBaseOptions
kullanarak 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();
Tercüman API'lerine sahip GPU
GPU temsilcisini Yorumlayıcı API'leriyle 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şlatma işleminde 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());
Tercüman seçeneklerinde GPU temsilcisini
InterpreterApi.Options()
içindeaddDelegateFactory()
çağırarakDelegateFactory
kullanacak şekilde 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 geçiş
Uygulamanızı bağımsız TensorFlow Lite'tan Play hizmetleri API'sine taşımayı planlıyorsanız uygulama proje kodunuzu güncellemeye yönelik aşağıdaki ek kılavuzu inceleyin:
- Kullanım senaryonuzun 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 sürüm 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ırabileceğiniz bir temele sahip olursunuz.
- TensorFlow Lite için Play hizmetleri API'sini kullanmak üzere kodunuzun tamamını taşıdıysanız, mevcut TensorFlow Lite çalışma zamanı kitaplığı bağımlılıklarını (
org.tensorflow: tensorflow-lite :*
içeren 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 eşzamansızdır, yani çoğu durumda hemen değiştirilemez ve çağrı tamamlandığında bir dinleyici kaydetmeniz gerekir. 3. Adım kodundaki kod pasajı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çta
InterpreterApi.create()
çağrısından herhangi birinin yalnızca tek bir argümanı varsa, argüman listesinenew InterpreterApi.Options()
ekleyin. -
InterpreterApi.create()
çağrısı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.
Bağımsız TensorFlow Lite ile Play hizmetleri API'sini yan yana kullanmak istiyorsanız TensorFlow Lite 2.9 (veya üzeri) 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 hizmetlerinde TensorFlow Lite'ın aşağıdaki sınırlamaları vardır:
- Donanım hızlandırma temsilcilerine yönelik destek , Donanım hızlandırma bölümünde listelenen temsilcilerle sınırlıdır. Başka hiçbir hızlandırma delegesi desteklenmez.
- TensorFlow Lite'a yerel API'ler aracılığıyla 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 Takibi aracılığıyla geri bildirimde bulunabilir 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 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 bilgileri almak için zaman zaman Google sunucularıyla iletişim kurabilir. Google Play hizmet API'lerindeki TensorFlow Lite, uygulamanızdaki API'lerin performansı ve kullanımına ilişkin ölçümleri de Google'a gönderir. Google, bu metrik verilerini Gizlilik Politikamızda daha ayrıntılı olarak açıklandığı gibi performansı ölçmek, hata ayıklamak, API'lerin bakımını yapmak ve geliştirmek ve kötüye kullanımı veya kötüye kullanımı tespit etmek için kullanır.
Geçerli yasaların gerektirdiği şekilde, Google'ın TensorFlow Lite'ı Google Play hizmetleri API'leri metrik verilerini işlemesi hakkında uygulamanızın kullanıcılarını bilgilendirmek sizin sorumluluğunuzdadır.
Topladığımız veriler aşağıdakileri içerir:
- Cihaz bilgileri (üretici, model, işletim sistemi sürümü ve yapısı gibi) ve mevcut ML donanım hızlandırıcıları (GPU ve DSP). Teşhis ve kullanım analitiği için kullanılır.
- Teşhis ve kullanım analitiği için kullanılan cihaz tanımlayıcı.
- 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ü (yorumlayıcı 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 ölçümleri. Teşhis için kullanılır.
Sonraki adımlar
TensorFlow Lite ile mobil uygulamanızda makine öğrenimini uygulamaya ilişkin 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 modellerini bulabilirsiniz.