باستخدام البيانات الوصفية TensorFlow Lite، يمكن للمطوّرين إنشاء رمز برنامج تضمين لتفعيل عملية الدمج على Android. بالنسبة إلى معظم المطوّرين، تُعدّ الواجهة الرسومية لربط نموذج تعلُّم الآلة في Android Studio هي الأسهل من حيث الاستخدام. إذا كنت بحاجة إلى مزيد من التخصيص أو كنت تستخدم أدوات سطر الأوامر، يتوفر أيضًا TensorFlow Lite Codegen.
استخدام ميزة ربط نموذج تعلُّم الآلة في Android Studio
بالنسبة إلى نماذج TensorFlow Lite المُحسَّنة بالبيانات الوصفية، يمكن لمطوّري البرامج استخدام "ربط نماذج تعلُّم الآلة في استوديو Android" لضبط إعدادات المشروع تلقائيًا وإنشاء فئات برامج تضمين استنادًا إلى البيانات الوصفية للنماذج. يزيل رمز برنامج التضمين الحاجة إلى التفاعل مباشرةً مع
ByteBuffer
. بدلاً من ذلك، يمكن للمطوّرين التفاعل مع نموذج TensorFlow Lite
مع العناصر المكتوبة مثل Bitmap
وRect
.
استيراد نموذج TensorFlow Lite إلى "استوديو Android"
انقر بزر الماوس الأيمن على الوحدة التي تريد استخدام نموذج TFLite أو انقر على
File
ثم علىNew
>Other
>TensorFlow Lite Model
.اختَر موقع ملف TFLite. يُرجى العِلم أنّ هذه الأداة ستضبط تبعية الوحدة نيابةً عنك من خلال ربط نموذج تعلُّم الآلة وكل العناصر التابعة التي يتم إدراجها تلقائيًا في ملف
build.gradle
الخاص بوحدة Android.اختياري: حدِّد مربّع الاختيار الثاني لاستيراد وحدة معالجة الرسومات TensorFlow إذا كنت تريد استخدام تسريع وحدة معالجة الرسومات.
انقر على
Finish
ستظهر الشاشة التالية بعد نجاح عملية الاستيراد. لبدء استخدام النموذج، اختَر Kotlin أو Java، وانسخ الرمز والصقه ضمن القسم
Sample Code
. يمكنك الرجوع إلى هذه الشاشة بالنقر مرّتين على نموذج TFLite ضمن دليلml
في "استوديو Android".
تسريع عملية استنتاج النموذج
توفّر "عملية ربط نموذج تعلُّم الآلة" طريقة للمطوّرين لتسريع الرموز الخاصة بهم من خلال استخدام المفوَّضين وعدد سلاسل المحادثات.
الخطوة 1. تحقق من ملف الوحدة build.gradle
الذي يحتوي على التبعية التالية:
dependencies {
...
// TFLite GPU delegate 2.3.0 or above is required.
implementation 'org.tensorflow:tensorflow-lite-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
أنشِئ واجهات نماذج باستخدام منشئ الرموز TensorFlow Lite.
بالنسبة إلى نموذج TensorFlow Lite المُحسَّن بالبيانات الوصفية،
يمكن للمطوّرين استخدام منشئ رموز برنامج تضمين TensorFlow Lite لنظام التشغيل Android لإنشاء
رمز برنامج تضمين خاص بالنظام الأساسي. يزيل رمز برنامج التضمين الحاجة إلى التفاعل
مباشرة مع ByteBuffer
. بدلاً من ذلك، يمكن للمطوّرين التفاعل مع نموذج TensorFlow
Lite مع الكائنات المكتوبة مثل Bitmap
وRect
.
تعتمد فائدة منشئ الرموز على اكتمال إدخال بيانات التعريف لنموذج
TensorFlow Lite. يُرجى الرجوع إلى القسم <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 أو بيئة بعيدة أخرى، قد يكون من الأسهل ضغط النتيجة في أرشيف ZIP وتنزيله إلى مشروع Android Studio:
# 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 الذي تريد فيه استخدام النموذج البسيط لـ TensorFlow
واستيراد الوحدة التي تم إنشاؤها من خلال: وملف -> جديد -> وحدة الاستيراد ->
اختَر SRC_ROOT
باستخدام المثال أعلاه، سيُطلق على الدليل والوحدة التي تم استيرادها اسم
classify_wrapper
.
الخطوة 2: تعديل ملف "build.gradle
" الخاص بالتطبيق
في وحدة التطبيق التي ستستخدم وحدة المكتبة التي تم إنشاؤها:
ضمن قسم Android، أضِف ما يلي:
aaptOptions {
noCompress "tflite"
}
ضمن قسم التبعيات، أضف ما يلي:
implementation project(":classify_wrapper")
الخطوة الثالثة: استخدام النموذج
// 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- (اختياري)
Device
: تفويض تسريع TFLite. على سبيل المثال: GPUDelegate - (اختياري)
numThreads
: عدد سلاسل المحادثات المستخدَمة لتشغيل النموذج، والعدد التلقائي هو واحد.
على سبيل المثال، لاستخدام تفويض GPU وما يصل إلى ثلاث سلاسل محادثات، يمكنك إعداد النموذج على النحو التالي:
try {
myImageClassifier = new MyClassifierModel(this, Model.Device.GPU, 3);
} catch (IOException io){
// Error reading the model
}
تحديد المشاكل وحلّها
إذا ظهر لك الخطأ "java.io.FileNotFoundException: لا يمكن فتح هذا الملف كواصف للملفات؛ من المحتمل أن يكون الخطأ مضغوطًا"، أدخِل الأسطر التالية أسفل قسم Android في وحدة التطبيق التي ستستخدم وحدة المكتبة:
aaptOptions {
noCompress "tflite"
}