TensorFlow Lite در زمان اجرا سرویسهای Google Play به شما امکان میدهد مدلهای یادگیری ماشینی (ML) را بدون بستهبندی ایستا کتابخانههای TensorFlow Lite در برنامه خود اجرا کنید. این راهنما دستورالعمل هایی در مورد نحوه استفاده از C API برای خدمات Google Play ارائه می دهد.
قبل از کار با TensorFlow Lite در Google Play Services C API، مطمئن شوید که ابزار ساخت CMake را نصب کرده اید.
پیکربندی ساخت خود را به روز کنید
برای دسترسی به API خدمات Play برای TensorFlow Lite، وابستگیهای زیر را به کد پروژه برنامه خود اضافه کنید:
implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"
سپس، با بهروزرسانی بلوک اندرویدی فایل build.gradle ماژول، ویژگی Prefab را برای دسترسی به C API از اسکریپت CMake خود فعال کنید:
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)
زمان اجرا TensorFlow Lite را راه اندازی کنید
قبل از فراخوانی TensorFlow Lite Native API، باید زمان اجرا TfLiteNative
در کد جاوا/کوتلین خود مقداردهی کنید.
جاوا
Task tfLiteInitializeTask = TfLiteNative.initialize(context);
کاتلین
val tfLiteInitializeTask: Task= TfLiteNative.initialize(context)
با استفاده از Google Play Services Task API، TfLiteNative.initialize
به طور ناهمزمان زمان اجرا TFLite را از سرویس های Google Play در فرآیند زمان اجرا برنامه شما بارگیری می کند. از addOnSuccessListener()
استفاده کنید تا مطمئن شوید که کار TfLite.initialize()
قبل از اجرای کدی که به API های TensorFlow Lite دسترسی دارد کامل می شود. هنگامی که کار با موفقیت انجام شد، می توانید تمام API های موجود TFLite Native را فراخوانی کنید.
پیاده سازی کد بومی
برای استفاده از TensorFlow Lite در سرویسهای Google Play با کد بومی خود، میتوانید یکی از موارد زیر را انجام دهید:
- توابع جدید JNI را برای فراخوانی توابع بومی از کد جاوا خود اعلام کنید
- TensorFlow Lite Native API را از کد C موجود خود فراخوانی کنید.
توابع JNI:
میتوانید یک تابع جدید JNI را اعلام کنید تا زمان اجرا TensorFlow Lite اعلام شده در جاوا/کوتلین برای کد بومی شما به شرح زیر قابل دسترسی باشد:
جاوا
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); }
کاتلین
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 خود را از کد جاوا/کوتلین خود فراخوانی کنید:
جاوا
tfLiteHandleTask.onSuccessTask(unused -> { TfLiteJni jni = new TfLiteJni(); jni.loadModel(getAssets(), "add.bin"); //... });
کاتلین
tfLiteHandleTask.onSuccessTask { val jni = TfLiteJni() jni.loadModel(assets, "add.bin") // ... }
TensorFlow Lite در کد C
فایل هدر API مناسب را برای گنجاندن TfLite با API خدمات Google Play اضافه کنید:
#include "tensorflow/lite/c/c_api.h"
سپس می توانید از API معمولی TensorFlow Lite C استفاده کنید:
auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);
سرصفحههای Native API سرویسهای Google Play با TensorFlow Lite همان API معمولی TensorFlow Lite C را ارائه میکنند، به استثنای ویژگیهایی که منسوخ شده یا آزمایشی هستند. در حال حاضر توابع و انواع هدرهای c_api.h
، c_api_types.h
و common.h
در دسترس هستند. لطفاً توجه داشته باشید که توابع از هدر c_api_experimental.h
پشتیبانی نمی شوند.
میتوانید از توابع خاص TensorFlow Lite با سرویسهای Google Play با گنجاندن tflite.h
استفاده کنید.