Google Play পরিষেবার রানটাইমে LiteRT আপনাকে আপনার অ্যাপে LiteRT লাইব্রেরিগুলিকে স্ট্যাটিকভাবে বান্ডেল না করে মেশিন লার্নিং (ML) মডেলগুলি চালাতে দেয়৷ এই নির্দেশিকাটি Google Play পরিষেবাগুলির জন্য C বা C++ APIগুলি কীভাবে ব্যবহার করতে হয় তার নির্দেশাবলী প্রদান করে৷
Google Play পরিষেবা C API বা C++ API-এ LiteRT-এর সাথে কাজ করার আগে, নিশ্চিত করুন যে আপনার কাছে CMake বিল্ড টুল ইনস্টল করা আছে।
আপনার বিল্ড কনফিগারেশন আপডেট করুন
(1) LiteRT এর জন্য Play পরিষেবা API অ্যাক্সেস করতে আপনার অ্যাপ প্রকল্প কোডে নিম্নলিখিত নির্ভরতা যোগ করুন:
implementation "com.google.android.gms:play-services-tflite-java:16.4.0"
উল্লেখ্য যে যদিও প্যাকেজের নাম -java
এ শেষ হয়, সেই প্যাকেজে C এবং C++ API গুলিও রয়েছে।
(2) তারপর, আপনার মডিউলের build.gradle ফাইলের অ্যান্ড্রয়েড ব্লক আপডেট করে আপনার CMake স্ক্রিপ্ট থেকে C API অ্যাক্সেস করতে Prefab বৈশিষ্ট্যটি সক্ষম করুন:
buildFeatures {
prefab = true
}
(3) [শুধুমাত্র C++ API] আপনি যদি C++ API ব্যবহার করেন, তাহলে tflite-java-extract-cpp-sdk.gradle আপনার প্রোজেক্টে, আপনার app
ডিরেক্টরিতে অনুলিপি করুন এবং আপনার অ্যাপের গ্রেডল স্ক্রিপ্টের শুরুতে নিম্নলিখিতটি যোগ করুন ( যেমন app/build.gradle
):
apply from: 'tflite-java-extract-cpp-sdk.gradle'
play-services-tflite-java
জন্য AAR ফাইল থেকে C++ SDK স্বয়ংক্রিয়ভাবে আনপ্যাক করার জন্য এতে গ্রেডল কোড রয়েছে।
(৪) [শুধুমাত্র C++ API] আপনি যদি C++ API ব্যবহার করেন, তাহলে আপনার অ্যাপের CMake কনফিগারেশন ফাইল (সাধারণত CMakeLists.txt
) ধারণ করে এমন ডিরেক্টরি খুঁজুন; এই ডিরেক্টরিটি সাধারণত আপনার app/src/main/cpp
ডিরেক্টরি। তারপর Findtflite_cc_api.cmake কপি করুন আপনার প্রোজেক্টে, সেই ডিরেক্টরির একটি নতুন Modules
সাবডিরেক্টরিতে। এটিতে এমন কোড রয়েছে যা C++ SDK কে আগের ধাপে Gradle স্ক্রিপ্ট দ্বারা আনপ্যাক করা হয়েছে।
(5) আপনাকে অবশেষে প্যাকেজ tensorflowlite_jni_gms_client
যোগ করতে হবে, এবং C++ API-এর জন্যও প্যাকেজ tflite_cc_api
, উভয়ই AAR থেকে আমদানি করা হয়েছে, আপনার CMake স্ক্রিপ্টে নির্ভরতা হিসাবে:
গ
find_package(tensorflowlite_jni_gms_client REQUIRED CONFIG) # Set up C/C++ compiler flags to enable use of TFLite in Play services # (rather than regular TFLite bundled with the app). add_compile_definitions(TFLITE_IN_GMSCORE) add_compile_definitions(TFLITE_WITH_STABLE_ABI) target_link_libraries(tflite-jni # your JNI lib target tensorflowlite_jni_gms_client::tensorflowlite_jni_gms_client android # other deps for your target log)
সি++
# Set up TFLite in Play services C API (tensorflowlite_jni_gms_client) dependency. find_package(tensorflowlite_jni_gms_client REQUIRED CONFIG) # Set up TFLite in Play services C++ API (tflite_cc_api) dependency. list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Modules") find_package(tflite_cc_api REQUIRED MODULE) include_directories(${tflite_cc_api_INCLUDE_DIR}) add_subdirectory(${tflite_cc_api_DIR} tflite_cc_api_build) # Set up C/C++ compiler flags to enable use of TFLite in Play services # (rather than regular TFLite bundled with the app). add_compile_definitions(TFLITE_IN_GMSCORE) add_compile_definitions(TFLITE_WITH_STABLE_ABI) target_link_libraries(tflite-jni # your JNI lib target tflite_cc_api::tflite_cc_api tensorflowlite_jni_gms_client::tensorflowlite_jni_gms_client android # other deps for your target log)
LiteRT রানটাইম শুরু করুন
LiteRT Native API কল করার আগে আপনাকে অবশ্যই আপনার Java বা Kotlin কোডে TfLiteNative
রানটাইম শুরু করতে হবে।
জাভা
Task tfLiteInitializeTask = TfLiteNative.initialize(context);
কোটলিন
val tfLiteInitializeTask: Task= TfLiteNative.initialize(context)
Google Play পরিষেবাগুলি টাস্ক API ব্যবহার করে, TfLiteNative.initialize
অ্যাসিঙ্ক্রোনাসভাবে Google Play পরিষেবাগুলি থেকে আপনার অ্যাপ্লিকেশনের রানটাইম প্রক্রিয়াতে TFLite রানটাইম লোড করে৷ LiteRT API অ্যাক্সেস করে এমন কোড কার্যকর করার আগে TfLite.initialize()
টাস্ক সম্পূর্ণ হয়েছে তা নিশ্চিত করতে addOnSuccessListener()
ব্যবহার করুন। একবার কাজটি সফলভাবে সম্পন্ন হলে, আপনি সমস্ত উপলব্ধ TFLite Native API-গুলিকে আহ্বান করতে পারেন৷
নেটিভ কোড বাস্তবায়ন
আপনার C/C++ কোড সহ Google Play পরিষেবাগুলিতে LiteRT ব্যবহার করতে, আপনি নিম্নলিখিতগুলির একটি (বা উভয়) করতে পারেন:
- আপনার জাভা কোড থেকে C বা C++ ফাংশন কল করার জন্য নতুন JNI ফাংশন ঘোষণা করুন
- আপনার বিদ্যমান C বা C++ কোড থেকে LiteRT Native API কল করুন।
JNI ফাংশন
C/C++ কোডে ঘোষিত LiteRT রানটাইমকে আপনার Java/Kotlin কোডে অ্যাক্সেসযোগ্য করার জন্য আপনি নতুন JNI ফাংশন ঘোষণা করতে পারেন:
জাভা
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); // For example. }
কোটলিন
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 // For example. }
নিম্নলিখিত 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/C++ ফাংশনগুলিকে কল করতে পারেন:
জাভা
tfLiteHandleTask.onSuccessTask(unused -> { TfLiteJni jni = new TfLiteJni(); jni.loadModel(getAssets(), "add.bin"); //... });
কোটলিন
tfLiteHandleTask.onSuccessTask { val jni = TfLiteJni() jni.loadModel(assets, "add.bin") // ... }
নেটিভ কোডে LiteRT
Google Play পরিষেবা API-এর সাথে LiteRT অন্তর্ভুক্ত করতে উপযুক্ত API হেডার ফাইল অন্তর্ভুক্ত করুন:
গ
#include "tensorflow/lite/c/c_api.h"
সি++
#include "tensorflow/lite/interpreter.h" #include "tensorflow/lite/model_builder.h"
তারপরে আপনি নিয়মিত LiteRT C বা C++ API ব্যবহার করতে পারেন:
গ
TfLiteModel* model = TfLiteModelCreate(model_asset, model_asset_length); // ... TfLiteInterpreterOptions* options = TfLiteInterpreterOptionsCreate(); // ... TfLiteInterpreter* interpreter = TfLiteInterpreterCreate(model, options);
সি++
// Load the model. auto model = tflite::FlatBufferModel::VerifyAndBuildFromBuffer( model_asset, model_asset_length); ... // Initialize the interpreter. BuiltinOpResolver op_resolver; InterpreterBuilder interpreter_builder(*model, op_resolver); interpreter_builder(&interpreter); std::unique_ptr<Interpreter>` interpreter; interpreter_builder(&interpreter);
সমর্থিত API
গ
Google Play পরিষেবাগুলির সাথে LiteRT নেটিভ API শিরোনামগুলি নিয়মিত [LiteRT C API](../../api/tflite/c) হিসাবে একই API প্রদান করে, যা অবমূল্যায়িত বা পরীক্ষামূলক বৈশিষ্ট্যগুলি বাদ দিয়ে৷ আপাতত নিম্নলিখিত হেডার থেকে ফাংশন এবং প্রকারগুলি উপলব্ধ। TensorFlow Lite APIstensorflow/lite/c/c_api.h tensorflow/lite/c/c_api_types.h
tensorflow/lite/c/c_api_opaque.h tensorflow/lite/c/common.h tensorflow/lite/c/builtin_op_data.h tensorflow/lite/builtin_ops.h
tensorflow/lite/acceleration/configuration/c/gpu_plugin.h tensorflow/lite/acceleration/configuration/c/xnnpack_plugin.h
সি++
Google Play পরিষেবাগুলির সাথে LiteRT নেটিভ API শিরোনামগুলি নিয়মিত [LiteRT C++ API](../../api/tflite/cc) হিসাবে একই API প্রদান করে, যা অবমূল্যায়িত বা পরীক্ষামূলক বৈশিষ্ট্যগুলি বাদ দিয়ে এবং কয়েকটি ছোট ব্যতিক্রম উল্লেখ করা হয় পরে এই বিভাগে। নিম্নলিখিত শিরোনাম থেকে কার্যকারিতা উপলব্ধ:tensorflow/lite/model_builder.h tensorflow/lite/interpreter_builder.h tensorflow/lite/interpreter.h tensorflow/lite/signature_runner.h tensorflow/lite/acceleration/configuration/delegate_registry.h tensorflow/lite/kernels/builtin_op_kernels.h tensorflow/lite/kernels/register.h tensorflow/lite/tools/verifier.h
Interpreter::variables() Interpreter::nodes_size() Interpreter::node_and_registration(int node_index) Interpreter::kTensorsReservedCapacity Interpreter::kTensorsCapacityHeadroom Interpreter::OpProfilingString(const TfLiteRegistration&, const TfLiteNode*) Interpreter::SetExternalContext(TfLiteExternalContextType type, TfLiteExternalContext* ctx)