TensorFlow Lite في خدمات Google Play

يتوفر TensorFlow Lite في وقت تشغيل خدمات Google Play لجميع أجهزة Android التي تعمل بالإصدار الحالي من خدمات Play. يتيح لك وقت التشغيل هذا تشغيل نماذج التعلم الآلي (ML) بدون تجميع مكتبات TensorFlow Lite بشكل ثابت في تطبيقك.

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

يمكنك البدء في وقت تشغيل خدمات Play باستخدام Quickstart ، والذي يوفر دليلًا تفصيليًا لتنفيذ تطبيق نموذجي. إذا كنت تستخدم بالفعل TensorFlow Lite المستقل في تطبيقك ، فارجع إلى قسم الترحيل من TensorFlow Lite المستقل لتحديث تطبيق موجود لاستخدام وقت تشغيل خدمات Play. لمزيد من المعلومات حول خدمات Google Play ، راجع موقع خدمات Google Play .

استخدام وقت تشغيل خدمات Play

يتوفر TensorFlow Lite في خدمات Google Play من خلال TensorFlow Lite Task API و TensorFlow Lite Interpreter API . توفر مكتبة المهام واجهات نموذجية محسّنة جاهزة لمهام التعلم الآلي الشائعة باستخدام البيانات المرئية والصوتية والنصية. توفر TensorFlow Lite Interpreter API ، التي توفرها مكتبات وقت تشغيل TensorFlow ودعمها ، واجهة أكثر عمومية للأغراض لبناء نماذج ML وتشغيلها.

توفر الأقسام التالية إرشادات حول كيفية تنفيذ واجهات برمجة تطبيقات مكتبة المهام والمترجم الفوري في خدمات Google Play. في حين أنه من الممكن أن يستخدم التطبيق كلاً من Interpreter APIs و Task Library APIs ، يجب أن تستخدم معظم التطبيقات مجموعة واحدة فقط من واجهات برمجة التطبيقات.

استخدام واجهات برمجة تطبيقات مكتبة المهام

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

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

يعتمد اعتماد مشروعك على حالة استخدام التعلم الآلي الخاصة بك. تحتوي واجهات برمجة تطبيقات المهام على المكتبات التالية:

  • مكتبة الرؤية: org.tensorflow:tensorflow-lite-task-vision-play-services
  • مكتبة الصوت: org.tensorflow:tensorflow-lite-task-audio-play-services
  • مكتبة النصوص: org.tensorflow:tensorflow-lite-task-text-play-services

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

dependencies {
...
    implementation 'org.tensorflow:tensorflow-lite-task-vision-play-services:0.4.2'
...
}

2. أضف تهيئة TensorFlow Lite

قم بتهيئة مكون TensorFlow Lite لواجهة برمجة تطبيقات خدمات Google Play قبل استخدام TensorFlow Lite APIs. المثال التالي يهيئ مكتبة الرؤية:

كوتلن

init {
  TfLiteVision.initialize(context)
    }
  }

3. تشغيل الاستدلالات

بعد تهيئة مكون TensorFlow Lite ، قم باستدعاء طريقة detect() لإنشاء الاستنتاجات. يختلف الكود الدقيق داخل طريقة detect() وفقًا للمكتبة وحالة الاستخدام. ما يلي لحالة استخدام بسيطة لاكتشاف الكائن مع مكتبة TfLiteVision :

كوتلن

fun detect(...) {
  if (!TfLiteVision.isInitialized()) {
    Log.e(TAG, "detect: TfLiteVision is not initialized yet")
    return
  }

  if (objectDetector == null) {
    setupObjectDetector()
  }

  ...

}

اعتمادًا على تنسيق البيانات ، قد تحتاج أيضًا إلى المعالجة المسبقة وتحويل بياناتك ضمن طريقة detect() قبل إنشاء الاستدلالات. على سبيل المثال ، تتطلب بيانات الصورة لكاشف الكائن ما يلي:

val imageProcessor = ImageProcessor.Builder().add(Rot90Op(-imageRotation / 90)).build()
val tensorImage = imageProcessor.process(TensorImage.fromBitmap(image))
val results = objectDetector?.detect(tensorImage)

استخدام Interpreter APIs

توفر واجهات برمجة تطبيقات Interpreter مزيدًا من التحكم والمرونة من واجهات برمجة تطبيقات مكتبة المهام. يجب عليك استخدام Interpreter APIs إذا كانت مهمة التعلم الآلي الخاصة بك غير مدعومة من قبل مكتبة المهام ، أو إذا كنت تحتاج إلى واجهة عامة أكثر لبناء نماذج ML وتشغيلها.

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

