Geliştiriciler, LiteRT Metadata'yı kullanarak Android'de entegrasyonu etkinleştirmek için sarmalayıcı kodu oluşturabilir. Çoğu geliştirici için Android Studio ML Model Binding'in grafik arayüzü en kolay kullanılan arayüzdür. Daha fazla özelleştirmeye ihtiyacınız varsa veya komut satırı araçlarını kullanıyorsanız LiteRT Codegen de kullanılabilir.
Android Studio ML Model Binding'i kullanma
Meta verilerle geliştirilmiş LiteRT modellerinde geliştiriciler, proje ayarlarını otomatik olarak yapılandırmak ve model meta verilerine göre sarmalayıcı sınıflar oluşturmak için Android Studio ML Model Binding'i kullanabilir. Sarmalayıcı kod, ByteBuffer ile doğrudan etkileşim kurma ihtiyacını ortadan kaldırır. Bunun yerine geliştiriciler, Bitmap ve Rect gibi türü belirlenmiş nesnelerle LiteRT modeliyle etkileşimde bulunabilir.
Android Studio'ya LiteRT modeli içe aktarma
TFLite modelini kullanmak istediğiniz modülü sağ tıklayın veya
File, ardındanNew>Other>LiteRT Model'ü tıklayın.TFLite dosyanızın konumunu seçin. Araçların, modülün bağımlılığını sizin adınıza ML Model bağlama ile yapılandıracağını ve tüm bağımlılıkların Android modülünüzün
build.gradledosyasına otomatik olarak 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 işaretleyin.
Finishsimgesini tıklayın.İçe aktarma işlemi başarılı olduktan sonra aşağıdaki ekran görünür. Modeli kullanmaya başlamak için Kotlin veya Java'yı seçin, kodu kopyalayıp
Sample Codebölümünün altına yapıştırın. Android Studio'damldizinindeki TFLite modelini çift tıklayarak bu ekrana geri dönebilirsiniz.
Model çıkarımını hızlandırma
ML Model Binding, temsilciler ve iş parçacığı sayısı kullanılarak geliştiricilerin kodlarını hızlandırmasına olanak tanır.
1. Adım: Modül build.gradle dosyasının aşağıdaki bağımlılığı içerip içermediğini kontrol edin:
dependencies {
...
// For the LiteRT GPU delegate, we need
// 'com.google.ai.edge.litert:litert-gpu' version 1.*.
implementation 'com.google.ai.edge.litert:litert-gpu:1.4.1'
}
2. adım: Cihazda çalışan GPU'nun TensorFlow GPU temsilcisiyle uyumlu olup olmadığını algılayın. Uyumlu değilse modeli birden fazla CPU iş parçacığı kullanarak çalıştırın:
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
LiteRT kod oluşturucu ile model arayüzleri oluşturma
Meta verilerle geliştirilmiş LiteRT modeli için geliştiriciler, platforma özel sarmalayıcı kodu oluşturmak üzere LiteRT Android sarmalayıcı kodu oluşturucuyu kullanabilir. Sarmalayıcı kod, doğrudan ByteBuffer ile etkileşim kurma ihtiyacını ortadan kaldırır. Bunun yerine geliştiriciler, Bitmap ve Rect gibi türü belirtilmiş nesnelerle TensorFlow Lite modeliyle etkileşimde bulunabilir.
Kod oluşturucunun kullanışlılığı, LiteRT modelinin meta veri girişinin eksiksiz olmasına bağlıdır. Kod oluşturma aracının her alanı nasıl ayrıştırdığını görmek için metadata_schema.fbs dosyasındaki ilgili alanlar altındaki <Codegen usage> bölümüne bakın.
Sarmalayıcı kodu oluşturma
Terminalinize aşağıdaki araçları yüklemeniz gerekir:
pip install tflite-support
Tamamlandıktan sonra kod oluşturucu aşağıdaki söz dizimi 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
Elde edilen kod, hedef dizinde yer alır. Google Colab veya başka bir uzak ortam kullanıyorsanız sonucu bir ZIP arşivinde sıkıştırıp Android Studio projenize indirmeniz 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
1. adım: Oluşturulan kodu içe aktarın
Gerekirse oluşturulan kodu bir dizin yapısında açın. Oluşturulan kodun kökünün SRC_ROOT olduğu varsayılır.
LiteRT modelini kullanmak istediğiniz Android Studio projesini açın ve oluşturulan modülü şu şekilde içe aktarın: Dosya -> Yeni -> Modülü İçe Aktar -> SRC_ROOT seçeneğini belirleyin.
Yukarıdaki örnekte, dizin ve içe aktarılan 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ü kullanacak uygulama modülünde:
Android bölümüne aşağıdakileri ekleyin:
aaptOptions {
noCompress "tflite"
}
Bağımlılıklar bölümüne aşağıdakileri ekleyin:
implementation project(":classify_wrapper")
3. adım: 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 yetki verilmiş kullanıcılar ve iş parçacığı sayısı kullanarak kodlarını hızlandırmalarına olanak tanır. Üç parametre aldığından, model nesnesi başlatılırken bunlar ayarlanabilir:
Context: Android Etkinliği veya Hizmeti'nden alınan bağlam- (İsteğe bağlı)
Device: TFLite hızlandırma yetkilisi. Örneğin: GPUDelegate - (İsteğe bağlı)
numThreads: Modeli çalıştırmak için kullanılan iş parçacığı sayısı. Varsayılan değer birdir.
Örneğin, bir GPU temsilcisi ve en fazla üç iş parçacığı kullanmak için modeli şu şekilde başlatabilirsiniz:
try {
myImageClassifier = new MyClassifierModel(this, Model.Device.GPU, 3);
} catch (IOException io){
// Error reading the model
}
Sorun giderme
"java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed" (java.io.FileNotFoundException: Bu dosya, dosya tanımlayıcısı olarak açılamaz; büyük olasılıkla sıkıştırılmıştır) hatası alırsanız kitaplık modülünü kullanacak uygulama modülünün android bölümüne aşağıdaki satırları ekleyin:
aaptOptions {
noCompress "tflite"
}