Google Play सेवाओं C API (बीटा) में TensorFlow Lite

Google Play सेवाओं के रनटाइम में TensorFlow Lite आपको अपने ऐप में TensorFlow Lite लाइब्रेरी को स्थिर रूप से बंडल किए बिना मशीन लर्निंग (ML) मॉडल चलाने की अनुमति देता है। यह मार्गदर्शिका Google Play सेवाओं के लिए C API का उपयोग करने के तरीके पर निर्देश प्रदान करती है।

Google Play सेवाओं C API में TensorFlow Lite के साथ काम करने से पहले, सुनिश्चित करें कि आपके पास CMake बिल्ड टूल इंस्टॉल है।

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

TensorFlow Lite के लिए Play सेवाओं API तक पहुंचने के लिए अपने ऐप प्रोजेक्ट कोड में निम्नलिखित निर्भरताएँ जोड़ें:

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

फिर, अपने मॉड्यूल की बिल्ड.ग्रेडल फ़ाइल के एंड्रॉइड ब्लॉक को अपडेट करके अपनी सीएमके स्क्रिप्ट से सी एपीआई तक पहुंचने के लिए प्रीफ़ैब सुविधा को सक्षम करें:

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)

TensorFlow Lite रनटाइम प्रारंभ करें

TensorFlow Lite Native API को कॉल करने से पहले आपको अपने Java/Kotlin कोड में TfLiteNative रनटाइम प्रारंभ करना होगा।

जावा

Task tfLiteInitializeTask = TfLiteNative.initialize(context);
      

Kotlin

val tfLiteInitializeTask: Task = TfLiteNative.initialize(context)
        

Google Play सेवाओं टास्क एपीआई का उपयोग करते हुए, TfLiteNative.initialize एसिंक्रोनस रूप से Google Play सेवाओं से TFLite रनटाइम को आपके एप्लिकेशन की रनटाइम प्रक्रिया में लोड करता है। यह सुनिश्चित करने के लिए addOnSuccessListener() का उपयोग करें कि TensorFlow Lite API तक पहुंचने वाले कोड को निष्पादित करने से पहले TfLite.initialize() कार्य पूरा हो गया है। एक बार कार्य सफलतापूर्वक पूरा हो जाने पर, आप सभी उपलब्ध टीएफलाइट नेटिव एपीआई को लागू कर सकते हैं।

मूल कोड कार्यान्वयन

अपने मूल कोड के साथ Google Play सेवाओं में TensorFlow Lite का उपयोग करने के लिए, आप निम्न में से एक कार्य कर सकते हैं:

  • अपने जावा कोड से मूल फ़ंक्शंस को कॉल करने के लिए नए जेएनआई फ़ंक्शंस घोषित करें
  • अपने मौजूदा मूल C कोड से TensorFlow Lite Native API को कॉल करें।

जेएनआई कार्य:

आप जावा/कोटलिन में घोषित टेन्सरफ्लो लाइट रनटाइम को अपने मूल कोड तक पहुंच योग्य बनाने के लिए एक नया जेएनआई फ़ंक्शन घोषित कर सकते हैं:

जावा

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

फिर आप अपने सी फ़ंक्शंस को अपने जावा/कोटलिन कोड से कॉल कर सकते हैं:

जावा

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

Kotlin

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

C कोड में TensorFlow Lite

Google Play सेवाओं API के साथ TfLite को शामिल करने के लिए उपयुक्त API हेडर फ़ाइल शामिल करें:

#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 सेवाओं के साथ TensorFlow Lite नेटिव API हेडर नियमित TensorFlow Lite C API के समान API प्रदान करते हैं, उन सुविधाओं को छोड़कर जो अप्रचलित या प्रयोगात्मक हैं। अभी के लिए c_api.h , c_api_types.h और common.h हेडर के फ़ंक्शन और प्रकार उपलब्ध हैं। कृपया ध्यान दें कि c_api_experimental.h हेडर के फ़ंक्शन समर्थित नहीं हैं। दस्तावेज़ ऑनलाइन पाया जा सकता है.

आप tflite.h शामिल करके Google Play सेवाओं के साथ TensorFlow Lite के विशिष्ट कार्यों का उपयोग कर सकते हैं।