Google Play services Java API में LiteRT

Google Play services में LiteRT को Java API का इस्तेमाल करके भी ऐक्सेस किया जा सकता है. नेटिव एपीआई के साथ जोड़ी गई. खास तौर पर, Google Play की सेवाओं में LiteRT, LiteRT इंटरप्रिटर एपीआई के ज़रिए उपलब्ध है.

Interpreter API का इस्तेमाल करना

TensorFlow रनटाइम से मिला LiteRT Translatorer API, इस टूल की मदद से, एमएल मॉडल बनाने और उसे चलाने के लिए, अलग-अलग कामों के लिए एक इंटरफ़ेस दिया गया है. Google Play services के रनटाइम में TensorFlow Lite का इस्तेमाल करके, Interpreter API के साथ अनुमान लगाने के लिए, यह तरीका अपनाएं.

1. प्रोजेक्ट की डिपेंडेंसी जोड़ना

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

dependencies {
...
    // LiteRT dependencies for Google Play services
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
    // Optional: include LiteRT Support Library
    implementation 'com.google.android.gms:play-services-tflite-support:16.0.1'
...
}

2. LiteRT को शुरू करने का तरीका जोड़ना

Google Play services API के LiteRT कॉम्पोनेंट को शुरू करना LiteRT API का इस्तेमाल करने से पहले:

Kotlin

val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }

Java

Task<Void> initializeTask = TfLite.initialize(context);

3. अनुवादक बनाएं और रनटाइम का विकल्प सेट करें

InterpreterApi.create() का इस्तेमाल करके एक अनुवादक बनाएं और इसे इस्तेमाल करने के लिए कॉन्फ़िगर करें Google Play services के रनटाइम की मदद से, InterpreterApi.Options.setRuntime() को कॉल करें. जैसा कि नीचे दिए गए उदाहरण कोड में दिखाया गया है:

Kotlin

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private lateinit var interpreter: InterpreterApi
...
initializeTask.addOnSuccessListener {
  val interpreterOption =
    InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  interpreter = InterpreterApi.create(
    modelBuffer,
    interpreterOption
  )}
  .addOnFailureListener { e ->
    Log.e("Interpreter", "Cannot initialize interpreter", e)
  }

Java

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private InterpreterApi interpreter;
...
initializeTask.addOnSuccessListener(a -> {
    interpreter = InterpreterApi.create(modelBuffer,
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY));
  })
  .addOnFailureListener(e -> {
    Log.e("Interpreter", String.format("Cannot initialize interpreter: %s",
          e.getMessage()));
  });

आपको ऊपर बताए गए तरीके का इस्तेमाल करना चाहिए, क्योंकि यह Android को ब्लॉक करने से बचाता है यूज़र इंटरफ़ेस थ्रेड. अगर आपको थ्रेड को प्रोसेस करने की प्रोसेस को ज़्यादा बारीकी से मैनेज करना है, तो अनुवादक की सुविधा के लिए, Tasks.await() कॉल जोड़ा जा सकता है:

Kotlin

import androidx.lifecycle.lifecycleScope
...
lifecycleScope.launchWhenStarted { // uses coroutine
  initializeTask.await()
}

Java

@BackgroundThread
InterpreterApi initializeInterpreter() {
    Tasks.await(initializeTask);
    return InterpreterApi.create(...);
}

4. अनुमान लगाना

अपने बनाए गए interpreter ऑब्जेक्ट का इस्तेमाल करके, जनरेट करने के लिए run() तरीके को कॉल करें अनुमान.

Kotlin

interpreter.run(inputBuffer, outputBuffer)

Java

interpreter.run(inputBuffer, outputBuffer);

हार्डवेयर से तेज़ी लाने की सुविधा

LiteRT की मदद से, ग्राफ़िक प्रोसेसिंग यूनिट (जीपीयू) जैसे खास हार्डवेयर प्रोसेसर का इस्तेमाल करके, अपने मॉडल की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. आपने लोगों तक पहुंचाया मुफ़्त में हार्डवेयर ड्राइवर का इस्तेमाल करके, इन खास प्रोसेसर का फ़ायदा उठा सकते हैं ऐक्सेस देना.

GPU डेलिगेट, Google Play services की मदद से उपलब्ध कराया जाता है. साथ ही, इसे Interpreter API के Play services वर्शन की तरह ही डाइनैमिक तौर पर लोड किया जाता है.

यह देखना कि यह सुविधा किन डिवाइसों पर काम करती है

सभी डिवाइसों पर, TFLite की मदद से जीपीयू से हार्डवेयर से तेज़ी लाने की सुविधा काम नहीं करती. कार्रवाई करने के लिए गड़बड़ियों और संभावित क्रैश को कम करने के लिए, यह देखने का TfLiteGpu.isGpuDelegateAvailable तरीका कि डिवाइस जीपीयू डेलिगेट के साथ काम करता है.

इस तरीके का इस्तेमाल करके पुष्टि करें कि कोई डिवाइस, जीपीयू के साथ काम करता है या नहीं. साथ ही, जीपीयू के काम न करने पर, सीपीयू का इस्तेमाल फ़ॉलबैक के तौर पर करें.

useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

