Duke përdorur LiteRT Metadata , zhvilluesit mund të gjenerojnë kodin e mbështjellësit për të mundësuar integrimin në Android. Për shumicën e zhvilluesve, ndërfaqja grafike e Android Studio ML Model Binding është më e lehta për t'u përdorur. Nëse keni nevojë për më shumë personalizim ose jeni duke përdorur veglat e linjës së komandës, LiteRT Codegen është gjithashtu i disponueshëm.
Përdor Android Studio ML Model Binding
Për modelet LiteRT të përmirësuara me metadata , zhvilluesit mund të përdorin Android Studio ML Model Binding për të konfiguruar automatikisht cilësimet për projektin dhe për të gjeneruar klasa mbështjellëse bazuar në meta të dhënat e modelit. Kodi i mbështjellësit heq nevojën për të bashkëvepruar drejtpërdrejt me ByteBuffer
. Në vend të kësaj, zhvilluesit mund të ndërveprojnë me modelin LiteRT me objekte të shtypura si Bitmap
dhe Rect
.
Importoni një model LiteRT në Android Studio
Klikoni me të djathtën në modulin që dëshironi të përdorni modelin TFLite ose klikoni mbi
File
, pastajNew
>Other
>LiteRT Model
Zgjidhni vendndodhjen e skedarit tuaj TFLite. Vini re se vegla do të konfigurojë varësinë e modulit në emrin tuaj me lidhjen e Modelit ML dhe të gjitha varësitë e futura automatikisht në skedarin
build.gradle
të modulit tuaj Android.Opsionale: Zgjidhni kutinë e dytë të zgjedhjes për importimin e TensorFlow GPU nëse dëshironi të përdorni përshpejtimin e GPU.
Klikoni
Finish
.Ekrani i mëposhtëm do të shfaqet pasi importimi të jetë i suksesshëm. Për të filluar përdorimin e modelit, zgjidhni Kotlin ose Java, kopjoni dhe ngjisni kodin nën seksionin
Sample Code
. Mund të ktheheni në këtë ekran duke klikuar dy herë modelin TFLite nën drejtorinëml
në Android Studio.
Përshpejtimi i përfundimit të modelit
Lidhja e modelit ML ofron një mënyrë për zhvilluesit që të përshpejtojnë kodin e tyre përmes përdorimit të delegatëve dhe numrit të thread-ve.
Hapi 1. Kontrolloni skedarin build.gradle
të modulit që ai përmban varësinë e mëposhtme:
dependencies {
...
// TFLite GPU delegate 2.3.0 or above is required.
implementation 'com.google.ai.edge.litert:litert-gpu:2.3.0'
}
Hapi 2. Zbuloni nëse GPU që funksionon në pajisje është e përputhshme me delegatin e GPU-së TensorFlow, nëse nuk ekzekutohet modeli duke përdorur fije të shumta CPU:
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
Gjeneroni ndërfaqe modeli me gjeneratorin e kodit LiteRT
Për modelin LiteRT të përmirësuar me metadata , zhvilluesit mund të përdorin gjeneratorin e kodit të mbështjellësit të LiteRT Android për të krijuar kodin e mbështjellësit specifik të platformës. Kodi i mbështjellësit heq nevojën për të bashkëvepruar drejtpërdrejt me ByteBuffer
. Në vend të kësaj, zhvilluesit mund të ndërveprojnë me modelin TensorFlow Lite me objekte të shtypura si Bitmap
dhe Rect
.
Dobia e gjeneratorit të kodit varet nga plotësia e hyrjes së meta të dhënave të modelit LiteRT. Referojuni seksionit <Codegen usage>
nën fushat përkatëse në metadata_schema.fbs , për të parë se si mjeti i kodegjenit analizon secilën fushë.
Gjeneroni kodin e mbështjellësit
Ju do të duhet të instaloni veglat e mëposhtme në terminalin tuaj:
pip install tflite-support
Pasi të përfundojë, gjeneruesi i kodit mund të përdoret duke përdorur sintaksën e mëposhtme:
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
Kodi që rezulton do të gjendet në drejtorinë e destinacionit. Nëse jeni duke përdorur Google Colab ose një mjedis tjetër të largët, mund të jetë më e lehtë të zipni rezultatin në një arkiv zip dhe ta shkarkoni në projektin tuaj Android Studio:
# 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')
Duke përdorur kodin e krijuar
Hapi 1: Importoni kodin e krijuar
Shpalosni kodin e krijuar nëse është e nevojshme në një strukturë drejtorie. Rrënja e kodit të gjeneruar supozohet të jetë SRC_ROOT
.
Hapni projektin Android Studio ku dëshironi të përdorni modelin LiteRT dhe importoni modulin e gjeneruar nga: Dhe File -> I Ri -> Import Module -> zgjidhni SRC_ROOT
Duke përdorur shembullin e mësipërm, drejtoria dhe moduli i importuar do të quheshin classify_wrapper
.
Hapi 2: Përditësoni skedarin build.gradle
të aplikacionit
Në modulin e aplikacionit që do të konsumojë modulin e krijuar të bibliotekës:
Nën seksionin android, shtoni sa vijon:
aaptOptions {
noCompress "tflite"
}
Nën seksionin e varësive, shtoni sa vijon:
implementation project(":classify_wrapper")
Hapi 3: Përdorimi i modelit
// 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();
}
Përshpejtimi i përfundimit të modelit
Kodi i gjeneruar ofron një mënyrë për zhvilluesit që të përshpejtojnë kodin e tyre përmes përdorimit të delegatëve dhe numrit të temave. Këto mund të vendosen gjatë inicializimit të objektit të modelit pasi kërkon tre parametra:
-
Context
: Konteksti nga Aktiviteti ose Shërbimi i Android - (Opsionale)
Device
: delegat i përshpejtimit TFLite. Për shembull: GPUDelegate - (Opsionale)
numThreads
: Numri i thread-ve të përdorur për të ekzekutuar modelin - e paracaktuar është një.
Për shembull, për të përdorur një delegat GPU dhe deri në tre threads, mund ta inicializoni modelin si kjo:
try {
myImageClassifier = new MyClassifierModel(this, Model.Device.GPU, 3);
} catch (IOException io){
// Error reading the model
}
Zgjidhja e problemeve
Nëse merrni një 'java.io.FileNotFoundException: Ky skedar nuk mund të hapet si përshkrues skedari; ndoshta është gabim i ngjeshur, futni rreshtat e mëposhtëm nën seksionin android të modulit të aplikacionit që do të përdorë modulin e bibliotekës:
aaptOptions {
noCompress "tflite"
}