يمكن أيضًا الوصول إلى LiteRT في خدمات Google Play باستخدام واجهات برمجة تطبيقات Java، في بالإضافة إلى واجهة برمجة التطبيقات Native API. وعلى وجه الخصوص، LiteRT في Google Play هذه الخدمات متاحة من خلال مترجم LiteRT API.
استخدام واجهات برمجة التطبيقات الخاصة بميزة "الترجمة الفورية"
إنّ واجهة برمجة التطبيقات LiteRT Indexer API، المتوفّرة من خلال وقت تشغيل TensorFlow، توفّر واجهة للأغراض العامة لإنشاء نماذج تعلُّم الآلة وتشغيلها. يمكنك استخدام الخطوات التالية لتنفيذ الاستنتاجات باستخدام واجهة برمجة التطبيقات Indexer API باستخدام TensorFlow. الإصدار البسيط في وقت تشغيل "خدمات Google Play"
1. إضافة تبعيات المشروع
يُرجى إضافة الاعتماديات التالية إلى رمز مشروع تطبيقك للوصول إلى واجهة برمجة تطبيقات الخدمات لـ LiteRT:
dependencies {
...
// LiteRT dependencies for Google Play services
implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
// Optional: include LiteRT Support Library
implementation 'com.google.android.gms:play-services-tflite-support:16.0.1'
...
}
2. إضافة إعداد LiteRT
إعداد مكوّن LiteRT لواجهة برمجة تطبيقات "خدمات Google Play" قبل استخدام واجهات برمجة تطبيقات LiteRT:
Kotlin
val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }
Java
Task<Void> initializeTask = TfLite.initialize(context);
3- إنشاء مترجم فوري وضبط خيار وقت التشغيل
يمكنك إنشاء مترجم فوري باستخدام ميزة "InterpreterApi.create()
" وإعداده لاستخدام هذه الميزة.
من خلال الاتصال بالرقم InterpreterApi.Options.setRuntime()
، بيئة تشغيل "خدمات Google Play"
كما هو موضح في مثال الرمز التالي:
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);
تسريع الأجهزة
يتيح لك LiteRT تسريع أداء نموذجك باستخدام معالجات الأجهزة المتخصصة، مثل وحدات معالجة الرسومات (GPUs). إِنْتَ الاستفادة من هذه المعالجات المتخصصة باستخدام برامج تشغيل للأجهزة تسمى المفوِّضون.
يتم توفير المُفوَّض من وحدة معالجة الرسومات من خلال خدمات 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; });
وحدة معالجة رسومات مزوّدة بواجهات برمجة تطبيقات للترجمة الفورية
لاستخدام التفويض من وحدة معالجة الرسومات مع واجهات برمجة التطبيقات للترجمة:
تعديل تبعيات المشروع لاستخدام تفويض وحدة معالجة الرسومات من "خدمات 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());
تفعيل المستخدمين المفوَّضين من وحدة معالجة الرسومات في خيارات الترجمة الفورية: ضبط المصنع المفوَّض على GpuDelegatefactory من خلال الاتصال بـ
addDelegateFactory() within
دخولerApi.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());
النقل من LiteRT المستقل
إذا كنت تخطّط لنقل تطبيقك من الإصدار LiteRT المستقل إلى Play Services API، يُرجى مراجعة الإرشادات الإضافية التالية لتعديل رمز مشروع التطبيق:
- راجِع قسم القيود في هذه الصفحة للتأكّد من أنّ: بالإضافة إلى حالة الاستخدام.
- قبل تحديث الرمز، يُرجى إجراء عمليات تحقّق من الأداء والدقة ، خاصةً إذا كنت تستخدم إصدارات LiteRT سابقًا من الإصدار 2.1، لذا يكون لديك أساس للمقارنة مع التنفيذ.
- في حال نقلتَ كل الرموز البرمجية لاستخدام Play Services API في
LiteRT، يجب إزالة وقت تشغيل LiteRT الحالي
المكتبة (الإدخالات التي تحتوي على
org.tensorflow:tensorflow-lite:*
) من create.gradle حتى يمكنك تقليل حجم التطبيق. - حدِّد جميع مرات إنشاء العنصر
new Interpreter
في الرمز البرمجي. وتعديل كل منها بحيث يستخدم استدعاء IndexerApi.create(). تشير رسالة الأشكال البيانية ملف TfLite.Initialize الجديد غير متزامن، مما يعني في معظم الأحيان أنه ليس الاستبدال المنفصل: يجب تسجيل مستمع عند تشغيل المكالمة تكتمل. راجِع مقتطف الرمز في رمز الخطوة 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
.
إذا كنت تريد استخدام LiteRT مستقلّة وواجهة برمجة تطبيقات "خدمات Play" جنبًا إلى جنب، عليك استخدام LiteRT 2.9 (أو إصدار أحدث). LiteRT 2.8 والإصدارات الأقدم منه غير متوافقة مع إصدار واجهة برمجة التطبيقات لخدمات Play.