Google Play services में LiteRT को Java API का इस्तेमाल करके भी ऐक्सेस किया जा सकता है. नेटिव एपीआई के साथ जोड़ी गई. खास तौर पर, Google Play में LiteRT ये सेवाएं, LiteRT Translators की मदद से उपलब्ध हैं एपीआई.
अनुवादक एपीआई का इस्तेमाल करना
TensorFlow रनटाइम से मिला LiteRT Translatorer API, इस टूल की मदद से, एमएल मॉडल बनाने और उसे चलाने के लिए, अलग-अलग कामों के लिए एक इंटरफ़ेस दिया गया है. इसका इस्तेमाल करें TensorFlow का इस्तेमाल करके, अनुवादक एपीआई की मदद से अनुमान लगाने के लिए यह तरीका अपनाएं Google Play services के रनटाइम में Lite.
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 के ज़रिए उपलब्ध कराया जाता है और वह डायनामिक रूप से लोड हो जाता है, बिलकुल अनुवादक एपीआई.
यह देखा जा रहा है कि डिवाइस पर यह सुविधा काम करती है या नहीं
सभी डिवाइसों पर, 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; });
अनुवादक एपीआई के साथ जीपीयू
अनुवादक एपीआई के साथ जीपीयू डेलिगेट का इस्तेमाल करने के लिए:
Play services से मिले जीपीयू डेलिगेट का इस्तेमाल करने के लिए, प्रोजेक्ट डिपेंडेंसी अपडेट करें:
implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
TFlite शुरू करने के दौरान, जीपीयू डेलिगेट का विकल्प चालू करें:
Kotlin
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build())
Java
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build());
अनुवादक के विकल्पों में जीपीयू डेलिगेट की सुविधा चालू करें: डेलिगेट फ़ैक्ट्री को इस पर सेट करें
addDelegateFactory() within
interpreterApi.Options()` को कॉल करके GpuDelegate बढ़ावा: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 का इस्तेमाल करें. अपने ऐप्लिकेशन को अपडेट करने के लिए, नीचे दिए गए अतिरिक्त दिशा-निर्देश देखें ऐप्लिकेशन प्रोजेक्ट कोड:
- इस पेज के सीमाएं सेक्शन की समीक्षा करके, पक्का करें कि इस्तेमाल का उदाहरण दिया गया है.
- अपना कोड अपडेट करने से पहले, अपनी मॉडल, खासकर तब, जब LiteRT के पहले वाले वर्शन का इस्तेमाल किया जा रहा हो वर्शन 2.1 है, तो आपके पास नए वर्शन से तुलना करने के लिए एक बेसलाइन मौजूद है लागू करना.
- अगर आपने Play services API का इस्तेमाल करने के लिए, अपने सभी कोड माइग्रेट कर दिए हैं
LiteRT का इस्तेमाल करना है, तो आपको मौजूदा LiteRT रनटाइम हटाना होगा
लाइब्रेरी डिपेंडेंसी (ऐसी एंट्री जो
org.tensorflow:tensorflow-lite:*
) आपके बिल्ड.gradle से फ़ाइल अपलोड करें, ताकि आप अपने ऐप्लिकेशन का साइज़ कम कर सकें. - अपने कोड में जितनी बार
new Interpreter
ऑब्जेक्ट बनाया गया है उसकी सभी घटनाओं की पहचान करें. और हर एक में बदलाव करें, ताकि यह interpreterApi.create() कॉल का इस्तेमाल कर सके. कॉन्टेंट बनाने new TfLite.Initialize एसिंक्रोनस है. इसका मतलब है कि ज़्यादातर मामलों में यह ड्रॉप-इन रीप्लेसमेंट: कॉल के समय आपको लिसनर रजिस्टर करना होगा पूरा करता है. तीसरे चरण के कोड में, कोड स्निपेट देखें. import org.tensorflow.lite.InterpreterApi;
औरimport org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime;
को किसी भी सोर्स में जोड़ें फ़ाइलेंorg.tensorflow.lite.Interpreter
याorg.tensorflow.lite.InterpreterApi
क्लास.- अगर
InterpreterApi.create()
को की जाने वाली किसी भी कॉल में सिर्फ़ एक तर्क हो, तो तर्क सूची मेंnew InterpreterApi.Options()
जोड़ें. .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
को इसके आखिरी तर्क में जोड़ेंInterpreterApi.create()
पर किया गया कोई भी कॉल.org.tensorflow.lite.Interpreter
क्लास की अन्य सभी वैल्यू बदलेंorg.tensorflow.lite.InterpreterApi
के साथ.
अगर आपको स्टैंड-अलोन LiteRT और Play services API का इस्तेमाल करना है साथ ही, आपको LiteRT 2.9 या इसके बाद के वर्शन का इस्तेमाल करना होगा. LiteRT 2.8 और उससे पहले के वर्शन, Play services API वर्शन के साथ काम नहीं करते.