ويمكن أيضًا الوصول إلى TensorFlow Lite في خدمات Google Play باستخدام واجهات برمجة تطبيقات Java، بالإضافة إلى Native API. وبشكل خاص، يتوفر TensorFlow Lite في خدمات Google Play من خلال واجهة برمجة تطبيقات TensorFlow Lite للترجمة الفورية.
استخدام واجهات برمجة التطبيقات الخاصة بميزة "الترجمة الفورية"
توفّر واجهة برمجة التطبيقات TensorFlow Lite الترجمة الفورية، التي يوفّرها وقت تشغيل TensorFlow، واجهة للأغراض العامة لإنشاء نماذج تعلُّم الآلة وتشغيلها. يُرجى استخدام الخطوات التالية لإجراء الاستنتاجات من خلال "واجهة برمجة التطبيقات للترجمة الفورية" باستخدام TensorFlow Lite في وقت تشغيل "خدمات Google Play".
1- إضافة تبعيات المشروع
أضِف التبعيات التالية إلى رمز مشروع تطبيقك للوصول إلى Playservices API for 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:
Kotlin
val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }
Java
Task<Void> initializeTask = TfLite.initialize(context);
3- إنشاء مترجم وضبط خيار وقت التشغيل
يمكنك إنشاء مترجم باستخدام InterpreterApi.create()
وإعداده لاستخدام
وقت تشغيل "خدمات Google Play" من خلال طلب الرمز InterpreterApi.Options.setRuntime()
،
كما هو موضّح في المثال التالي للرمز:
Kotlin
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) }
Java
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()
لإنشاء مترجم فوري:
Kotlin
import androidx.lifecycle.lifecycleScope ... lifecycleScope.launchWhenStarted { // uses coroutine initializeTask.await() }
Java
@BackgroundThread InterpreterApi initializeInterpreter() { Tasks.await(initializeTask); return InterpreterApi.create(...); }
4. تنفيذ الاستنتاجات
باستخدام كائن interpreter
الذي أنشأته، استدعِ الطريقة run()
لإنشاء استنتاج.
Kotlin
interpreter.run(inputBuffer, outputBuffer)
Java
interpreter.run(inputBuffer, outputBuffer);
تسريع الأجهزة
يتيح لك TensorFlow Lite تسريع أداء نموذجك باستخدام معالِجات أجهزة متخصصة، مثل وحدات معالجة الرسومات (GPU). يمكنك الاستفادة من هذه المعالجات المتخصصة باستخدام برامج تشغيل أجهزة تُسمى المفوَّضين.
يتم توفير تفويض وحدة معالجة الرسومات من خلال "خدمات Google Play" ويتم تحميله بشكل ديناميكي، تمامًا مثل إصدارات "خدمات Play" من واجهة برمجة التطبيقات الخاصة بميزة "الترجمة الفورية".
جارٍ التحقّق من توافق الجهاز
لا تتوافق بعض الأجهزة مع ميزة تسريع أجهزة وحدة معالجة الرسومات باستخدام TFLite. للحدّ من الأخطاء والأعطال المحتملة، استخدِم طريقة TfLiteGpu.isGpuDelegateAvailable
للتحقّق مما إذا كان الجهاز متوافقًا مع المستخدم المفوَّض الخاص بوحدة معالجة الرسومات.
استخدِم هذه الطريقة للتأكّد من توافق الجهاز مع وحدة معالجة الرسومات، واستخدِم وحدة المعالجة المركزية (CPU) كوحدة معالجة احتياطية عندما لا تكون وحدة معالجة الرسومات غير متوافقة.
useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)
بعد توفّر متغيّر مثل useGpuTask
، يمكنك استخدامه لتحديد ما إذا كانت الأجهزة تستخدم تفويض وحدة معالجة الرسومات.
Kotlin
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) }
Java
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) مع واجهات برمجة تطبيقات للترجمة الفورية
لاستخدام تفويض وحدة معالجة الرسومات مع واجهات برمجة تطبيقات "الترجمة الفورية":
عدِّل تبعيات المشروع لاستخدام تفويض وحدة معالجة الرسومات من "خدمات Play":
implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
تفعيل خيار تفويض وحدة معالجة الرسومات في إعداد TFlite:
Kotlin
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build())
Java
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build());
فعِّل تفويض وحدة معالجة الرسومات في خيارات الترجمة الفورية: اضبط الشركة المصنّعة المفوَّضة على GpuDelegateProducts عن طريق الاتصال بـ
addDelegateFactory() within
intererApi.Options()`:Kotlin
val interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(GpuDelegateFactory())
Java
Options interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(new GpuDelegateFactory());
نقل البيانات من منصة TensorFlow Lite المستقلة
إذا كنت تنوي نقل تطبيقك من واجهة TensorFlow Lite المستقلة إلى واجهة برمجة تطبيقات خدمات Play، يمكنك مراجعة الإرشادات الإضافية التالية لتعديل رمز مشروع التطبيق:
- راجِع قسم القيود في هذه الصفحة للتأكّد من توافق حالة الاستخدام.
- قبل تحديث التعليمات البرمجية، نفِّذ عمليات فحص للأداء والدقة لنماذجك، خاصةً إذا كنت تستخدم إصدارات TensorFlow Lite السابقة من الإصدار 2.1، بحيث يكون لديك أساس للمقارنة مع التنفيذ الجديد.
- في حال نقل كل الرموز البرمجية لاستخدام واجهة برمجة التطبيقات لخدمات Play في
TensorFlow Lite، عليك إزالة التبعيات الحالية لمكتبة
وقت التشغيل من TensorFlow Lite (الإدخالات التي تضم
org.tensorflow:tensorflow-lite:*
) من ملف Build.gradle بحيث يمكنك تقليل حجم التطبيق. - حدد جميع مواضع ورود إنشاء عنصر
new Interpreter
في الرمز الخاص بك، وعدِّل كل موضع بحيث يستخدم استدعاء intererApi.create(). يتميز الإصدار الجديد TfLite.originalize غير متزامن، مما يعني أنه في معظم الحالات لا يكون بديلاً عن الاستقبال: يجب عليك تسجيل مستمع عند اكتمال المكالمة. يمكنك الرجوع إلى مقتطف الرمز في رمز الخطوة 3. - أضِف
import org.tensorflow.lite.InterpreterApi;
وimport org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime;
إلى أي ملفات مصدر باستخدام الصفَّينorg.tensorflow.lite.Interpreter
أوorg.tensorflow.lite.InterpreterApi
. - إذا كان أي من الاستدعاءات الناتجة إلى
InterpreterApi.create()
يحتوي على وسيطة واحدة فقط، ألحِقnew InterpreterApi.Options()
إلى قائمة الوسيطات. - ألحِق
.setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
بالوسيطة الأخيرة لأي استدعاءات إلىInterpreterApi.create()
. - استبدِل جميع مواضع الورود الأخرى للفئة
org.tensorflow.lite.Interpreter
بـorg.tensorflow.lite.InterpreterApi
.
إذا أردت استخدام منصة TensorFlow Lite المستقلة وواجهة برمجة تطبيقات "خدمات Play" جنبًا إلى جنب، يجب استخدام الإصدار 2.9 من TensorFlow Lite (أو إصدار أحدث). TensorFlow Lite 2.8 والإصدارات الأقدم غير متوافقة مع إصدار واجهة برمجة التطبيقات لخدمات Play.