باستخدام البيانات الوصفية في LiteRT، يمكن للمطوّرين إنشاء رمز برنامج تضمين لإتاحة الدمج على Android. بالنسبة لمعظم المطورين، الواجهة الرسومية لميزة ربط نموذج تعلُّم الآلة على Android Studio هي أسهل في الاستخدام. إذا كنت بحاجة إلى مزيد من التخصيص أو كنت تستخدم سطر الأوامر الأدوات، يتوفر أيضًا LiteRT Codegen.
استخدام ربط نماذج تعلُّم الآلة في "استوديو Android"
بالنسبة إلى نماذج LiteRT المحسّنة باستخدام البيانات الوصفية،
يمكن للمطوّرين استخدام ميزة "ربط نماذج تعلُّم الآلة" في "استوديو Android" لضبط إعدادات
المشروع وإنشاء فئات برامج تضمين بناءً على النموذج
بيانات التعريف. يلغي رمز التضمين الحاجة إلى التفاعل مباشرةً مع
ByteBuffer
بدلاً من ذلك، يمكن للمطورين التفاعل مع نموذج LiteRT
مع الكائنات المكتوبة مثل Bitmap
وRect
.
استيراد نموذج LiteRT في "استوديو Android"
انقر بزر الماوس الأيمن على الوحدة التي تريدها لاستخدام نموذج TFLite أو انقر على
File
، ثمNew
>Other
LiteRT Model
اختَر موقع ملف TFLite. لاحظ أن الأدوات يمكنك ضبط تبعية الوحدة نيابةً عنك من خلال ربط نموذج تعلُّم الآلة يتم إدراج جميع التبعيات تلقائيًا في وحدة Android ملف
build.gradle
.اختياري: ضَع علامة في مربّع الاختيار الثاني لاستيراد وحدة معالجة الرسومات TensorFlow إذا لم تريد استخدام تسريع وحدة معالجة الرسومات.
انقر على
Finish
.ستظهر الشاشة التالية بعد إتمام عملية الاستيراد بنجاح. للبدء باستخدام النموذج، حدد Kotlin أو Java، وانسخ التعليمة البرمجية والصقها ضمن قسم "
Sample Code
". يمكنك العودة إلى هذه الشاشة عن طريق النقر مرّتين نموذج TFLite ضمن دليلml
في "استوديو Android".
تسريع الاستنتاج النموذجي
يوفّر ربط نموذج تعلُّم الآلة طريقة للمطوّرين لتسريع استخدام الرمز البرمجي استخدام المفوَّضين وعدد سلاسل المحادثات.
الخطوة 1: تحقَّق من ملف الوحدة build.gradle
الذي يحتوي على ما يلي.
التبعية:
dependencies {
...
// TFLite GPU delegate 2.3.0 or above is required.
implementation 'com.google.ai.edge.litert:litert-gpu:2.3.0'
}
الخطوة 2: اكتشاف ما إذا كانت وحدة معالجة الرسومات التي تعمل على الجهاز متوافقة مع وحدة معالجة الرسومات TensorFlow تفويض، إذا لم يتم تشغيل النموذج باستخدام سلاسل متعددة لوحدة المعالجة المركزية (CPU):
Kotlin
import org.tensorflow.lite.gpu.CompatibilityList import org.tensorflow.lite.gpu.GpuDelegate val compatList = CompatibilityList() val options = if(compatList.isDelegateSupportedOnThisDevice) { // if the device has a supported GPU, add the GPU delegate Model.Options.Builder().setDevice(Model.Device.GPU).build() } else { // if the GPU is not supported, run on 4 threads Model.Options.Builder().setNumThreads(4).build() } // Initialize the model as usual feeding in the options object val myModel = MyModel.newInstance(context, options) // Run inference per sample code
Java
import org.tensorflow.lite.support.model.Model import org.tensorflow.lite.gpu.CompatibilityList; import org.tensorflow.lite.gpu.GpuDelegate; // Initialize interpreter with GPU delegate Model.Options options; CompatibilityList compatList = CompatibilityList(); if(compatList.isDelegateSupportedOnThisDevice()){ // if the device has a supported GPU, add the GPU delegate options = Model.Options.Builder().setDevice(Model.Device.GPU).build(); } else { // if the GPU is not supported, run on 4 threads options = Model.Options.Builder().setNumThreads(4).build(); } MyModel myModel = new MyModel.newInstance(context, options); // Run inference per sample code
إنشاء واجهات نماذج باستخدام أداة إنشاء رموز LiteRT
بالنسبة إلى نموذج LiteRT المحسَّن باستخدام البيانات الوصفية،
ويمكن للمطوّرين استخدام أداة إنشاء رمز برنامج تضمين LiteRT في Android لإنشاء
رمز برنامج تضمين خاص بالنظام الأساسي. يلغي رمز التضمين الحاجة إلى التفاعل
مباشرةً مع "ByteBuffer
" بدلاً من ذلك، يمكن للمطوّرين التفاعل مع TensorFlow
هذا هو النموذج البسيط الذي يتضمّن عناصر مكتوبة، مثل Bitmap
وRect
.
تعتمد فائدة منشئ الرمز على اكتمال
إدخال البيانات الوصفية لنموذج LiteRT. يُرجى مراجعة القسم "<Codegen usage>
".
ضمن الحقول ذات الصلة في
metadata_schema.fbs،
لترى كيف تقوم أداة إنشاء التعليمات البرمجية بتحليل كل حقل.
إنشاء رمز برنامج تضمين
ستحتاج إلى تثبيت الأدوات التالية في الوحدة الطرفية:
pip install tflite-support
بمجرد الانتهاء، يمكن استخدام منشئ التعليمات البرمجية باستخدام بناء الجملة التالي:
tflite_codegen --model=./model_with_metadata/mobilenet_v1_0.75_160_quantized.tflite \
--package_name=org.tensorflow.lite.classify \
--model_class_name=MyClassifierModel \
--destination=./classify_wrapper
سيتم وضع الرمز الناتج في دليل الوجهة. إذا كنت باستخدام Google Colab أو خدمة أخرى عن بُعد ربما يكون من الأسهل ضغط النتيجة في أرشيف مضغوط وتنزيل إلى مشروعك على "استوديو Android":
# Zip up the generated code
!zip -r classify_wrapper.zip classify_wrapper/
# Download the archive
from google.colab import files
files.download('classify_wrapper.zip')
باستخدام الرمز الذي تم إنشاؤه
الخطوة 1: استيراد الرمز الذي تم إنشاؤه
احرص على فك ضغط الرمز الذي تم إنشاؤه إذا لزم الأمر في بنية دليل. جذور
يُفترض أن يكون الرمز الذي تم إنشاؤه هو SRC_ROOT
.
افتح مشروع "استوديو Android" الذي تريد استخدام LiteRT فيه.
وقم باستيراد الوحدة التي تم إنشاؤها عن طريق: وملف -> جديد -> استيراد الوحدة ->
اختيار SRC_ROOT
باستخدام المثال أعلاه، سيتم استدعاء الدليل والوحدة التي تم استيرادها
classify_wrapper
الخطوة 2: تعديل ملف build.gradle
للتطبيق
في وحدة التطبيق التي ستستهلك وحدة المكتبة التي تم إنشاؤها:
ضمن قسم Android، أضِف ما يلي:
aaptOptions {
noCompress "tflite"
}
ضمن قسم التبعيات، أضف ما يلي:
implementation project(":classify_wrapper")
الخطوة 3: استخدام النموذج
// 1. Initialize the model
MyClassifierModel myImageClassifier = null;
try {
myImageClassifier = new MyClassifierModel(this);
} catch (IOException io){
// Error reading the model
}
if(null != myImageClassifier) {
// 2. Set the input with a Bitmap called inputBitmap
MyClassifierModel.Inputs inputs = myImageClassifier.createInputs();
inputs.loadImage(inputBitmap));
// 3. Run the model
MyClassifierModel.Outputs outputs = myImageClassifier.run(inputs);
// 4. Retrieve the result
Map<String, Float> labeledProbability = outputs.getProbability();
}
تسريع الاستنتاج النموذجي
توفّر التعليمة البرمجية التي تم إنشاؤها طريقة للمطورين لتسريع الترميز الخاص بهم. من خلال استخدام المفوَّضين وعدد سلاسل المحادثات. يمكن تعيين هذه العوامل عند تهيئة كائن النموذج حيث يستغرق الأمر ثلاثة المَعلمات:
Context
: سياق من "النشاط على Android" أو "الخدمة" على Android- (اختياري)
Device
: تفويض تسريع TFLite. مثل: GPUDelegate - (اختياري)
numThreads
: عدد سلاسل المحادثات المستخدَمة لتنفيذ النموذج الافتراضي هو واحد.
على سبيل المثال، لاستخدام تفويض وحدة معالجة الرسومات وما يصل إلى ثلاث سلاسل محادثات، يمكنك تهيئة النموذج على النحو التالي:
try {
myImageClassifier = new MyClassifierModel(this, Model.Device.GPU, 3);
} catch (IOException io){
// Error reading the model
}
تحديد المشاكل وحلّها
إذا حصلت على الرمز 'java.io.FileNotFoundException: لا يمكن فتح هذا الملف كملف واصف الملف فمن المحتمل أن يكون مضغوطًا" يُرجى إدراج السطور التالية ضمن قسم android في وحدة التطبيق التي ستستخدم وحدة المكتبة:
aaptOptions {
noCompress "tflite"
}