باستخدام TensorFlow Lite Metadata ، يمكن للمطورين إنشاء رمز مجمّع لتمكين التكامل على Android. بالنسبة لمعظم المطورين ، تعد الواجهة الرسومية لـ Android Studio ML Model Binding هي الأسهل في الاستخدام. إذا كنت بحاجة إلى مزيد من التخصيص أو كنت تستخدم أدوات سطر الأوامر ، فإن TensorFlow Lite Codegen متاح أيضًا.
استخدم Android Studio ML Model Binding
بالنسبة لنماذج TensorFlow Lite المحسّنة بالبيانات الوصفية ، يمكن للمطورين استخدام Android Studio ML Model Binding لتكوين الإعدادات تلقائيًا للمشروع وإنشاء فئات مجمعة بناءً على البيانات الوصفية للنموذج. يزيل رمز المجمع الحاجة إلى التفاعل مباشرة مع ByteBuffer
. بدلاً من ذلك ، يمكن للمطورين التفاعل مع نموذج TensorFlow Lite باستخدام كائنات مكتوبة مثل Bitmap
و Rect
.
قم باستيراد نموذج TensorFlow Lite في Android Studio
انقر بزر الماوس الأيمن فوق الوحدة التي ترغب في استخدام نموذج TFLite أو انقر فوق
File
، ثمNew
>Other
>TensorFlow Lite Model
حدد موقع ملف TFLite الخاص بك. لاحظ أن الأدوات ستقوم بتهيئة تبعية الوحدة نيابة عنك مع ربط ML Model وإدراج جميع التبعيات تلقائيًا في ملف
build.gradle
الخاص بوحدة Android.اختياري: حدد خانة الاختيار الثانية لاستيراد TensorFlow GPU إذا كنت تريد استخدام تسريع GPU.
انقر فوق
Finish
.ستظهر الشاشة التالية بعد نجاح الاستيراد. لبدء استخدام النموذج ، حدد Kotlin أو Java ، وانسخ الكود والصقه تحت قسم
Sample Code
. يمكنك العودة إلى هذه الشاشة بالنقر المزدوج على نموذج TFLite أسفل دليلml
في Android Studio.
تسريع الاستدلال بالنموذج
يوفر ML Model Binding طريقة للمطورين لتسريع التعليمات البرمجية الخاصة بهم من خلال استخدام المفوضين وعدد الخيوط.
الخطوة 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 ، إذا لم يتم تشغيل النموذج باستخدام مؤشرات ترابط متعددة لوحدة المعالجة المركزية:
كوتلن
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
جافا
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 ، لترى كيف تحلل أداة codegen كل حقل.
إنشاء رمز المجمّع
ستحتاج إلى تثبيت الأدوات التالية في جهازك الطرفي:
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 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 Studio حيث ترغب في استخدام نموذج TensorFlow lite واستورد الوحدة النمطية التي تم إنشاؤها بواسطة: And File -> New -> Import Module -> حدد SRC_ROOT
باستخدام المثال أعلاه ، سيتم تسمية الدليل والوحدة النمطية المستوردة classify_wrapper
.
الخطوة الثانية: قم بتحديث ملف 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 - (اختياري)
Device
: مفوض تسريع TFLite على سبيل المثال GPUDelegate أو NNAPIDelegate - (اختياري)
numThreads
: عدد الخيوط المستخدمة لتشغيل النموذج - الافتراضي هو واحد.
على سبيل المثال ، لاستخدام مفوض NNAPI وما يصل إلى ثلاثة مؤشرات ترابط ، يمكنك تهيئة النموذج مثل هذا:
try {
myImageClassifier = new MyClassifierModel(this, Model.Device.NNAPI, 3);
} catch (IOException io){
// Error reading the model
}
استكشاف الأخطاء وإصلاحها
إذا حصلت على 'java.io.FileNotFoundException: لا يمكن فتح هذا الملف كواصف ملف ؛ من المحتمل أن يكون الخطأ مضغوطًا ، أدخل الأسطر التالية ضمن قسم android في وحدة التطبيق التي ستستخدم وحدة المكتبة:
aaptOptions {
noCompress "tflite"
}