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.