Google Play পরিষেবাতে LiteRT C API (বিটা)

Google Play পরিষেবাগুলিতে LiteRT রানটাইম আপনাকে আপনার অ্যাপে LiteRT লাইব্রেরিগুলিকে স্ট্যাটিকভাবে বান্ডেল না করে মেশিন লার্নিং (ML) মডেলগুলি চালানোর অনুমতি দেয়৷ এই নির্দেশিকাটি Google Play পরিষেবাগুলির জন্য C API গুলি কীভাবে ব্যবহার করতে হয় তার নির্দেশাবলী প্রদান করে৷

Google Play পরিষেবা C API-এ LiteRT-এর সাথে কাজ করার আগে, নিশ্চিত করুন যে আপনার কাছে CMake বিল্ড টুল ইনস্টল করা আছে।

আপনার বিল্ড কনফিগারেশন আপডেট করুন

LiteRT এর জন্য Play পরিষেবা API অ্যাক্সেস করতে আপনার অ্যাপ প্রকল্প কোডে নিম্নলিখিত নির্ভরতা যোগ করুন:

implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"

তারপর, আপনার মডিউলের build.gradle ফাইলের অ্যান্ড্রয়েড ব্লক আপডেট করে আপনার CMake স্ক্রিপ্ট থেকে C API অ্যাক্সেস করতে Prefab বৈশিষ্ট্যটি সক্ষম করুন:

buildFeatures {
  prefab = true
}

আপনাকে অবশেষে আপনার CMake স্ক্রিপ্টে নির্ভরতা হিসাবে AAR থেকে আমদানি করা প্যাকেজ tensorflowlite_jni_gms_client যোগ করতে হবে:

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 কল করার আগে আপনাকে অবশ্যই আপনার 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-গুলিকে আহ্বান করতে পারেন৷

নেটিভ কোড বাস্তবায়ন

আপনার নেটিভ কোড সহ Google Play পরিষেবাগুলিতে LiteRT ব্যবহার করতে, আপনি নিম্নলিখিতগুলির মধ্যে একটি করতে পারেন:

  • আপনার জাভা কোড থেকে নেটিভ ফাংশন কল করতে নতুন JNI ফাংশন ঘোষণা করুন
  • আপনার বিদ্যমান নেটিভ সি কোড থেকে LiteRT নেটিভ এপিআই কল করুন।

JNI ফাংশন:

আপনি একটি নতুন JNI ফাংশন ঘোষণা করতে পারেন যাতে জাভা/কোটলিনে ঘোষিত LiteRT রানটাইম আপনার নেটিভ কোডে অ্যাক্সেসযোগ্য হয়:

জাভা

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

তারপরে আপনি আপনার জাভা/কোটলিন কোড থেকে আপনার সি ফাংশনগুলিকে কল করতে পারেন:

জাভা

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-এর সাথে TfLite অন্তর্ভুক্ত করতে উপযুক্ত API হেডার ফাইল অন্তর্ভুক্ত করুন:

#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);

Google Play পরিষেবাগুলির সাথে LiteRT নেটিভ API শিরোনামগুলি নিয়মিত LiteRT C API- এর মতো একই API প্রদান করে, যা অবমূল্যায়িত বা পরীক্ষামূলক বৈশিষ্ট্যগুলি বাদ দিয়ে৷ আপাতত c_api.h , c_api_types.h এবং common.h হেডার থেকে ফাংশন এবং প্রকারগুলি উপলব্ধ। অনুগ্রহ করে মনে রাখবেন যে c_api_experimental.h হেডার থেকে ফাংশন সমর্থিত নয়।

আপনি tflite.h অন্তর্ভুক্ত করে Google Play পরিষেবাগুলির সাথে LiteRT-এর জন্য নির্দিষ্ট ফাংশনগুলি ব্যবহার করতে পারেন।