Menjalankan LiteRT Compiled Model API di Android dengan Kotlin

LiteRT Compiled Model API tersedia di Kotlin, yang menawarkan pengalaman yang lancar dan mengutamakan akselerator dengan API tingkat tinggi kepada developer Android.

Untuk contoh aplikasi LiteRT di Kotlin, lihat Demo segmentasi gambar dengan Kotlin.

Mulai

Gunakan langkah-langkah berikut untuk menambahkan LiteRT Compiled Model API ke aplikasi Android Anda.

Menambahkan paket Maven

Tambahkan dependensi LiteRT dengan Compiled Model API ke aplikasi Anda:

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

Membuat Model yang Dikompilasi

Dengan menggunakan API CompiledModel, lakukan inisialisasi runtime dengan model dan pilihan akselerasi hardware Anda:

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

Membuat Buffer Input dan Output

Buat struktur data (buffer) yang diperlukan untuk menyimpan data input yang akan Anda masukkan ke model untuk inferensi, dan data output yang dihasilkan model setelah menjalankan inferensi.

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

Jika Anda menggunakan memori CPU, isi input dengan menulis data langsung ke buffer input pertama.

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

Memanggil model

Dengan menyediakan buffer input dan output, jalankan Model yang Dikompilasi.

model.run(inputBuffers, outputBuffers)

Mengambil Output

Mengambil output dengan membaca output model langsung dari memori.

val outputFloatArray = outputBuffers[0].readFloat()

Konsep dan komponen utama

Lihat bagian berikut untuk mengetahui informasi tentang konsep dan komponen utama LiteRT Kotlin Compiled Model API.

Inferensi Dasar (CPU)

Berikut adalah penerapan inferensi yang disederhanakan dan diringkas dengan 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()

Model yang Dikompilasi (CompiledModel)

Compiled Model API (CompiledModel) bertanggung jawab untuk memuat model, menerapkan akselerasi hardware, membuat instance runtime, membuat buffer input dan output, serta menjalankan inferensi.

Cuplikan kode yang disederhanakan berikut menunjukkan cara Compiled Model API mengambil model LiteRT (.tflite) dan membuat model yang dikompilasi yang siap menjalankan inferensi.

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

Cuplikan kode yang disederhanakan berikut menunjukkan cara API CompiledModel mengambil buffer input dan output, serta menjalankan inferensi dengan model yang dikompilasi.

// 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()

Untuk melihat gambaran yang lebih lengkap tentang cara penerapan API CompiledModel, lihat kode sumber di Model.kt.

Buffer Tensor (TensorBuffer)

LiteRT menyediakan dukungan bawaan untuk interoperabilitas buffer I/O, menggunakan Tensor Buffer API (TensorBuffer) untuk menangani aliran data ke dan dari CompiledModel. Tensor Buffer API memberikan kemampuan untuk menulis (Write<T>()) dan membaca (Read<T>()), serta mengunci buffer.

Untuk melihat gambaran yang lebih lengkap tentang cara penerapan Tensor Buffer API, lihat kode sumber di TensorBuffer.kt.