Geliştiriciler, TensorFlow Lite Meta Verilerini kullanarak Android'de entegrasyonu etkinleştirmek için sarmalayıcı kod oluşturabilir. Çoğu geliştirici için, Android Studio ML Model Binding'in grafik arayüzü, kullanımı en kolay olanıdır. Daha fazla özelleştirmeye ihtiyacınız varsa veya komut satırı araçlarını kullanıyorsanız, TensorFlow Lite Codegen de mevcuttur.
Android Studio ML Model Binding'i kullanın
Meta verilerle geliştirilmiş TensorFlow Lite modelleri için geliştiriciler, proje ayarlarını otomatik olarak yapılandırmak ve model meta verilerine dayalı sarmalayıcı sınıfları oluşturmak için Android Studio ML Model Binding'i kullanabilir. Sarıcı kod, doğrudan ByteBuffer
ile etkileşim kurma ihtiyacını ortadan kaldırır. Bunun yerine geliştiriciler, Bitmap
ve Rect
gibi yazılan nesnelerle TensorFlow Lite modeliyle etkileşim kurabilir.
Android Studio'da bir TensorFlow Lite modelini içe aktarın
TFLite modelini kullanmak istediğiniz modüle sağ tıklayın veya
File
, ardındanNew
>Other
>TensorFlow Lite Model
seçeneğine tıklayınTFLite dosyanızın konumunu seçin. Araçların, ML Model bağlama ile modülün bağımlılığını sizin adınıza yapılandıracağını ve tüm bağımlılıkların otomatik olarak Android modülünüzün
build.gradle
dosyasına ekleneceğini unutmayın.İsteğe bağlı: GPU hızlandırmayı kullanmak istiyorsanız TensorFlow GPU'yu içe aktarmak için ikinci onay kutusunu seçin.
Finish
tıklayın.İçe aktarma başarılı olduktan sonra aşağıdaki ekran görünecektir. Modeli kullanmaya başlamak için Kotlin veya Java'yı seçin, kodu kopyalayıp
Sample Code
bölümünün altına yapıştırın. Android Studio'daml
dizini altındaki TFLite modeline çift tıklayarak bu ekrana dönebilirsiniz.
Model çıkarımını hızlandırma
ML Model Binding, geliştiricilerin delege kullanımı ve iş parçacığı sayısı aracılığıyla kodlarını hızlandırmaları için bir yol sağlar.
Adım 1. Modül build.gradle
dosyasının aşağıdaki bağımlılığı içerdiğini kontrol edin:
dependencies {
...
// TFLite GPU delegate 2.3.0 or above is required.
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
}
Adım 2. Modeli birden fazla CPU iş parçacığı kullanarak çalıştırmıyorsa, cihazda çalışan GPU'nun TensorFlow GPU temsilcisiyle uyumlu olup olmadığını tespit edin:
Kotlin
import org.tensorflow.lite.gpu.CompatibilityList import org.tensorflow.lite.gpu.GpuDelegate val compatList = CompatibilityList() val options = if(compatList.isDelegateSupportedOnThisDevice) { // if the device has a supported GPU, add the GPU delegate Model.Options.Builder().setDevice(Model.Device.GPU).build() } else { // if the GPU is not supported, run on 4 threads Model.Options.Builder().setNumThreads(4).build() } // Initialize the model as usual feeding in the options object val myModel = MyModel.newInstance(context, options) // Run inference per sample code
Java
import org.tensorflow.lite.support.model.Model import org.tensorflow.lite.gpu.CompatibilityList; import org.tensorflow.lite.gpu.GpuDelegate; // Initialize interpreter with GPU delegate Model.Options options; CompatibilityList compatList = CompatibilityList(); if(compatList.isDelegateSupportedOnThisDevice()){ // if the device has a supported GPU, add the GPU delegate options = Model.Options.Builder().setDevice(Model.Device.GPU).build(); } else { // if the GPU is not supported, run on 4 threads options = Model.Options.Builder().setNumThreads(4).build(); } MyModel myModel = new MyModel.newInstance(context, options); // Run inference per sample code
TensorFlow Lite kod oluşturucu ile model arayüzleri oluşturun
Meta verilerle geliştirilmiş TensorFlow Lite modeli için geliştiriciler, platforma özel sarmalayıcı kodu oluşturmak için TensorFlow Lite Android sarmalayıcı kodu oluşturucusunu kullanabilir. Sarıcı kod, doğrudan ByteBuffer
ile etkileşim kurma ihtiyacını ortadan kaldırır. Bunun yerine geliştiriciler, Bitmap
ve Rect
gibi yazılan nesnelerle TensorFlow Lite modeliyle etkileşim kurabilir.
Kod oluşturucunun kullanışlılığı, TensorFlow Lite modelinin meta veri girişinin eksiksizliğine bağlıdır. Codegen aracının her alanı nasıl ayrıştırdığını görmek için metadata_schema.fbs içindeki ilgili alanların altındaki <Codegen usage>
bölümüne bakın.
sarmalayıcı Kodu oluştur
Terminalinize aşağıdaki araçları kurmanız gerekecek:
pip install tflite-support
Tamamlandığında, kod oluşturucu aşağıdaki sözdizimi kullanılarak kullanılabilir:
tflite_codegen --model=./model_with_metadata/mobilenet_v1_0.75_160_quantized.tflite \
--package_name=org.tensorflow.lite.classify \
--model_class_name=MyClassifierModel \
--destination=./classify_wrapper
Ortaya çıkan kod, hedef dizinde bulunacaktır. Google Colab veya başka bir uzak ortam kullanıyorsanız, sonucu bir zip arşivinde sıkıştırmak ve Android Studio projenize indirmek daha kolay olabilir:
# Zip up the generated code
!zip -r classify_wrapper.zip classify_wrapper/
# Download the archive
from google.colab import files
files.download('classify_wrapper.zip')
Oluşturulan kodu kullanma
Adım 1: Oluşturulan kodu içe aktarın
Gerekirse oluşturulan kodu bir dizin yapısına açın. Oluşturulan kodun SRC_ROOT
olduğu varsayılır.
TensorFlow lite modelini kullanmak istediğiniz Android Studio projesini açın ve oluşturulan modülü şu şekilde içe aktarın: Ve Dosya -> Yeni -> Modülü İçe Aktar -> SRC_ROOT
seçin
Yukarıdaki örneği kullanarak, içe aktarılan dizin ve modül classify_wrapper
olarak adlandırılır.
2. Adım: Uygulamanın build.gradle
dosyasını güncelleyin
Oluşturulan kitaplık modülünü tüketecek olan uygulama modülünde:
Android bölümünün altına aşağıdakileri ekleyin:
aaptOptions {
noCompress "tflite"
}
Bağımlılıklar bölümünün altına aşağıdakileri ekleyin:
implementation project(":classify_wrapper")
Adım 3: Modeli kullanma
// 1. Initialize the model
MyClassifierModel myImageClassifier = null;
try {
myImageClassifier = new MyClassifierModel(this);
} catch (IOException io){
// Error reading the model
}
if(null != myImageClassifier) {
// 2. Set the input with a Bitmap called inputBitmap
MyClassifierModel.Inputs inputs = myImageClassifier.createInputs();
inputs.loadImage(inputBitmap));
// 3. Run the model
MyClassifierModel.Outputs outputs = myImageClassifier.run(inputs);
// 4. Retrieve the result
Map<String, Float> labeledProbability = outputs.getProbability();
}
Model çıkarımını hızlandırma
Oluşturulan kod, geliştiricilerin delege kullanımı ve iş parçacığı sayısı aracılığıyla kodlarını hızlandırmaları için bir yol sağlar. Bunlar, üç parametre aldığı için model nesnesi başlatılırken ayarlanabilir:
-
Context
: Android Etkinliğinden veya Hizmetinden Bağlam - (İsteğe bağlı)
Device
: GPUDelegate veya NNAPIDelegate gibi TFLite hızlandırma temsilcisi - (İsteğe bağlı)
numThreads
: Modeli çalıştırmak için kullanılan iş parçacığı sayısı - varsayılan birdir.
Örneğin, bir NNAPI temsilcisi ve en fazla üç iş parçacığı kullanmak için modeli şu şekilde başlatabilirsiniz:
try {
myImageClassifier = new MyClassifierModel(this, Model.Device.NNAPI, 3);
} catch (IOException io){
// Error reading the model
}
Sorun giderme
Bir 'java.io.FileNotFoundException: Bu dosya bir dosya tanımlayıcı olarak açılamaz; muhtemelen sıkıştırılmıştır' hatası, kütüphane modülünü kullanacak uygulama modülünün android bölümünün altına aşağıdaki satırları ekleyin:
aaptOptions {
noCompress "tflite"
}