Uruchamianie LiteRT Next na Androidzie za pomocą Kotlina

Interfejsy LiteRT Next są dostępne w Kotlinie, co zapewnia deweloperom Androida płynne środowisko programistyczne z dostępem do interfejsów API wysokiego poziomu.

Przykład aplikacji LiteRT Next w Kotlinie znajdziesz w demonstracji podziału obrazu za pomocą Kotlina.

Rozpocznij

Aby dodać LiteRT Next do aplikacji na Androida, wykonaj te czynności.

Dodawanie pakietu Maven

Dodaj do aplikacji zależność LiteRT Next:

dependencies {
  ...
  implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}

Tworzenie skompilowanego modelu

Za pomocą interfejsu API CompiledModel zainicjuj środowisko uruchomieniowe z modelem i wybranym przez Ciebie przyspieszeniem sprzętowym:

val  model =
  CompiledModel.create(
    context.assets,
    "mymodel.tflite",
    CompiledModel.Options(Accelerator.CPU),
    env,
  )

Tworzenie buforów wejściowych i wyjściowych

Utwórz niezbędne struktury danych (bufory) do przechowywania danych wejściowych, które będą podawane do modelu na potrzeby wnioskowania, oraz danych wyjściowych, które model wygeneruje po przeprowadzeniu wnioskowania.

val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()

Jeśli używasz pamięci procesora, wypełnij dane, zapisując je bezpośrednio w pierwszym buforze danych wejściowych.

inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })

Wywoływanie modelu

Przekazując bufory wejściowe i wyjściowe, uruchom skompilowany model.

model.run(inputBuffers, outputBuffers)

Pobieranie danych wyjściowych

Pobieranie danych wyjściowych przez bezpośrednie odczytanie danych wyjściowych modelu z pamięci.

val outputFloatArray = outputBuffers[0].readFloat()

Kluczowe pojęcia i komponenty

W następnych sekcjach znajdziesz informacje o kluczowych pojęciach i komponentach interfejsów API LiteRT Next w języku Kotlin.

Podstawowe wnioskowanie (CPU)

Poniżej przedstawiamy skróconą, uproszczoną implementację wnioskowania z LiteRTNext.

// Load model and initialize runtime
val  model =
    CompiledModel.create(
        context.assets,
        "mymodel.tflite"
    )

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

// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })

// Invoke
model.run(inputBuffers, outputBuffers)

// Read the output
val outputFloatArray = outputBuffers[0].readFloat()

// Clean up buffers and model
inputBuffers.forEach { it.close() }
outputBuffers.forEach { it.close() }
model.close()

Kompilowany model (CompiledModel)

Interfejs skompilowanego modelu (CompiledModel) odpowiada za wczytywanie modelu, stosowanie przyspieszenia sprzętowego, tworzenie instancji środowiska uruchomieniowego, tworzenie buforów wejściowych i wyjściowych oraz wykonywanie wnioskowania.

Ten uproszczony fragment kodu pokazuje, jak interfejs skompilowanego modelu API pobiera model LiteRT (.tflite) i tworzy skompilowany model, który jest gotowy do wykonywania wnioskowania.

val  model =
  CompiledModel.create(
    context.assets,
    "mymodel.tflite"
  )

Ten uproszczony fragment kodu pokazuje, jak interfejs API CompiledModel pobiera dane wejściowe i bufor wyjściowy oraz wykonuje wnioskowanie z wykorzystaniem skompilowanego modelu.

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

// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
// Invoke
model.run(inputBuffers, outputBuffers)
// Read the output
val outputFloatArray = outputBuffers[0].readFloat()

// Clean up buffers and model
inputBuffers.forEach { it.close() }
outputBuffers.forEach { it.close() }
model.close()

Aby uzyskać pełny obraz implementacji interfejsu API CompiledModel, zapoznaj się z kodem źródłowym w pliku Model.kt.

Tensor Buffer (TensorBuffer)

LiteRT Next zapewnia wbudowaną obsługę interoperacyjności bufora wejścia/wyjścia za pomocą interfejsu Tensor Buffer API (TensorBuffer) do obsługi przepływu danych do i z CompiledModel. Interfejs Tensor Buffer API umożliwia zapisywanie danych (Write<T>()) i ich odczyt (Read<T>()) oraz blokowanie buforów.

Aby uzyskać pełny obraz implementacji interfejsu Tensor Buffer API, zapoznaj się z kodem źródłowym w pliku TensorBuffer.kt.