API-интерфейсы LiteRT Next доступны в Kotlin, что обеспечивает разработчикам Android бесперебойную разработку с доступом к API высокого уровня.
Пример приложения LiteRT Next на Kotlin см. в демонстрации сегментации изображений с помощью Kotlin .
Начать
Чтобы добавить LiteRT Next в ваше приложение Android, выполните следующие действия.
Добавить пакет Maven
Добавьте зависимость LiteRT Next к вашему приложению:
dependencies {
...
implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}
Создать скомпилированную модель
Используя API CompiledModel
, инициализируйте среду выполнения с помощью модели и выбранного вами аппаратного ускорения:
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite",
CompiledModel.Options(Accelerator.CPU),
env,
)
Создание входных и выходных буферов
Создайте необходимые структуры данных (буферы) для хранения входных данных, которые вы будете передавать в модель для вывода, и выходных данных, которые модель выдает после выполнения вывода.
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
Если вы используете память ЦП, заполните входы, записав данные непосредственно в первый входной буфер.
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
Вызов модели
Предоставив входные и выходные буферы, запустите скомпилированную модель.
model.run(inputBuffers, outputBuffers)
Получить выходы
Извлекайте выходные данные, напрямую считывая выходные данные модели из памяти.
val outputFloatArray = outputBuffers[0].readFloat()
Ключевые концепции и компоненты
Информацию о ключевых концепциях и компонентах API LiteRT Next Kotlin можно найти в следующих разделах.
Базовый вывод (ЦП)
Ниже представлена сжатая, упрощенная реализация вывода с помощью LiteRT Next.
// 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()
Скомпилированная модель (CompiledModel)
API скомпилированной модели ( CompiledModel
) отвечает за загрузку модели, применение аппаратного ускорения, создание среды выполнения, создание входных и выходных буферов и выполнение вывода.
Следующий упрощенный фрагмент кода демонстрирует, как API скомпилированной модели берет модель LiteRT ( .tflite
) и создает скомпилированную модель, готовую к выполнению вывода.
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
Следующий упрощенный фрагмент кода демонстрирует, как API CompiledModel
принимает входной и выходной буферы и выполняет выводы с использованием скомпилированной модели.
// 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()
Более полное представление о том, как реализован API CompiledModel
, см. в исходном коде на Model.kt .
Тензорный буфер (TensorBuffer)
LiteRT Next предоставляет встроенную поддержку взаимодействия буферов ввода-вывода, используя Tensor Buffer API ( TensorBuffer
) для обработки потока данных в CompiledModel
и из него. Tensor Buffer API предоставляет возможность записи ( Write<T>()
) и чтения ( Read<T>()
), а также блокировки буферов.
Более полное представление о реализации API Tensor Buffer можно найти в исходном коде на TensorBuffer.kt .