1. مقدمة

ملاحظة: يتطلّب هذا الدرس العملي استخدام جهاز فعلي للاختبار.
TensorFlow هو إطار عمل متعدّد الأغراض لتعلُّم الآلة. يمكن استخدام TensorFlow في أي مكان، بدءًا من تدريب النماذج الضخمة على مستوى المجموعات في السحابة الإلكترونية، إلى تشغيل النماذج محليًا على نظام مضمّن مثل هاتفك.
يستخدم هذا الدرس التطبيقي حول الترميز TensorFlow Lite لتشغيل نموذج التعرّف على الصور على جهاز Android.
تثبيت الإصدار 4.1 من "استوديو Android" أو إصدار أحدث
إذا لم يكن مثبّتًا لديك، يمكنك تنزيل الإصدار 4.1 من "استوديو Android" أو إصدار أحدث وتثبيته أثناء تدريب نموذج TensorFlow Lite.
أهداف الدورة التعليمية
- كيفية تدريب مصنّف صور مخصّص باستخدام TensorFlow Lite Model Maker
- كيفية استخدام "استوديو Android" لاستيراد نموذج TensorFlow Lite لدمج النموذج المخصّص في تطبيق Android باستخدام CameraX
- كيفية استخدام وحدة معالجة الرسومات على هاتفك لتسريع النموذج
ما ستنشئه
تطبيق كاميرا بسيط يشغّل برنامج TensorFlow للتعرّف على الصور من أجل تحديد الزهور.

الترخيص: مجاني للاستخدام
2. تدريب أداة للتعرّف على الزهور باستخدام Colab
قبل بدء تدريب النموذج، ابدأ بتنزيل وتثبيت الإصدار 4.1 من "استوديو Android" أو إصدار أحدث.
افتح Colab الذي يوضّح كيفية تدريب مصنّف باستخدام Keras للتعرّف على الزهور باستخدام ميزة "التعلّم القائم على نقل المهام" في TensorFlow Lite.
3- إعداد دليل العمل
إنشاء نسخة طبق الأصل من مستودع Git
سيؤدي الأمر التالي إلى استنساخ مستودع Git الذي يحتوي على الملفات المطلوبة لهذا الدرس التطبيقي العملي:
git clone https://github.com/hoitab/TFLClassify.git
بعد ذلك، انتقِل إلى الدليل الذي استنسخت فيه المستودع. ستعمل على هذا التطبيق خلال بقية هذا الدرس التطبيقي حول الترميز:
cd TFLClassify
4. إعداد تطبيق Android الأساسي

تثبيت الإصدار 4.1 من "استوديو Android" أو إصدار أحدث
إذا لم يكن مثبّتًا لديك، يُرجى تثبيت الإصدار 4.1 أو إصدار أحدث من "استوديو Android".
فتح المشروع باستخدام "استوديو Android"
افتح مشروعًا باستخدام "استوديو Android" باتّباع الخطوات التالية:
- افتح "استوديو Android"
. بعد تحميله، اختَر "فتح مشروع حالي" من هذه النافذة المنبثقة:

- في أداة اختيار الملفات، اختَر
TFLClassify/build.gradleمن دليل العمل.
- ستظهر لك نافذة منبثقة بعنوان "مزامنة Gradle" في المرة الأولى التي تفتح فيها المشروع، وستسألك عن استخدام برنامج Gradle المغلّف. انقر على "موافق".

- فعِّل "وضع مطوّر البرامج" و"تصحيح أخطاء الجهاز عبر USB" على هاتفك إذا لم يسبق لك إجراء ذلك. يجب إكمال عملية الإعداد مرة واحدة فقط. اتّبِع هذه التعليمات.
- بعد أن يصبح كل من مشروعك وهاتفك جاهزًا، يمكنك تشغيله على جهاز حقيقي من خلال النقر على
TFL_Classify.startثم على زر التشغيل
في شريط الأدوات:

