Các API LiteRT Next có sẵn trong Kotlin, mang đến cho nhà phát triển Android một trải nghiệm phát triển liền mạch với quyền truy cập vào các API cấp cao.
Để biết ví dụ về ứng dụng LiteRT Next trong Kotlin, hãy xem phần Phân đoạn hình ảnh bằng bản minh hoạ Kotlin.
Bắt đầu
Hãy làm theo các bước sau để thêm LiteRT Next vào ứng dụng Android.
Thêm gói Maven
Thêm phần phụ thuộc LiteRT Next vào ứng dụng:
dependencies {
...
implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}
Tạo mô hình đã biên dịch
Sử dụng API CompiledModel
, hãy khởi chạy thời gian chạy bằng một mô hình và lựa chọn tăng tốc phần cứng:
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite",
CompiledModel.Options(Accelerator.CPU),
env,
)
Tạo vùng đệm đầu vào và đầu ra
Tạo các cấu trúc dữ liệu cần thiết (vùng đệm) để lưu trữ dữ liệu đầu vào mà bạn sẽ đưa vào mô hình để dự đoán và dữ liệu đầu ra mà mô hình tạo ra sau khi chạy quy trình dự đoán.
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
Nếu bạn đang sử dụng bộ nhớ CPU, hãy điền dữ liệu đầu vào bằng cách ghi dữ liệu trực tiếp vào vùng đệm đầu vào đầu tiên.
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
Gọi mô hình
Cung cấp vùng đệm đầu vào và đầu ra, chạy Mô hình đã biên dịch.
model.run(inputBuffers, outputBuffers)
Truy xuất đầu ra
Truy xuất đầu ra bằng cách trực tiếp đọc đầu ra của mô hình từ bộ nhớ.
val outputFloatArray = outputBuffers[0].readFloat()
Các khái niệm và thành phần chính
Hãy tham khảo các phần sau để biết thông tin về các khái niệm và thành phần chính của API Kotlin LiteRT Next.
Suy luận cơ bản (CPU)
Sau đây là cách triển khai quy trình suy luận ngắn gọn, đơn giản bằng 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()
Mô hình được biên dịch (CompiledModel)
API mô hình đã biên dịch (CompiledModel
) chịu trách nhiệm tải mô hình, áp dụng tính năng tăng tốc phần cứng, tạo bản sao thời gian chạy, tạo bộ đệm đầu vào và đầu ra, cũng như chạy quy trình suy luận.
Đoạn mã đơn giản sau đây minh hoạ cách API mô hình đã biên dịch lấy một mô hình LiteRT (.tflite
) và tạo một mô hình đã biên dịch sẵn sàng chạy suy luận.
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
Đoạn mã đơn giản sau đây minh hoạ cách API CompiledModel
lấy một vùng đệm đầu vào và đầu ra, đồng thời chạy các suy luận bằng mô hình đã biên dịch.
// 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()
Để xem toàn diện hơn về cách triển khai API CompiledModel
, hãy xem mã nguồn tại Model.kt.
Vùng đệm tensor (TensorBuffer)
LiteRT Next tích hợp sẵn tính năng hỗ trợ khả năng tương tác của vùng đệm I/O, sử dụng API Vùng đệm tensor (TensorBuffer
) để xử lý luồng dữ liệu vào và ra khỏi CompiledModel
. Tensor Buffer API cung cấp khả năng ghi (Write<T>()
) và đọc (Read<T>()
) cũng như khoá vùng đệm.
Để biết thông tin đầy đủ hơn về cách triển khai Tensor Buffer API, hãy xem mã nguồn tại TensorBuffer.kt.