مؤتمر Google I / O هو التفاف! تابع جلسات TensorFlow اعرض الجلسات

Quickstart لنظام Android

يوضح لك هذا البرنامج التعليمي كيفية إنشاء تطبيق Android باستخدام TensorFlow Lite لتحليل موجز مباشر للكاميرا وتحديد الكائنات باستخدام نموذج التعلم الآلي ، باستخدام الحد الأدنى من التعليمات البرمجية. إذا كنت تقوم بتحديث مشروع موجود ، فيمكنك استخدام نموذج التعليمات البرمجية كمرجع والتخطي إلى الأمام إلى الإرشادات الخاصة بتعديل مشروعك .

اكتشاف الكائن مع التعلم الآلي

عرض متحرك للكشف عن الكائن يقوم نموذج التعلم الآلي في هذا البرنامج التعليمي باكتشاف الكائن. يأخذ نموذج اكتشاف الكائن بيانات الصورة بتنسيق معين ، ويحللها ، ويحاول تصنيف العناصر في الصورة كواحدة من مجموعة من الفئات المعروفة التي تم تدريبها على التعرف عليها. يتم قياس السرعة التي يمكن للنموذج من خلالها التعرف على كائن معروف (يسمى تنبؤ الكائن أو الاستدلال ) بالمللي ثانية. من الناحية العملية ، تختلف سرعة الاستدلال بناءً على الأجهزة التي تستضيف النموذج ، وحجم البيانات التي تتم معالجتها ، وحجم نموذج التعلم الآلي.

مثال الإعداد والتشغيل

في الجزء الأول من هذا البرنامج التعليمي ، قم بتنزيل النموذج من GitHub وتشغيله باستخدام Android Studio . تستكشف الأقسام التالية من هذا البرنامج التعليمي الأقسام ذات الصلة من مثال التعليمات البرمجية ، بحيث يمكنك تطبيقها على تطبيقات Android الخاصة بك. أنت بحاجة إلى تثبيت الإصدارات التالية من هذه الأدوات:

  • Android Studio 4.2.2 أو أعلى
  • Android SDK الإصدار 31 أو أعلى

احصل على رمز المثال

قم بإنشاء نسخة محلية من رمز المثال. ستستخدم هذا الرمز لإنشاء مشروع في Android Studio وتشغيل التطبيق النموذجي.

لاستنساخ وإعداد رمز المثال:

  1. استنساخ مستودع git
    git clone https://github.com/android/camera-samples.git
    
  2. قم بتكوين مثيل git الخاص بك لاستخدام السحب المتناثر ، بحيث يكون لديك فقط الملفات الخاصة بتطبيق مثال اكتشاف الكائنات:

    cd camera-samples
    git sparse-checkout init --cone
    git sparse-checkout set CameraXAdvanced
    

استيراد وتشغيل المشروع

قم بإنشاء مشروع من رمز المثال الذي تم تنزيله ، وقم ببناء المشروع ، ثم قم بتشغيله.

لاستيراد وبناء مشروع كود المثال:

  1. ابدأ Android Studio .
  2. من صفحة ترحيب Android Studio ، اختر استيراد مشروع ، أو حدد ملف> جديد> استيراد مشروع .
  3. انتقل إلى دليل التعليمات البرمجية المثال الذي يحتوي على ملف build.gradle ( .../android/camera-samples/CameraXAdvanced/build.gradle ) وحدد هذا الدليل.

إذا حددت الدليل الصحيح ، فسيقوم Android Studio بإنشاء مشروع جديد وبنائه. قد تستغرق هذه العملية بضع دقائق ، اعتمادًا على سرعة جهاز الكمبيوتر الخاص بك وما إذا كنت قد استخدمت Android Studio لمشاريع أخرى. عند اكتمال البناء ، يعرض Android Studio رسالة BUILD SUCCESSFUL في لوحة حالة Build Output .

اختياري: لإصلاح أخطاء الإصدار عن طريق تحديث إصدار المكوِّن الإضافي لنظام Android:

  1. افتح ملف build.gradle في دليل المشروع.
  2. قم بتغيير إصدار أدوات Android كما يلي:

    // from:
    classpath 'com.android.tools.build:gradle:4.2.2'
    // to:
    classpath 'com.android.tools.build:gradle:4.1.2'
    
  3. قم بمزامنة المشروع عن طريق تحديد: ملف> مزامنة المشروع مع ملفات Gradle .