- الآن، اسمح لتطبيق Tensorflow Demo بالوصول إلى الكاميرا:

- ستظهر لك الشاشة التالية على هاتفك مع أرقام عشوائية بدلاً من المكان الذي ستظهر فيه النتائج الفعلية.

5- إضافة TensorFlow Lite إلى تطبيق Android
- اختَر الوحدة
startفي "مستكشف المشاريع" على يمين الصفحة:

- انقر بزر الماوس الأيمن على وحدة
startأو انقر علىFile، ثمNew>Other>TensorFlow Lite Model

- اختَر موقع النموذج الذي نزّلت منه النموذج المخصّص المدرَّب
FlowerModel.tfliteفي وقت سابق.

- انقر على
Finish. - سيظهر لك ما يلي في النهاية. تم استيراد FlowerModel.tflite بنجاح، ويعرض معلومات عالية المستوى حول النموذج، بما في ذلك الإدخال / الإخراج بالإضافة إلى بعض نماذج الرموز البرمجية لمساعدتك في البدء.

6. اختياري: الاطّلاع على قائمة المهام الكاملة
تسهّل قائمة المهام التنقّل إلى الموقع الجغرافي الدقيق الذي تحتاج إلى تعديل الدرس التطبيقي حول الترميز فيه. يمكنك أيضًا استخدامها في مشروع Android لتذكير نفسك بالعمل المستقبلي. يمكنك إضافة عناصر قائمة المهام باستخدام تعليقات التعليمات البرمجية وكتابة الكلمة الرئيسية TODO. للوصول إلى قائمة المهام، يمكنك اتّباع الخطوات التالية:
- يمكنك الاطّلاع على قائمة المهام لمعرفة ما سنفعله. لإجراء ذلك، اختَر من شريط القوائم العلوي
View>Tool Windows>TODO

- بشكلٍ تلقائي، يتم إدراج جميع المهام التي يجب تنفيذها في جميع الوحدات، ما يجعلها مربكة بعض الشيء. يمكننا فرز مهام TODO التي تبدأ بـ "ابدأ" فقط من خلال النقر على زر "تجميع حسب" على جانب لوحة TODO واختيار
Modules

- وسِّع جميع العناصر ضمن وحدات البدء:

7. تشغيل النموذج المخصّص باستخدام TensorFlow Lite
- انقر على TODO 1 في قائمة المهام أو افتح ملف MainActivity.kt وابحث عن TODO 1، ثم ابدأ النموذج بإضافة هذا السطر:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
...
// TODO 1: Add class variable TensorFlow Lite Model
private val flowerModel = FlowerModel.newInstance(ctx)
...
}
- داخل طريقة التحليل في CameraX Analyzer، علينا تحويل إدخال الكاميرا
ImageProxyإلىBitmapوإنشاء عنصرTensorImageلعملية الاستدلال.
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 2: Convert Image to Bitmap then to TensorImage
val tfImage = TensorImage.fromBitmap(toBitmap(imageProxy))
...
}
- عالِج الصورة ونفِّذ العمليات التالية على النتيجة:
- رتِّب النتائج تنازليًا حسب الاحتمالية ضمن السمة
score، مع عرض الاحتمالية الأعلى أولاً. - يتم أخذ أهم k نتائج كما هو محدّد بالثابت
MAX_RESULT_DISPLAY. يمكنك اختياريًا تغيير قيمة هذا المتغيّر للحصول على نتائج أكثر أو أقل.
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 3: Process the image using the trained model, sort and pick out the top results
val outputs = flowerModel.process(tfImage)
.probabilityAsCategoryList.apply {
sortByDescending { it.score } // Sort with highest confidence first
}.take(MAX_RESULT_DISPLAY) // take the top results
...
}
- حوِّل النتائج التي تمّ ترتيبها وفلترتها إلى عناصر بيانات
Recognitionجاهزة للاستهلاك من خلالRecyclerViewباستخدام ربط البيانات:
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 4: Converting the top probability items into a list of recognitions
for (output in outputs) {
items.add(Recognition(output.label, output.score))
}
...
}
- علِّق على الأسطر التالية أو احذفها، وهي التي تساعد في إنشاء النتائج الوهمية التي نراها من قبل:
// START - Placeholder code at the start of the codelab. Comment this block of code out.
for (i in 0..MAX_RESULT_DISPLAY-1){
items.add(Recognition("Fake label $i", Random.nextFloat()))
}
// END - Placeholder code at the start of the codelab. Comment this block of code out.
- شغِّل التطبيق على جهاز حقيقي من خلال النقر على
TFL_Classify.startثم على زر التشغيل
في شريط الأدوات:

