يتيح لك LiteRT تشغيل الجهاز نماذج التعلم (ML) دون تجميع مكتبات LiteRT بشكل ثابت في تطبيقك. يقدّم هذا الدليل تعليمات حول كيفية استخدام واجهات برمجة التطبيقات C API في Google. خدمات Play
قبل استخدام LiteRT في واجهة C API ضمن "خدمات Google Play"، تأكَّد من تثبيت أداة إنشاء CMake.
تعديل إعدادات تصميمك
يُرجى إضافة الاعتماديات التالية إلى رمز مشروع تطبيقك للوصول إلى واجهة برمجة تطبيقات الخدمات لـ LiteRT:
implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"
بعد ذلك، قم بتمكين Prefab الوصول إلى واجهة برمجة التطبيقات C من خلال نص CMake البرمجي من خلال تعديل كتلة Android في ملف data.gradle الخاص بالوحدة:
buildFeatures {
prefab = true
}
يجب أخيرًا إضافة الحزمة tensorflowlite_jni_gms_client
التي تم استيرادها
من AAR كتبعية في نص CMake البرمجي:
find_package(tensorflowlite_jni_gms_client REQUIRED CONFIG)
target_link_libraries(tflite-jni # your JNI lib target
tensorflowlite_jni_gms_client::tensorflowlite_jni_gms_client
android # other deps for your target
log)
# Also add -DTFLITE_IN_GMSCORE -DTFLITE_WITH_STABLE_ABI
# to the C/C++ compiler flags.
add_compile_definitions(TFLITE_IN_GMSCORE)
add_compile_definitions(TFLITE_WITH_STABLE_ABI)
إعداد بيئة تشغيل LiteRT
قبل استدعاء واجهة برمجة التطبيقات LiteRT Native API، يجب عليك تهيئة
هي بيئة تشغيل TfLiteNative
في رمز Java/Kotlin.
Java
Task tfLiteInitializeTask = TfLiteNative.initialize(context);
Kotlin
val tfLiteInitializeTask: Task= TfLiteNative.initialize(context)
باستخدام واجهة برمجة تطبيقات "مهام Google" في "خدمات Google Play"، TfLiteNative.initialize
التحميل غير المتزامن لوقت تشغيل TFLite من خدمات Google Play إلى
وقت تشغيل التطبيق. استخدِم "addOnSuccessListener()
" للتأكّد من
تكتمل مهمة واحدة (TfLite.initialize()
) قبل تنفيذ الرمز البرمجي الذي يمكنه الوصول إلى البيانات.
واجهات برمجة تطبيقات LiteRT بعد اكتمال المهمة بنجاح، يمكنك استدعاء
جميع واجهات برمجة تطبيقات TFLite الأصلية المتاحة.
تنفيذ الرموز البرمجية الأصلية
ولاستخدام LiteRT في خدمات Google Play باستخدام رمزك الأصلي، يمكنك إجراء ما يلي: واحد مما يلي:
- الإعلان عن دوال JNI الجديدة لاستدعاء الدوال الأصلية من رمز Java
- يمكنك استدعاء واجهة برمجة التطبيقات LiteRT Native API من رمز C الأصلي الحالي.
دوال JNI:
يمكنك الإعلان عن دالة JNI جديدة للإشارة إلى بيئة تشغيل LiteRT في Java/Kotlin يمكن الوصول إليها من خلال التعليمات البرمجية الأصلية على النحو التالي:
Java
package com.google.samples.gms.tflite.c; public class TfLiteJni { static { System.loadLibrary("tflite-jni"); } public TfLiteJni() { /**/ }; public native void loadModel(AssetManager assetManager, String assetName); public native float[] runInference(float[] input); }
Kotlin
package com.google.samples.gms.tflite.c class TfLiteJni() { companion object { init { System.loadLibrary("tflite-jni") } } external fun loadModel(assetManager: AssetManager, assetName: String) external fun runInference(input: FloatArray): FloatArray }
جارٍ مطابقة الدالتين الأصليتين loadModel
وrunInference
:
#ifdef __cplusplus
extern "C" {
#endif
void Java_com_google_samples_gms_tflite_c_loadModel(
JNIEnv *env, jobject tflite_jni, jobject asset_manager, jstring asset_name){
//...
}
jfloatArray Java_com_google_samples_gms_tflite_c_TfLiteJni_runInference(
JNIEnv* env, jobject tfliteJni, jfloatArray input) {
//...
}
#ifdef __cplusplus
} // extern "C".
#endif
يمكنك بعد ذلك استدعاء دوال C من كود Java/Kotlin:
Java
tfLiteHandleTask.onSuccessTask(unused -> { TfLiteJni jni = new TfLiteJni(); jni.loadModel(getAssets(), "add.bin"); //... });
Kotlin
tfLiteHandleTask.onSuccessTask { val jni = TfLiteJni() jni.loadModel(assets, "add.bin") // ... }
LiteRT في التعليمة البرمجية C
يجب تضمين ملف عنوان واجهة برمجة التطبيقات المناسب لتضمين TfLite مع Google Play. واجهة برمجة تطبيقات الخدمات:
#include "tensorflow/lite/c/c_api.h"
ويمكنك بعد ذلك استخدام واجهة LiteRT C API العادية:
auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);
يوفّر الإصدار LiteRT مع عناوين واجهة برمجة التطبيقات الأصلية في "خدمات Google Play"
نفس واجهة برمجة التطبيقات مثل واجهة برمجة التطبيقات العادية
LiteRT C API، باستثناء
ميزات متوقّفة نهائيًا أو تجريبية. في الوقت الحالي، الدوال وأنواع
من العناوين c_api.h
وc_api_types.h
وcommon.h
متاحة. من فضلك
يُرجى العلم أنّ الدوال من عنوان c_api_experimental.h
غير متاحة.
يمكنك استخدام وظائف خاصة بـ LiteRT مع "خدمات Google Play" من خلال
بما في ذلك tflite.h
.