لتشغيل المشروع:

  1. من Android Studio ، قم بتشغيل المشروع عن طريق تحديد Run> Run… و CameraActivity .
  2. حدد جهاز Android متصلًا به كاميرا لاختبار التطبيق.

توضح لك الأقسام التالية التعديلات التي تحتاج إلى إجرائها على مشروعك الحالي لإضافة هذه الوظيفة إلى التطبيق الخاص بك ، باستخدام هذا التطبيق النموذجي كنقطة مرجعية.

أضف تبعيات المشروع

في التطبيق الخاص بك ، يجب إضافة تبعيات محددة للمشروع لتشغيل نماذج التعلم الآلي TensorFlow Lite ، والوصول إلى وظائف الأداة المساعدة التي تحول البيانات مثل الصور ، إلى تنسيق بيانات موتر يمكن معالجته بواسطة النموذج الذي تستخدمه.

يستخدم التطبيق المثال العديد من مكتبات TensorFlow Lite لتمكين تنفيذ نموذج التعلم الآلي لاكتشاف الكائنات:

  • مكتبة TensorFlow Lite الرئيسية - توفر فئات إدخال البيانات المطلوبة وتنفيذ نموذج التعلم الآلي ونتائج الإخراج من معالجة النموذج.
  • مكتبة TensorFlow Lite Support - توفر هذه المكتبة فئة مساعدة لترجمة الصور من الكاميرا إلى كائن بيانات TensorImage الذي يمكن معالجته بواسطة نموذج التعلم الآلي.
  • مكتبة TensorFlow Lite GPU - توفر هذه المكتبة الدعم لتسريع تنفيذ النموذج باستخدام معالجات GPU على الجهاز ، إذا كانت متوفرة.

توضح الإرشادات التالية كيفية إضافة تبعيات المشروع والوحدة المطلوبة إلى مشروع تطبيق Android الخاص بك.

لإضافة تبعيات الوحدة النمطية:

  1. في الوحدة التي تستخدم TensorFlow Lite ، قم بتحديث ملف build.gradle الخاص بالوحدة لتضمين التبعيات التالية. في رمز المثال ، يوجد هذا الملف هنا: .../android/camera-samples/CameraXAdvanced/tflite/build.gradle ( مرجع الكود )

    ...
    dependencies {
    ...
        // Tensorflow lite dependencies
        implementation 'org.tensorflow:tensorflow-lite:2.8.0'
        implementation 'org.tensorflow:tensorflow-lite-gpu:2.8.0'
        implementation 'org.tensorflow:tensorflow-lite-support:2.8.0'
    ...
    }
    
  2. في Android Studio ، قم بمزامنة تبعيات المشروع عن طريق تحديد: File> Sync Project with Gradle Files .

تهيئة مترجم نموذج ML

في تطبيق Android الخاص بك ، يجب عليك تهيئة مترجم نموذج التعلم الآلي TensorFlow Lite باستخدام المعلمات قبل تشغيل التنبؤات مع النموذج. تعتمد معلمات التهيئة هذه على النموذج الذي تستخدمه ، ويمكن أن تتضمن إعدادات مثل الحد الأدنى من حدود الدقة للتنبؤات والتسميات لفئات الكائنات المحددة.

يشتمل نموذج TensorFlow Lite على ملف .tflite يحتوي على رمز النموذج وغالبًا ما يشتمل على ملف ملصقات يحتوي على أسماء الفئات التي تنبأ بها النموذج. في حالة اكتشاف الأشياء ، فإن الفئات هي أشياء مثل شخص أو كلب أو قطة أو سيارة. يتم تخزين النماذج بشكل عام في دليل src/main/assets للوحدة النمطية الأساسية ، كما في مثال الكود:

  • CameraX Advanced / tflite / src / main / الأصول / coco_ssd_mobilenet_v1_1.0_quant.tflite
  • CameraX Advanced / tflite / src / main / الأصول / coco_ssd_mobilenet_v1_1.0_labels.txt

للراحة وسهولة قراءة الكود ، يوضح المثال كائنًا مصاحبًا يحدد إعدادات النموذج.

لتهيئة النموذج في تطبيقك:

  1. قم بإنشاء كائن مصاحب لتحديد إعدادات النموذج: ( مرجع الكود )

    companion object {
       private val TAG = CameraActivity::class.java.simpleName
    
       private const val ACCURACY_THRESHOLD = 0.5f
       private const val MODEL_PATH = "coco_ssd_mobilenet_v1_1.0_quant.tflite"
       private const val LABELS_PATH = "coco_ssd_mobilenet_v1_1.0_labels.txt"
    }
    
  2. استخدم الإعدادات من هذا الكائن لإنشاء كائن TensorFlow Lite Interpreter الذي يحتوي على النموذج: ( مرجع الكود )

    private val tflite by lazy {
       Interpreter(
           FileUtil.loadMappedFile(this, MODEL_PATH),
           Interpreter.Options().addDelegate(nnApiDelegate))
    }
    

