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

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

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

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

TensorFlow Lite के लिए Play services API को ऐक्सेस करने के लिए, अपने ऐप्लिकेशन प्रोजेक्ट कोड में ये डिपेंडेंसी जोड़ें:

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

इसके बाद, अपने मॉड्यूल की बिल्ड.gradle फ़ाइल के Android ब्लॉक को अपडेट करके, CMake स्क्रिप्ट से C API ऐक्सेस करने के लिए, Prefab सुविधा चालू करें:

buildFeatures {
  prefab = true
}

आखिर में, आपको अपनी C Maker स्क्रिप्ट में, एएआर से इंपोर्ट किए गए 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)

TensorFlow Lite रनटाइम शुरू करें

TensorFlow Lite 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() का इस्तेमाल करके, यह पक्का करें कि TensorFlow Lite API को ऐक्सेस करने वाले कोड को एक्ज़ीक्यूट करने से पहले TfLite.initialize() टास्क पूरा हो गया हो. टास्क पूरा होने के बाद, सभी उपलब्ध TFLite Native API को शुरू करें.

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

Google Play services में TensorFlow Lite का इस्तेमाल अपने नेटिव कोड के साथ करने के लिए, इनमें से कोई एक काम किया जा सकता है:

  • अपने Java कोड के नेटिव फ़ंक्शन को कॉल करने के लिए, नए JNI फ़ंक्शन एलान करें
  • अपने मौजूदा नेटिव सी कोड से, TensorFlow Lite Native API का इस्तेमाल करें.

JNI फ़ंक्शन:

आपके पास नए JNI फ़ंक्शन का एलान करके, Java/Kotlin में एलान किए गए TensorFlow Lite रनटाइम को अपने नेटिव कोड से ऐक्सेस करने का विकल्प है. इसके लिए, यहां दिया गया तरीका अपनाएं:

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 कोड से सी फ़ंक्शन को कॉल किया जा सकता है:

Java

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

Kotlin

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

सी कोड में TensorFlow Lite

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

#include "tensorflow/lite/c/c_api.h"

इसके बाद, सामान्य TensorFlow Lite C API का इस्तेमाल किया जा सकता है:

auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);

Google Play services के नेटिव एपीआई हेडर वाले TensorFlow Lite, सामान्य TensorFlow Lite C API जैसा ही एपीआई उपलब्ध कराते हैं. हालांकि, इसमें वे सुविधाएं शामिल नहीं हैं जो अब काम नहीं करतीं या प्रयोग के तौर पर उपलब्ध नहीं हैं. फ़िलहाल, c_api.h, c_api_types.h, और common.h हेडर के फ़ंक्शन और टाइप उपलब्ध हैं. कृपया ध्यान दें कि c_api_experimental.h हेडर के फ़ंक्शन इस्तेमाल नहीं किए जा सकते.

Google Play Services के साथ, TensorFlow Lite के खास फ़ंक्शन का इस्तेमाल किया जा सकता है. इसके लिए, tflite.h को शामिल करें.