ממשקי ה-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.
Basic Inference (מעבד)
בהמשך מופיעה הטמעה מרוכזת ופשוטה של הסקת מסקנות באמצעות 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)
Compiled Model API (CompiledModel
) אחראי על טעינת מודל, החלת האצת חומרה, יצירה של מופע של סביבת זמן ריצה, יצירה של מאגרי קלט ופלט והפעלת היסק.
קטע הקוד הפשוט הבא מדגים איך Compiled Model 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()
כדי לקבל תמונה מלאה יותר של אופן ההטמעה של CompiledModel
API, אפשר לעיין בקוד המקור בקובץ Model.kt.
מאגר נתונים זמני של טינסורים (TensorBuffer)
ב-LiteRT Next יש תמיכה מובנית בתאימות הדדית של מאגרי קלט/פלט, באמצעות API של מאגר טינסורים (TensorBuffer
) לטיפול בזרימת הנתונים אל CompiledModel
וממנו. באמצעות Tensor Buffer API אפשר לכתוב (Write<T>()
) ולקרוא (Read<T>()
) מאגרים, וגם לנעול אותם.
כדי לקבל תמונה מלאה יותר של ההטמעה של Tensor Buffer API, אפשר לעיין בקוד המקור ב-TensorBuffer.kt.