आपके पास useGpuTask जैसा वैरिएबल होने पर, इसका इस्तेमाल यह तय करने के लिए किया जा सकता है कि डिवाइस जीपीयू डेलिगेट का इस्तेमाल करते हैं.

Kotlin

val interpreterTask = useGpuTask.continueWith { task ->
  val interpreterOptions = InterpreterApi.Options()
      .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  if (task.result) {
      interpreterOptions.addDelegateFactory(GpuDelegateFactory())
  }
  InterpreterApi.create(FileUtil.loadMappedFile(context, MODEL_PATH), interpreterOptions)
}
    

Java

Task<InterpreterApi.Options> interpreterOptionsTask = useGpuTask.continueWith({ task ->
  InterpreterApi.Options options =
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY);
  if (task.getResult()) {
     options.addDelegateFactory(new GpuDelegateFactory());
  }
  return options;
});
    

अनुवादक API के साथ जीपीयू

अनुवादक एपीआई के साथ जीपीयू डेलिगेट का इस्तेमाल करने के लिए:

  1. Play services के GPU डेलिगेट का इस्तेमाल करने के लिए, प्रोजेक्ट की डिपेंडेंसी अपडेट करें:

    implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
    
  2. TFlite को शुरू करने के दौरान, जीपीयू को काम सौंपने का विकल्प चालू करें:

    Kotlin

    TfLite.initialize(context,
      TfLiteInitializationOptions.builder()
        .setEnableGpuDelegateSupport(true)
        .build())
    

    Java

    TfLite.initialize(context,
      TfLiteInitializationOptions.builder()
        .setEnableGpuDelegateSupport(true)
        .build());
    
  3. इंटरप्रेटर के विकल्पों में जीपीयू डेलिगेट की सुविधा चालू करना: addDelegateFactory() withinInterpreterApi.Options()` को कॉल करके, डेलिगेट फ़ैक्ट्री को GpuDelegateFactory पर सेट करें:

    Kotlin

    val interpreterOption = InterpreterApi.Options()
      .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
      .addDelegateFactory(GpuDelegateFactory())
    

    Java

    Options interpreterOption = InterpreterApi.Options()
      .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
      .addDelegateFactory(new GpuDelegateFactory());
    

स्टैंडअलोन LiteRT से माइग्रेट करना

अगर आपको अपने ऐप्लिकेशन को स्टैंड-अलोन LiteRT से Play services API का इस्तेमाल करें. अपने ऐप्लिकेशन को अपडेट करने के लिए, नीचे दिए गए अतिरिक्त दिशा-निर्देश देखें ऐप्लिकेशन प्रोजेक्ट कोड:

  1. इस पेज के सीमाएं सेक्शन की समीक्षा करके, पक्का करें कि इस्तेमाल का उदाहरण दिया गया है.
  2. अपना कोड अपडेट करने से पहले, अपने मॉडल की परफ़ॉर्मेंस और सटीक होने की जांच करें. ऐसा खास तौर पर तब करें, जब LiteRT के 2.1 से पहले के वर्शन का इस्तेमाल किया जा रहा हो. इससे, आपको नए वर्शन की तुलना करने के लिए बेसलाइन मिलेगा.
  3. अगर आपने Play services API का इस्तेमाल करने के लिए, अपने सभी कोड माइग्रेट कर दिए हैं LiteRT का इस्तेमाल करना है, तो आपको मौजूदा LiteRT रनटाइम हटाना होगा लाइब्रेरी डिपेंडेंसी (ऐसी एंट्री जो org.tensorflow:tensorflow-lite:*) आपके create.gradle से फ़ाइल अपलोड करें, ताकि आप अपने ऐप्लिकेशन का साइज़ कम कर सकें.
  4. अपने कोड में new Interpreter ऑब्जेक्ट बनाने की सभी जगहों की पहचान करें और हर जगह में बदलाव करें, ताकि वह InterpreterApi.create() कॉल का इस्तेमाल करे. नया TfLite.initialize असिंक्रोनस है. इसका मतलब है कि ज़्यादातर मामलों में, इसे सीधे तौर पर बदला नहीं जा सकता: कॉल पूरा होने पर, आपको एक लिसनर रजिस्टर करना होगा. तीसरे चरण के कोड में मौजूद कोड स्निपेट देखें.
  5. org.tensorflow.lite.Interpreter या org.tensorflow.lite.InterpreterApi क्लास का इस्तेमाल करके, किसी भी सोर्स फ़ाइल में import org.tensorflow.lite.InterpreterApi; और import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; जोड़ें.
  6. अगर InterpreterApi.create() को की जाने वाली किसी भी कॉल में सिर्फ़ एक तर्क हो, तो तर्क सूची में new InterpreterApi.Options() जोड़ें.
  7. .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) को इसके आखिरी तर्क में जोड़ें InterpreterApi.create() पर किया गया कोई भी कॉल.
  8. org.tensorflow.lite.Interpreter क्लास के सभी अन्य इंस्टेंस को org.tensorflow.lite.InterpreterApi से बदलें.

अगर आपको स्टैंडअलोन LiteRT और Play services API का एक साथ इस्तेमाल करना है, तो आपको LiteRT 2.9 (या इसके बाद के वर्शन) का इस्तेमाल करना होगा. LiteRT 2.8 और उससे पहले के वर्शन, Play services API वर्शन के साथ काम नहीं करते.