Menjalankan LiteRT Next di Android dengan Kotlin

LiteRT Next API tersedia di Kotlin, yang menawarkan pengalaman pengembangan yang lancar kepada developer Android dengan akses ke API tingkat tinggi.

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

Mulai

Gunakan langkah-langkah berikut untuk menambahkan LiteRT Next ke aplikasi Android Anda.

Menambahkan paket Maven

Tambahkan dependensi LiteRT Next ke aplikasi Anda:

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

Membuat Model yang Dikompilasi

Dengan menggunakan CompiledModel API, 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 dalam 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

Menyediakan buffering input dan output, jalankan Model yang Dikompilasi.

model.run(inputBuffers, outputBuffers)

Mengambil Output

Ambil output dengan membaca output model secara langsung dari memori.

val outputFloatArray = outputBuffers[0].readFloat()

Konsep dan komponen utama

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

Inferensi Dasar (CPU)

Berikut adalah implementasi inferensi yang ringkas dan disederhanakan 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 buffering input dan output, serta menjalankan inferensi.

Cuplikan kode sederhana 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 sederhana berikut menunjukkan cara CompiledModel API 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 cara penerapan CompiledModel API secara lebih lengkap, lihat kode sumber di Model.kt.

Buffer Tensor (TensorBuffer)

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

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