تتوفّر واجهة برمجة التطبيقات LiteRT Compiled Model في Kotlin، ما يتيح لمطوّري تطبيقات Android الاستفادة من تجربة سلسة تعتمد على أدوات التسريع أولاً، وذلك باستخدام واجهات برمجة تطبيقات عالية المستوى.
للاطّلاع على مثال لتطبيق LiteRT بلغة Kotlin، راجِع العرض التوضيحي لتقسيم الصور باستخدام Kotlin.
البدء
اتّبِع الخطوات التالية لإضافة واجهة برمجة التطبيقات LiteRT Compiled Model API إلى تطبيق Android.
إضافة حزمة Maven
أضِف تبعية LiteRT باستخدام Compiled Model API إلى تطبيقك:
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 المجمَّعة في 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 إمكانية التشغيل التفاعلي المضمّنة لمخزن الإدخال/الإخراج المؤقت، وذلك باستخدام Tensor Buffer API (TensorBuffer) للتعامل مع تدفق البيانات إلى CompiledModel ومنه. توفّر واجهة برمجة التطبيقات Tensor Buffer API إمكانية الكتابة (Write<T>()) والقراءة (Read<T>()) وتأمين المخازن المؤقتة.
للحصول على عرض أكثر اكتمالاً لطريقة تنفيذ Tensor Buffer API، راجِع رمز المصدر في TensorBuffer.kt.