تكوين مسرع الأجهزة

عند تهيئة نموذج TensorFlow Lite في تطبيقك ، يمكنك استخدام ميزات تسريع الأجهزة لتسريع حسابات التنبؤ الخاصة بالنموذج. يستخدم مثال الكود أعلاه مندوب NNAPI للتعامل مع تسريع الأجهزة في تنفيذ النموذج:

Interpreter.Options().addDelegate(nnApiDelegate)

مندوبو TensorFlow Lite عبارة عن وحدات برمجية تعمل على تسريع تنفيذ نماذج التعلم الآلي باستخدام أجهزة معالجة متخصصة على جهاز محمول ، مثل وحدات معالجة الرسومات (GPU) أو TPUs أو DSPs. يوصى باستخدام المفوضين لتشغيل نماذج TensorFlow Lite ، ولكنه ليس مطلوبًا.

لمزيد من المعلومات حول استخدام المندوبين مع TensorFlow Lite ، راجع TensorFlow Lite المندوبين .

توفير البيانات للنموذج

في تطبيق Android الخاص بك ، يوفر الرمز الخاص بك بيانات إلى النموذج للتفسير عن طريق تحويل البيانات الموجودة مثل الصور إلى تنسيق بيانات Tensor الذي يمكن معالجته بواسطة نموذجك. يجب أن تحتوي البيانات الموجودة في Tensor على أبعاد أو شكل محدد يطابق تنسيق البيانات المستخدمة لتدريب النموذج.

لتحديد شكل الموتر المطلوب لنموذج:

  • استخدم كائن المترجم الفوري الذي تمت تهيئته لتحديد شكل الموتر الذي يستخدمه نموذجك ، كما هو موضح في مقتطف الشفرة أدناه: ( مرجع الرمز )

    private val tfInputSize by lazy {
       val inputIndex = 0
       val inputShape = tflite.getInputTensor(inputIndex).shape()
       Size(inputShape[2], inputShape[1]) // Order of axis is: {1, height, width, 3}
    }
    

يتوقع نموذج اكتشاف الكائن المستخدم في رمز المثال صورًا مربعة بحجم 300 × 300 بكسل.

قبل أن تتمكن من توفير صور من الكاميرا ، يجب أن يلتقط تطبيقك الصورة ، ويجعلها متوافقة مع الحجم المتوقع ، وضبط دورانها ، وتطبيع بيانات الصورة. عند معالجة الصور باستخدام نموذج TensorFlow Lite ، يمكنك استخدام فئة ImageProcessor لمكتبة الدعم TensorFlow Lite لمعالجة هذه البيانات مسبقًا ، كما هو موضح أدناه.

لتحويل بيانات الصورة لنموذج:

  1. استخدم Support Library ImageProcessor لإنشاء كائن لتحويل بيانات الصورة إلى تنسيق يمكن أن يستخدمه نموذجك لتشغيل التنبؤات: ( مرجع الرمز )

    private val tfImageProcessor by lazy {
       val cropSize = minOf(bitmapBuffer.width, bitmapBuffer.height)
       ImageProcessor.Builder()
           .add(ResizeWithCropOrPadOp(cropSize, cropSize))
           .add(ResizeOp(
               tfInputSize.height, tfInputSize.width, ResizeOp.ResizeMethod.NEAREST_NEIGHBOR))
           .add(Rot90Op(-imageRotationDegrees / 90))
           .add(NormalizeOp(0f, 1f))
           .build()
    }
    
  2. انسخ بيانات الصورة من نظام كاميرا Android وقم بإعدادها للتحليل باستخدام كائن ImageProcessor الخاص بك: ( مرجع الرمز )

    // Copy out RGB bits to the shared buffer
    image.use { bitmapBuffer.copyPixelsFromBuffer(image.planes[0].buffer)  }
    
    // Process the image in Tensorflow
    val tfImage =  tfImageProcessor.process(tfImageBuffer.apply { load(bitmapBuffer) })
    

قم بتشغيل التنبؤات

