Запустите LiteRT Next на Android с помощью Kotlin

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 .