LiteRT para Android

Las siguientes APIs del entorno de ejecución de LiteRT están disponibles para el desarrollo de Android:

  • API de CompiledModel: Es el estándar moderno para la inferencia de alto rendimiento, que optimiza la aceleración de hardware en CPU, GPU y NPU. Obtén más información sobre por qué elegir la API de CompiledModel.
  • Interpreter API: Es la API de inferencia básica, que se mantiene para la retrocompatibilidad.

Comienza a usar la API de CompiledModel

Versiones y APIs de Android compatibles

Versión de LiteRT Estado API compatible Nivel mínimo del SDK Versión mínima del NDK (si se usa) Fecha de lanzamiento
v2.1.0 ✅ Más reciente CompiledModel
Interpreter(solo CPU)
23 (Android 6, Marshmallow) r26a Aún no se lanzó
v2.0.3 ⚠️ Obsoleto CompiledModel 26 (Android 8 Oreo) r26a 2025-11-08
v1.4.1 ✅ Más reciente Interpreter 21 (Android 5, Lollipop) r26a 2025-11-07
v1.4.0 ⚠️ obsoleto Interpreter 26 (Android 8 Oreo) r26a 25/6/2025
v1.3.0 ⚠️ Obsoleto Interpreter 21 (Android 5, Lollipop) r26a 2025-05-19
v1.2.0 ⚠️ obsoleto Interpreter 21 (Android 5, Lollipop) r26a 2025-03-13

Importante: Mantén tus dependencias actualizadas para garantizar la compatibilidad con las funciones y actualizaciones de seguridad más recientes.

Guía de inicio rápido con la API de CompiledModel

Ejecutar la inferencia con la API de Compiled Model implica los siguientes pasos clave:

  1. Carga un modelo compatible.
  2. Asigna los búferes de tensores de entrada y salida.
  3. Invoca el modelo compilado.
  4. Lee las inferencias en un búfer de salida.

En los siguientes fragmentos de código, se muestra una implementación básica de todo el proceso en Kotlin y 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));