في تطبيق Android الخاص بك ، بمجرد إنشاء كائن TensorImage ببيانات الصورة بالتنسيق الصحيح ، يمكنك تشغيل النموذج مقابل تلك البيانات لإنتاج تنبؤ أو استنتاج . يستخدم رمز المثال لهذا البرنامج التعليمي فئة ObjectDetectionHelper التي تغلف هذا الرمز في طريقة predict() .

لتشغيل توقع على مجموعة من بيانات الصورة:

  1. قم بتشغيل التنبؤ عن طريق تمرير بيانات الصورة إلى وظيفة التنبؤ الخاصة بك: ( مرجع الكود )

    // Perform the object detection for the current frame
    val predictions = detector.predict(tfImage)
    
  2. قم باستدعاء طريقة التشغيل على مثيل كائن tflite الخاص بك باستخدام بيانات الصورة لإنشاء تنبؤات: ( مرجع الكود )

    fun predict(image: TensorImage): List<ObjectPrediction> {
       tflite.runForMultipleInputsOutputs(arrayOf(image.buffer), outputBuffer)
       return predictions
    }
    

يتلقى كائن TensorFlow Lite Interpreter هذه البيانات ، ويقوم بتشغيلها مقابل النموذج ، وينتج قائمة بالتنبؤات. للمعالجة المستمرة للبيانات بواسطة النموذج ، استخدم طريقة runForMultipleInputsOutputs() بحيث لا يتم إنشاء كائنات المترجم الفوري ثم إزالتها بواسطة النظام لكل تشغيل تنبؤ.

معالجة إخراج النموذج

في تطبيق Android الخاص بك ، بعد تشغيل بيانات الصورة مقابل نموذج اكتشاف الكائن ، فإنه ينتج قائمة بالتنبؤات التي يجب أن يتعامل معها رمز التطبيق الخاص بك عن طريق تنفيذ منطق عمل إضافي ، أو عرض النتائج للمستخدم ، أو اتخاذ إجراءات أخرى.

يختلف ناتج أي نموذج TensorFlow Lite من حيث عدد التنبؤات التي ينتجها (واحد أو العديد) ، والمعلومات الوصفية لكل تنبؤ. في حالة نموذج اكتشاف الكائن ، تتضمن التنبؤات عادةً بيانات لمربع محيط يشير إلى مكان اكتشاف كائن في الصورة. في رمز المثال ، يتم تنسيق البيانات التي تم إرجاعها كقائمة من كائنات ObjectPrediction ، كما هو موضح أدناه: ( مرجع الرمز )

val predictions get() = (0 until OBJECT_COUNT).map {
   ObjectPrediction(

       // The locations are an array of [0, 1] floats for [top, left, bottom, right]
       location = locations[0][it].let {
           RectF(it[1], it[0], it[3], it[2])
       },

       // SSD Mobilenet V1 Model assumes class 0 is background class
       // in label file and class labels start from 1 to number_of_classes + 1,
       // while outputClasses correspond to class index from 0 to number_of_classes
       label = labels[1 + labelIndices[0][it].toInt()],

       // Score is a single value of [0, 1]
       score = scores[0][it]
   )
}

لقطة شاشة لاكتشاف الكائن بالنسبة للنموذج المستخدم في هذا المثال ، يشتمل كل توقع على موقع مربع محيط للكائن ، وتسمية للكائن ، ودرجة تنبؤ بين 0 و 1 كعامل تعويم يمثل ثقة التوقع ، حيث يمثل 1 أعلى تصنيف ثقة . بشكل عام ، تعتبر التوقعات التي تقل درجاتها عن 50٪ (0.5) غير حاسمة. ومع ذلك ، فإن كيفية تعاملك مع نتائج التنبؤ ذات القيمة المنخفضة أمر متروك لك ولاحتياجات تطبيقك.

بمجرد عرض النموذج لنتيجة تنبؤ ، يمكن للتطبيق الخاص بك التصرف بناءً على هذا التوقع من خلال تقديم النتيجة إلى المستخدم أو تنفيذ منطق إضافي. في حالة رمز المثال ، يرسم التطبيق مربعًا محيطًا حول الكائن المحدد ويعرض اسم الفئة على الشاشة. راجع وظيفة CameraActivity.reportPrediction() في رمز المثال للحصول على التفاصيل.

الخطوات التالية

  • اكتشف الاستخدامات المختلفة لـ TensorFlow Lite في الأمثلة .
  • تعرف على المزيد حول استخدام نماذج التعلم الآلي مع TensorFlow Lite في قسم النماذج .
  • تعرف على المزيد حول تطبيق التعلم الآلي في تطبيق الهاتف الخاص بك في دليل مطور TensorFlow Lite .