Google Play services C API (बीटा वर्शन) में LiteRT

Google Play services के रनटाइम में LiteRT की मदद से, मशीन को चलाया जा सकता है ऐसे लर्निंग (एमएल) मॉडल जिनमें LiteRT लाइब्रेरी को स्टैटिक तरीके से बंडल नहीं किया गया हो आपका ऐप्लिकेशन. इस गाइड में Google के लिए C API इस्तेमाल करने का तरीका बताया गया है Play सेवाएं.

Google Play services C API में LiteRT का इस्तेमाल करने से पहले, पक्का करें कि आपके पास CMake बिल्ड टूल इंस्टॉल किया हुआ हो.

अपना बिल्ड कॉन्फ़िगरेशन अपडेट करें

Play को ऐक्सेस करने के लिए, अपने ऐप्लिकेशन के प्रोजेक्ट कोड में इन डिपेंडेंसी जोड़ें LiteRT के लिए सेवाएं एपीआई:

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

इसके बाद, प्रीफ़ैब Android ब्लॉक को अपडेट करके, अपनी CMake स्क्रिप्ट से C API ऐक्सेस करने की सुविधा :

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 को कॉल करने से पहले, आपको आपके Java/Kotlin कोड में TfLiteNative रनटाइम.

Java

Task tfLiteInitializeTask = TfLiteNative.initialize(context);
      

Kotlin

val tfLiteInitializeTask: Task = TfLiteNative.initialize(context)
        

Google Play services Task API का इस्तेमाल करके, TfLiteNative.initialize Google Play services से, TFLite रनटाइम को एसिंक्रोनस रूप से लोड करता है ऐप्लिकेशन की रनटाइम प्रक्रिया के दौरान होता है. addOnSuccessListener() का इस्तेमाल करके पक्का करें कि ऐक्सेस करने वाले कोड को लागू करने से पहले, TfLite.initialize() टास्क पूरा होता है LiteRT API. टास्क पूरा होने के बाद, उसका इस्तेमाल शुरू किया जा सकता है सभी उपलब्ध TFLite Native API के साथ.

नेटिव कोड को लागू करना

अपने स्थानीय कोड के साथ Google Play सेवाओं में LiteRT का इस्तेमाल करने के लिए, ये काम किए जा सकते हैं इनमें से एक:

  • अपने Java कोड से, नेटिव फ़ंक्शन को कॉल करने के लिए, नए JNI फ़ंक्शन का एलान करें
  • अपने मौजूदा नेटिव C कोड से, LiteRT नेटिव एपीआई को कॉल करें.

जेएनआई फ़ंक्शन:

LiteRT रनटाइम का एलान करने के लिए, नए जेएनआई फ़ंक्शन का एलान किया जा सकता है आपके स्थानीय कोड तक पहुंच के लिए:

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

इसके बाद, अपने Java/Kotlin कोड से C फ़ंक्शन को कॉल किया जा सकता है:

Java

tfLiteHandleTask.onSuccessTask(unused -> {
    TfLiteJni jni = new TfLiteJni();
    jni.loadModel(getAssets(), "add.bin");
    //...
});
    

Kotlin

tfLiteHandleTask.onSuccessTask {
    val jni = TfLiteJni()
    jni.loadModel(assets, "add.bin")
    // ...
}
      

C कोड में LiteRT

Google Play में TfLite को शामिल करने के लिए, सही एपीआई हेडर फ़ाइल शामिल करें सेवाएं एपीआई:

#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 services के नेटिव एपीआई हेडर के साथ LiteRT, सामान्य एपीआई के जैसा ही एपीआई LiteRT C API, जिसमें ये शामिल नहीं हैं ऐसी सुविधाएं जो अब काम नहीं करतीं या एक्सपेरिमेंट के तौर पर उपलब्ध हैं. फ़िलहाल, फ़ंक्शन और टाइप c_api.h, c_api_types.h, और common.h हेडर उपलब्ध हैं. प्लीज़ ध्यान दें कि c_api_experimental.h हेडर वाले फ़ंक्शन काम नहीं करते.

Google Play Services के साथ, LiteRT से जुड़े फ़ंक्शन इस्तेमाल किए जा सकते हैं tflite.h सहित.