تتوفّر واجهات برمجة التطبيقات LiteRT Next في Kotlin، ما يقدّم لمطوّري تطبيقات Android تجربة تطوير سلسة من خلال الوصول إلى واجهات برمجة تطبيقات عالية المستوى.
للحصول على مثال على تطبيق LiteRT Next في Kotlin، اطّلِع على التجربة المتوفّرة في Kotlin لتحليل الصور.
البدء
اتّبِع الخطوات التالية لإضافة LiteRT Next إلى تطبيق Android.
إضافة حزمة Maven
أضِف التبعية LiteRT Next إلى تطبيقك:
dependencies {
...
implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}
إنشاء النموذج المجمَّع
باستخدام واجهة برمجة التطبيقات 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()
المفاهيم والمكونات الرئيسية
راجِع الأقسام التالية للحصول على معلومات عن المفاهيم والمكونات الرئيسية لواجهات برمجة تطبيقات LiteRT Next Kotlin.
الاستنتاج الأساسي (وحدة المعالجة المركزية)
في ما يلي عملية تنفيذ مكثّفة ومبسّطة للاستنتاج باستخدام 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"
)
يوضّح مقتطف الرمز البرمجي المبسّط التالي كيفية حصول واجهة برمجة التطبيقات 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
، اطّلِع على
الرمز المصدر على
Model.kt.
ذاكرة تخزين المتجهات (TensorBuffer)
توفّر LiteRT Next إمكانات مدمجة للتشغيل التفاعلي بين مخزن الدخل/الخرج، وذلك باستخدام واجهة برمجة التطبيقات
Tensor Buffer API (TensorBuffer
) لمعالجة تدفق البيانات إلى
CompiledModel
ومنه. توفّر Tensor Buffer API إمكانية الكتابة
(Write<T>()
) والقراءة (Read<T>()
) وتأمين المخازن المؤقتة.
للحصول على نظرة أكثر اكتمالاً على كيفية تنفيذ Tensor Buffer API، اطّلِع على رمز المصدر في TensorBuffer.kt.