- ستظهر لك الشاشة التالية على هاتفك مع أرقام عشوائية بدلاً من النتائج الفعلية:

8. اختياري: تسريع الاستنتاج باستخدام أداة تفويض وحدة معالجة الرسومات
يتوافق TensorFlow Lite مع العديد من أدوات تسريع الأجهزة لتسريع الاستدلال على جهازك الجوّال. وحدة معالجة الرسومات هي إحدى أدوات التسريع التي يمكن أن يستفيد منها TensorFlow Lite من خلال آلية تفويض، وهي سهلة الاستخدام إلى حدّ كبير.
- افتح ملف build.gradle ضمن الوحدة
startأو يمكنك النقر على TODO 5 ضمن قائمة TODO وإضافة التبعية التالية:
// TODO 5: Optional GPU Delegates
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
- ارجع إلى ملف MainActivity.kt أو انقر على TODO 6 في قائمة المهام. استبدِل عملية بدء flowerModel البسيطة بما يلي: احصل على مثيل لقائمة وحدات معالجة الرسومات المتوافقة، وابدأ وحدة معالجة الرسومات استنادًا إلى ما إذا كانت إحدى وحدات معالجة الرسومات المتوافقة المُدرَجة. بخلاف ذلك، ابدأ 4 سلاسل لوحدة المعالجة المركزية لتشغيل النموذج بدلاً من ذلك:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
...
// TODO 1: Add class variable TensorFlow Lite Model
// Initializing the flowerModel by lazy so that it runs in the same thread when the process
// method is called.
private val flowerModel: FlowerModel by lazy{
// TODO 6. Optional GPU acceleration
val compatList = CompatibilityList()
val options = if(compatList.isDelegateSupportedOnThisDevice){
Log.d(TAG, "This device is GPU Compatible ")
Model.Options.Builder().setDevice(Model.Device.GPU).build()
} else {
Log.d(TAG, "This device is GPU Incompatible ")
Model.Options.Builder().setNumThreads(4).build()
}
...
}
- غيِّر أداة تهيئة النموذج لاستخدام هذا الإعداد عن طريق إضافة
optionsإلى إدخال الطريقة:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
private val flowerModel: FlowerModel by lazy{
...
// Initialize the Flower Model
FlowerModel.newInstance(ctx, options)
}
}
- شغِّل التطبيق على جهاز حقيقي من خلال النقر على
TFL_Classify.startثم على زر التشغيل
في شريط الأدوات:

9- ما هي الخطوات التالية؟
في ما يلي بعض الروابط لمزيد من المعلومات:
- جرِّب نماذج TFLite الأخرى المتوافقة مع ربط نماذج تعلُّم الآلة من tfhub.dev.
- يمكنك الاطّلاع على مزيد من المعلومات عن TFLite من المستندات على tensorflow.org ومستودع الرموز البرمجية.
- جرِّب بعض نماذج TFLite المُدرَّبة مسبقًا الأخرى، بما في ذلك أداة رصد الكلمات الرئيسية الصوتية وإصدار من الرد الذكي يعمل على الجهاز فقط.
- يمكنك الاطّلاع على مزيد من المعلومات عن TensorFlow بشكل عام من خلال مستندات البدء.