Za pomocą metadanych LiteRT programiści mogą generować kodu opakowującego, aby włączyć integrację na Androidzie. W przypadku większości programistów interfejs graficzny Android Studio ML Model Binding to jest najłatwiejsza w użyciu. Jeśli potrzebujesz większych możliwości dostosowania lub korzystasz z wiersza poleceń dostępny jest też LiteRT Codegen.
Używanie powiązania modeli ML w Android Studio
W przypadku modeli LiteRT wzbogaconych o metadane
deweloperzy mogą używać powiązania modeli ML w Android Studio do automatycznej konfiguracji
ustawień projektu i generuj klasy kodu na podstawie modelu
metadanych. Kod opakowania eliminuje potrzebę bezpośredniej interakcji z
ByteBuffer Zamiast tego deweloperzy mogą wchodzić w interakcje z modelem LiteRT.
z wpisanymi obiektami, takimi jak Bitmap i Rect.
Importowanie modelu LiteRT w Android Studio
- Kliknij prawym przyciskiem myszy moduł, w którym chcesz używać modelu TFLite, lub kliknij - File, a później- New>- Other>- LiteRT Model
- Wybierz lokalizację pliku TFLite. Pamiętaj, że narzędzia skonfigurować w Twoim imieniu zależność modułu za pomocą powiązania modelu ML oraz wszystkie zależności automatycznie wstawione do modułu Androida - build.gradle.- Opcjonalnie: zaznacz drugie pole wyboru do importowania GPU TensorFlow, jeśli chcą używać akceleracji GPU. 
- Kliknij - Finish.
- Po zakończeniu importowania zostanie wyświetlony następujący ekran. Na początek za pomocą modelu, wybierz Kotlin lub Java, skopiuj i wklej kod pod - Sample Code. Aby wrócić do tego ekranu, kliknij dwukrotnie model TFLite w katalogu- mlw Android Studio.
Przyspieszanie wnioskowania modelu
ML Model Binding umożliwia programistom przyspieszenie tworzenia kodu liczbę przedstawicieli i liczbę wątków.
Krok 1. Sprawdź plik build.gradle modułu, aby upewnić się, że zawiera on następujące elementy
zależność:
    dependencies {
        ...
        // TFLite GPU delegate 2.3.0 or above is required.
        implementation 'com.google.ai.edge.litert:litert-gpu:2.3.0'
    }
Krok 2. Wykrywanie, czy GPU działający na urządzeniu jest zgodny z GPU TensorFlow przekazać dostęp, jeśli model nie zostanie uruchomiony z użyciem wielu wątków procesora:
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
Generuj interfejsy modelu za pomocą generatora kodu LiteRT
W przypadku modelu LiteRT wzbogaconego o metadane
deweloperzy mogą korzystać z generatora kodu opakowań LiteRT na Androida,
kod otokowy platformy. Kod otoki eliminuje potrzebę interakcji
bezpośrednio w ByteBuffer. Deweloperzy mogą natomiast wchodzić w interakcje z TensorFlow,
Model Lite z wpisywanymi obiektami, takimi jak Bitmap i Rect.
Przydatność generatora kodu zależy od kompletności
Wpis metadanych modelu LiteRT. Więcej informacji znajdziesz w sekcji <Codegen usage>
w odpowiednich polach
metadata_schema.fbs,
aby zobaczyć, jak narzędzie Codegen analizuje poszczególne pola.
Wygeneruj kod otoki
Musisz zainstalować w terminalu te narzędzia:
pip install tflite-support
Gdy skończysz, możesz użyć generatora kodu, korzystając z tej składni:
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
Powstały kod będzie się znajdować w katalogu docelowym. Jeśli jesteś przy użyciu Google Colab lub innego pilota najlepiej skompresować wyniki do archiwum ZIP i pobrać do projektu w 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')
Używanie wygenerowanego kodu
Krok 1. Zaimportuj wygenerowany kod
W razie potrzeby rozpakuj wygenerowany kod do struktury katalogu. Pierwiastek
Przyjmuje się, że wygenerowany kod ma postać SRC_ROOT.
Otwórz projekt Android Studio, w którym chcesz używać LiteRT.
model i zaimportuj wygenerowany moduł przez: I plik -> Nowe -> Importuj moduł ->
wybierz SRC_ROOT
W podanym wyżej przykładzie zaimportowany katalog i zaimportowany moduł nazywałyby się
classify_wrapper
Krok 2. Zaktualizuj plik build.gradle aplikacji
W module aplikacji, który będzie korzystać z wygenerowanego modułu biblioteki:
W sekcji dotyczącej Androida dodaj te elementy:
aaptOptions {
   noCompress "tflite"
}
W sekcji zależności dodaj te elementy:
implementation project(":classify_wrapper")
Krok 3. Korzystanie z modelu
// 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();
}
Przyspieszanie wnioskowania modelu
Wygenerowany kod umożliwia programistom przyspieszenie procesu dzięki delegacjom oraz liczbie osób, . Można je ustawić podczas inicjowania obiektu modelu, ponieważ parametry:
- Context: kontekst z aktywności lub usługi na Androidzie
- (Opcjonalnie) Device: przedstawiciel przyspieszenia TFLite. Na przykład: GPUDelegate
- (Opcjonalnie) numThreads: liczba wątków używanych do uruchomienia modelu – domyślnie wynosi 1.
Aby na przykład użyć delegata GPU i maksymalnie 3 wątków, możesz zainicjować w ten sposób:
try {
    myImageClassifier = new MyClassifierModel(this, Model.Device.GPU, 3);
} catch (IOException io){
    // Error reading the model
}
Rozwiązywanie problemów
W przypadku wystąpienia błędu „java.io.FileNotFoundException: tego pliku nie można otworzyć jako deskryptor pliku; prawdopodobnie jest skompresowany”, wstaw następujące wiersze w sekcji dotyczącej Androida, która będzie korzystać z modułu biblioteki:
aaptOptions {
   noCompress "tflite"
}