أضف التبعيات التالية إلى رمز مشروع التطبيق الخاص بك للوصول إلى Play services API لـ TensorFlow Lite:

dependencies {
...
    // Tensorflow Lite dependencies for Google Play services
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
    // Optional: include Tensorflow Lite Support Library
    implementation 'com.google.android.gms:play-services-tflite-support:16.0.1'
...
}

2. أضف تهيئة TensorFlow Lite

ابدأ بتهيئة مكون TensorFlow Lite لواجهة برمجة تطبيقات خدمات Google Play قبل استخدام TensorFlow Lite APIs:

كوتلن

val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }

جافا

Task<Void> initializeTask = TfLite.initialize(context);

3. قم بإنشاء مترجم فوري واضبط خيار وقت التشغيل

قم بإنشاء مترجم باستخدام InterpreterApi.create() وقم بتكوينه لاستخدام وقت تشغيل خدمات Google Play ، عن طريق استدعاء InterpreterApi.Options.setRuntime() ، كما هو موضح في المثال التالي كود:

كوتلن

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private lateinit var interpreter: InterpreterApi
...
initializeTask.addOnSuccessListener {
  val interpreterOption =
    InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  interpreter = InterpreterApi.create(
    modelBuffer,
    interpreterOption
  )}
  .addOnFailureListener { e ->
    Log.e("Interpreter", "Cannot initialize interpreter", e)
  }

جافا

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private InterpreterApi interpreter;
...
initializeTask.addOnSuccessListener(a -> {
    interpreter = InterpreterApi.create(modelBuffer,
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY));
  })
  .addOnFailureListener(e -> {
    Log.e("Interpreter", String.format("Cannot initialize interpreter: %s",
          e.getMessage()));
  });

يجب عليك استخدام التنفيذ أعلاه لأنه يتجنب حظر مؤشر ترابط واجهة مستخدم Android. إذا كنت بحاجة إلى إدارة تنفيذ سلسلة الرسائل عن كثب ، فيمكنك إضافة Tasks.await() لإنشاء مترجم فوري:

كوتلن

import androidx.lifecycle.lifecycleScope
...
lifecycleScope.launchWhenStarted { // uses coroutine
  initializeTask.await()
}

جافا

@BackgroundThread
InterpreterApi initializeInterpreter() {
    Tasks.await(initializeTask);
    return InterpreterApi.create(...);
}

4. تشغيل الاستدلالات

باستخدام كائن interpreter الفوري الذي أنشأته ، قم باستدعاء طريقة run() لتوليد استنتاج.

كوتلن

interpreter.run(inputBuffer, outputBuffer)

جافا

interpreter.run(inputBuffer, outputBuffer);

تسريع الأجهزة

يتيح لك TensorFlow Lite تسريع أداء النموذج الخاص بك باستخدام معالجات أجهزة متخصصة ، مثل وحدات معالجة الرسومات (GPUs). يمكنك الاستفادة من هذه المعالجات المتخصصة باستخدام برامج تشغيل الأجهزة التي تسمى المفوضين . يمكنك استخدام مفوضي تسريع الأجهزة التاليين مع TensorFlow Lite في خدمات Google Play:

  • مندوب GPU (موصى به) - يتم توفير هذا المفوض من خلال خدمات Google Play ويتم تحميله ديناميكيًا ، تمامًا مثل إصدارات خدمات Play من Task API و Interpreter API.

  • مندوب NNAPI - هذا المفوض متاح كمكتبة تبعية مضمنة في مشروع تطوير Android الخاص بك ، ويتم تجميعه في تطبيقك.

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

التحقق من توافق الجهاز

لا تدعم جميع الأجهزة تسريع أجهزة GPU مع TFLite. لتقليل الأخطاء والأعطال المحتملة ، استخدم طريقة TfLiteGpu.isGpuDelegateAvailable للتحقق مما إذا كان الجهاز متوافقًا مع مفوض GPU.

استخدم هذه الطريقة لتأكيد ما إذا كان الجهاز متوافقًا مع وحدة معالجة الرسومات ، واستخدم وحدة المعالجة المركزية أو مفوض NNAPI كحل احتياطي عندما لا تكون وحدة معالجة الرسومات مدعومة.

useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

بمجرد أن يكون لديك متغير مثل useGpuTask ، يمكنك استخدامه لتحديد ما إذا كانت الأجهزة تستخدم مفوض GPU. توضح الأمثلة التالية كيف يمكن القيام بذلك باستخدام كل من واجهات برمجة تطبيقات مكتبة المهام والمترجم الفوري.

