LiteRT na Androida

W przypadku programowania na Androida dostępne są te interfejsy LiteRT Runtime API:

  • CompiledModel API: nowoczesny standard wnioskowania o wysokiej wydajności, który usprawnia przyspieszenie sprzętowe na procesorach CPU, GPU i NPU. Dowiedz się więcej o przyczynach wyboru interfejsu CompiledModel API.
  • Interpreter API: podstawowy interfejs API wnioskowania, utrzymywany ze względu na zgodność wsteczną.

Pierwsze kroki z interfejsem CompiledModel API

Obsługiwane wersje Androida i interfejsy API

Wersja LiteRT Stan Obsługiwany interfejs API Minimalny poziom SDK Minimalna wersja NDK (jeśli jest używana) Data wydania
v2.1.0 ✅ Najnowsza CompiledModel
Interpreter(tylko CPU)
23 (Android 6 Marshmallow) r26a Jeszcze nie wydano
v2.0.3 ⚠️ Przestarzałe CompiledModel 26 (Android 8 Oreo) r26a 8.11.2025 r.
v1.4.1 ✅ Najnowsza Interpreter 21 (Android 5 Lollipop) r26a 2025-11-07
v1.4.0 ⚠️ nieaktualne Interpreter 26 (Android 8 Oreo) r26a 25.06.2025 r.
v1.3.0 ⚠️ nieaktualne Interpreter 21 (Android 5 Lollipop) r26a 19.05.2025 r.
v1.2.0 ⚠️ nieaktualne Interpreter 21 (Android 5 Lollipop) r26a 13.03.2025 r.

Ważne: dbaj o aktualność zależności, aby zapewnić zgodność z najnowszymi funkcjami i aktualizacjami zabezpieczeń.

Krótkie wprowadzenie do interfejsu CompiledModel API

Przeprowadzanie wnioskowania za pomocą interfejsu Compiled Model API obejmuje te kluczowe kroki:

  1. Wczytaj zgodny model.
  2. Przydziel bufory tensorów wejściowych i wyjściowych.
  3. Wywołaj skompilowany model.
  4. Odczytaj wnioski do bufora wyjściowego.

Poniższe fragmenty kodu pokazują podstawową implementację całego procesu w językach Kotlin i C++.

Kotlin

// Load model and initialize runtime
val compiledModel = CompiledModel.create(
    "/path/to/mymodel.tflite",
    CompiledModel.Options(Accelerator.CPU))

// Preallocate input/output buffers
val inputBuffers = compiledModel.createInputBuffers()
val outputBuffers = compiledModel.createOutputBuffers()

// Fill the input buffer
inputBuffers.get(0).writeFloat(input0)
inputBuffers.get(1).writeFloat(input1)

// Invoke
compiledModel.run(inputBuffers, outputBuffers)

// Read the output
val output = outputBuffers.get(0).readFloat()

C++

// Load model and initialize runtime
LITERT_ASSIGN_OR_RETURN(auto env, GetEnvironment());
LITERT_ASSIGN_OR_RETURN(auto options, GetOptions());
LITERT_ASSIGN_OR_RETURN(
    auto compiled_model,
    CompiledModel::Create(env, "/path/to/mymodel.tflite", options));

// Preallocate input/output buffers
LITERT_ASSIGN_OR_RETURN(auto input_buffers,compiled_model.CreateInputBuffers(signature_index));
LITERT_ASSIGN_OR_RETURN(auto output_buffers,compiled_model.CreateOutputBuffers(signature_index));

// Fill the input buffer
LITERT_ABORT_IF_ERROR(input_buffers[0].Write(input0));
LITERT_ABORT_IF_ERROR(input_buffers[1].Write(input1));

// Invoke
LITERT_ABORT_IF_ERROR(compiled_model.Run(signature_index, input_buffers, output_buffers));

// Read the output
LITERT_ABORT_IF_ERROR(output_buffers[0].Read(output0));