إنشاء واجهات نموذجية باستخدام البيانات الوصفية

باستخدام 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

  1. انقر بزر الماوس الأيمن على الوحدة التي ترغب في استخدام نموذج TFLite أو انقر فوق " File ثم New " > Other > TensorFlow Lite Model

  2. حدد موقع ملف TFLite الخاص بك. لاحظ أن الأدوات ستقوم بتكوين تبعية الوحدة نيابة عنك من خلال ربط نموذج ML ويتم إدراج جميع التبعيات تلقائيًا في ملف build.gradle الخاص بوحدة Android.

    اختياري: حدد مربع الاختيار الثاني لاستيراد TensorFlow GPU إذا كنت تريد استخدام تسريع GPU.

  3. انقر فوق Finish .

  4. ستظهر الشاشة التالية بعد نجاح عملية الاستيراد. لبدء استخدام النموذج، حدد 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. اكتشف ما إذا كانت وحدة معالجة الرسومات (GPU) التي تعمل على الجهاز متوافقة مع مندوب TensorFlow GPU، إذا لم تقم بتشغيل النموذج باستخدام مؤشرات ترابط وحدة المعالجة المركزية المتعددة:

كوتلين

    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 واستيراد الوحدة التي تم إنشاؤها عن طريق: وملف -> جديد -> وحدة استيراد -> حدد 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
  • (اختياري) 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"
}