مع مهمة Api

كوتلن

lateinit val optionsTask = useGpuTask.continueWith { task ->
  val baseOptionsBuilder = BaseOptions.builder()
  if (task.result) {
    baseOptionsBuilder.useGpu()
  }
 ObjectDetectorOptions.builder()
          .setBaseOptions(baseOptionsBuilder.build())
          .setMaxResults(1)
          .build()
}
    

جافا

Task<ObjectDetectorOptions> optionsTask = useGpuTask.continueWith({ task ->
  BaseOptions baseOptionsBuilder = BaseOptions.builder();
  if (task.getResult()) {
    baseOptionsBuilder.useGpu();
  }
  return ObjectDetectorOptions.builder()
          .setBaseOptions(baseOptionsBuilder.build())
          .setMaxResults(1)
          .build()
});
    

مع المترجم Api

كوتلن

val interpreterTask = useGpuTask.continueWith { task ->
  val interpreterOptions = InterpreterApi.Options()
      .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  if (task.result) {
      interpreterOptions.addDelegateFactory(GpuDelegateFactory())
  }
  InterpreterApi.create(FileUtil.loadMappedFile(context, MODEL_PATH), interpreterOptions)
}
    

جافا

Task<InterpreterApi.Options> interpreterOptionsTask = useGpuTask.continueWith({ task ->
  InterpreterApi.Options options =
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY);
  if (task.getResult()) {
     options.addDelegateFactory(new GpuDelegateFactory());
  }
  return options;
});
    

GPU مع واجهات برمجة تطبيقات مكتبة المهام

لاستخدام مفوض GPU مع واجهات برمجة تطبيقات المهام:

  1. قم بتحديث تبعيات المشروع لاستخدام مفوض GPU من خدمات Play:

    implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
    
  2. قم بتهيئة مفوض GPU باستخدام setEnableGpuDelegateSupport . على سبيل المثال ، يمكنك تهيئة مفوض GPU لـ TfLiteVision بما يلي:

    كوتلن

        TfLiteVision.initialize(context, TfLiteInitializationOptions.builder().setEnableGpuDelegateSupport(true).build())
        

    جافا

        TfLiteVision.initialize(context, TfLiteInitializationOptions.builder().setEnableGpuDelegateSupport(true).build());
        
  3. قم بتمكين خيار تفويض GPU باستخدام BaseOptions :

    كوتلن

        val baseOptions = BaseOptions.builder().useGpu().build()
        

    جافا

        BaseOptions baseOptions = BaseOptions.builder().useGpu().build();
        
  4. تكوين الخيارات باستخدام .setBaseOptions . على سبيل المثال ، يمكنك إعداد GPU في ObjectDetector باستخدام ما يلي:

    كوتلن

        val options =
            ObjectDetectorOptions.builder()
                .setBaseOptions(baseOptions)
                .setMaxResults(1)
                .build()
        

    جافا

        ObjectDetectorOptions options =
            ObjectDetectorOptions.builder()
                .setBaseOptions(baseOptions)
                .setMaxResults(1)
                .build();
        

GPU مع Interpreter APIs

لاستخدام مفوض GPU مع Interpreter APIs:

  1. قم بتحديث تبعيات المشروع لاستخدام مفوض GPU من خدمات Play:

    implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
    
  2. قم بتمكين خيار مندوب GPU في تهيئة TFlite:

    كوتلن

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build())
        

    جافا

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build());
        
  3. قم بتعيين مفوض GPU في خيارات المترجم الفوري لاستخدام DelegateFactory فاكتوري من خلال استدعاء addDelegateFactory() داخل InterpreterApi.Options() :

    كوتلن

        val interpreterOption = InterpreterApi.Options()
         .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
         .addDelegateFactory(GpuDelegateFactory())
        

    جافا

        Options interpreterOption = InterpreterApi.Options()
          .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
          .addDelegateFactory(new GpuDelegateFactory());
        

