Google Play hizmetlerinde TensorFlow Lite'a Native API'nin yanı sıra Java API'leri kullanılarak da erişilebilir. Özellikle, Google Play hizmetlerinde TensorFlow Lite , TensorFlow Lite Görev API'si ve TensorFlow Lite Interpreter API 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ı 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, Google Play hizmetlerinde Tercüman ve Görev Kitaplığı API'lerinin TensorFlow Lite ile nasıl kullanılacağı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());
Yorumlayıcı seçeneklerinde GPU temsilcisini etkinleştirin: InterpreterApi.Options()`
addDelegateFactory() within
çağırarak 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 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 her birini InterpreterApi.create() çağrısını kullanacak şekilde değiştirin. Yeni TfLite.initialize eşzamansızdır; bu, çoğu durumda bunun hemen değiştirilemeyeceği anlamına gelir: ç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.