الترحيل من TensorFlow Lite القائمة بذاتها

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

  1. راجع قسم القيود في هذه الصفحة للتأكد من دعم حالة الاستخدام الخاصة بك.
  2. قبل تحديث التعليمات البرمجية الخاصة بك ، قم بإجراء فحوصات الأداء والدقة لنماذجك ، خاصةً إذا كنت تستخدم إصدارات من TensorFlow Lite أقدم من الإصدار 2.1 ، بحيث يكون لديك خط أساس للمقارنة بالتنفيذ الجديد.
  3. إذا قمت بترحيل كل التعليمات البرمجية الخاصة بك لاستخدام واجهة برمجة تطبيقات خدمات Play لـ TensorFlow Lite ، فيجب عليك إزالة تبعيات مكتبة وقت تشغيل TensorFlow Lite الحالية (إدخالات مع org.tensorflow: tensorflow-lite :* ) من ملف build.gradle الخاص بك بحيث يمكن أن تقلل من حجم التطبيق الخاص بك.
  4. حدد جميع تكرارات إنشاء كائن new Interpreter في التعليمات البرمجية الخاصة بك ، وقم بتعديلها بحيث تستخدم استدعاء InterpreterApi.create (). واجهة برمجة التطبيقات الجديدة هذه غير متزامنة ، مما يعني في معظم الحالات أنها ليست بديلاً بدون تردد ، ويجب عليك تسجيل مستمع عند اكتمال المكالمة. الرجوع إلى مقتطف الرمز في رمز الخطوة 3 .
  5. إضافة import org.tensorflow.lite.InterpreterApi; import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; إلى أي ملفات مصدر باستخدام org.tensorflow.lite.Interpreter أو org.tensorflow.lite.InterpreterApi .
  6. إذا كانت أي من الاستدعاءات الناتجة إلى InterpreterApi.create() تحتوي على وسيطة واحدة فقط ، فقم بإلحاق new InterpreterApi.Options() بقائمة الوسائط.
  7. .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) الأخيرة لأي استدعاءات لـ InterpreterApi.create() .
  8. استبدل جميع التكرارات الأخرى لفئة org.tensorflow.lite.Interpreter بـ org.tensorflow.lite.InterpreterApi .

إذا كنت تريد استخدام TensorFlow Lite المستقلة وواجهة برمجة تطبيقات خدمات التشغيل جنبًا إلى جنب ، فيجب عليك استخدام TensorFlow Lite 2.9 (أو أحدث). لا تتوافق TensorFlow Lite 2.8 والإصدارات السابقة مع إصدار واجهة برمجة تطبيقات خدمات التشغيل.

محددات

يحتوي TensorFlow Lite في خدمات Google Play على القيود التالية:

  • يقتصر دعم مفوضي تسريع الأجهزة على المفوضين المدرجين في قسم تسريع الأجهزة . لا يتم دعم أي مفوضين تسريع آخرين.
  • لا يتم دعم الوصول إلى TensorFlow Lite عبر واجهات برمجة التطبيقات الأصلية . تتوفر فقط TensorFlow Lite Java APIs من خلال خدمات Google Play.
  • لا يتم دعم واجهات برمجة تطبيقات TensorFlow Lite التجريبية أو المتوقفة ، بما في ذلك العمليات المخصصة.

الدعم وردود الفعل

يمكنك تقديم الملاحظات والحصول على الدعم من خلال TensorFlow Issue Tracker. يرجى الإبلاغ عن المشكلات وطلبات الدعم باستخدام نموذج المشكلة لـ TensorFlow Lite في خدمات Google Play.

شروط الخدمة

يخضع استخدام TensorFlow Lite في واجهات برمجة تطبيقات خدمات Google Play لشروط خدمة Google APIs .

الخصوصية وجمع البيانات

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

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

أنت مسؤول عن إعلام مستخدمي تطبيقك بمعالجة Google لـ TensorFlow Lite في بيانات مقاييس واجهات برمجة تطبيقات خدمات Google Play وفقًا لما يقتضيه القانون المعمول به.

تشمل البيانات التي نجمعها ما يلي:

  • معلومات الجهاز (مثل الشركة المصنعة والطراز وإصدار نظام التشغيل والإنشاء) ومسرعات أجهزة ML المتاحة (GPU و DSP). تستخدم للتشخيصات وتحليلات الاستخدام.
  • معرّف الجهاز المستخدم في التشخيصات وتحليلات الاستخدام.
  • معلومات التطبيق (اسم الحزمة ، إصدار التطبيق). تستخدم للتشخيصات وتحليلات الاستخدام.
  • تكوين API (مثل المفوضين قيد الاستخدام). تستخدم للتشخيصات وتحليلات الاستخدام.
  • نوع الحدث (مثل إنشاء المترجم والاستدلال). تستخدم للتشخيصات وتحليلات الاستخدام.
  • رموز الخطأ. تستخدم للتشخيص.
  • مقاييس الأداء. تستخدم للتشخيص.

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

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