Google Play পরিষেবা জাভা API-এ টেনসরফ্লো লাইট

Native API ছাড়াও জাভা API ব্যবহার করে Google Play পরিষেবাতে TensorFlow Lite অ্যাক্সেস করা যেতে পারে। বিশেষ করে, TensorFlow Lite Google Play পরিষেবাতে TensorFlow Lite ইন্টারপ্রেটার API এর মাধ্যমে উপলব্ধ।

ইন্টারপ্রেটার এপিআই ব্যবহার করে

টেনসরফ্লো রানটাইম দ্বারা প্রদত্ত টেনসরফ্লো লাইট ইন্টারপ্রেটার এপিআই, এমএল মডেল তৈরি এবং চালানোর জন্য একটি সাধারণ-উদ্দেশ্য ইন্টারফেস প্রদান করে। Google Play পরিষেবার রানটাইমে TensorFlow Lite ব্যবহার করে ইন্টারপ্রেটার API-এর সাহায্যে অনুমান চালানোর জন্য নিম্নলিখিত ধাপগুলি ব্যবহার করুন।

1. প্রকল্প নির্ভরতা যোগ করুন

TensorFlow Lite-এর জন্য Play পরিষেবা API অ্যাক্সেস করতে আপনার অ্যাপ প্রোজেক্ট কোডে নিম্নলিখিত নির্ভরতা যোগ করুন:

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

2. TensorFlow Lite-এর সূচনা যোগ করুন

TensorFlow Lite API ব্যবহার করার আগে Google Play পরিষেবা API-এর TensorFlow Lite কম্পোনেন্ট চালু করুন:

কোটলিন

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

জাভা

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

3. একটি দোভাষী তৈরি করুন এবং রানটাইম বিকল্প সেট করুন

InterpreterApi.create() ব্যবহার করে একটি দোভাষী তৈরি করুন এবং InterpreterApi.Options.setRuntime() কল করে Google Play পরিষেবার রানটাইম ব্যবহার করার জন্য এটিকে কনফিগার করুন, নিম্নলিখিত উদাহরণ কোডে দেখানো হয়েছে:

কোটলিন

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)
  }

জাভা

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()));
  });

আপনার উপরের বাস্তবায়ন ব্যবহার করা উচিত কারণ এটি অ্যান্ড্রয়েড ব্যবহারকারী ইন্টারফেস থ্রেড ব্লক করা এড়ায়। আপনি যদি আরও ঘনিষ্ঠভাবে থ্রেড এক্সিকিউশন পরিচালনা করতে চান, আপনি দোভাষী তৈরিতে একটি Tasks.await() কল যোগ করতে পারেন:

কোটলিন

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

জাভা

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

4. অনুমান চালান

আপনার তৈরি করা interpreter অবজেক্ট ব্যবহার করে, একটি অনুমান তৈরি করতে run() পদ্ধতিতে কল করুন।

কোটলিন

interpreter.run(inputBuffer, outputBuffer)

জাভা

interpreter.run(inputBuffer, outputBuffer);

হার্ডওয়্যার ত্বরণ

TensorFlow Lite আপনাকে বিশেষ হার্ডওয়্যার প্রসেসর, যেমন গ্রাফিক্স প্রসেসিং ইউনিট (GPUs) ব্যবহার করে আপনার মডেলের কর্মক্ষমতা ত্বরান্বিত করতে দেয়। আপনি ডেলিগেট নামক হার্ডওয়্যার ড্রাইভার ব্যবহার করে এই বিশেষায়িত প্রসেসরগুলির সুবিধা নিতে পারেন।

GPU প্রতিনিধি Google Play পরিষেবার মাধ্যমে সরবরাহ করা হয় এবং ইন্টারপ্রেটার API-এর প্লে পরিষেবা সংস্করণগুলির মতোই গতিশীলভাবে লোড করা হয়৷

ডিভাইসের সামঞ্জস্যতা পরীক্ষা করা হচ্ছে

সমস্ত ডিভাইস TFLite এর সাথে GPU হার্ডওয়্যার ত্বরণ সমর্থন করে না। ত্রুটি এবং সম্ভাব্য ক্র্যাশগুলি হ্রাস করার জন্য, একটি ডিভাইস GPU প্রতিনিধির সাথে সামঞ্জস্যপূর্ণ কিনা তা পরীক্ষা করতে TfLiteGpu.isGpuDelegateAvailable পদ্ধতি ব্যবহার করুন৷

একটি ডিভাইস GPU এর সাথে সামঞ্জস্যপূর্ণ কিনা তা নিশ্চিত করতে এই পদ্ধতিটি ব্যবহার করুন এবং GPU সমর্থিত না হলে একটি ফলব্যাক হিসাবে CPU ব্যবহার করুন৷

useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

একবার আপনার কাছে useGpuTask এর মত একটি ভেরিয়েবল থাকলে, ডিভাইসগুলি GPU প্রতিনিধি ব্যবহার করে কিনা তা নির্ধারণ করতে আপনি এটি ব্যবহার করতে পারেন।

কোটলিন

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)
}
    

জাভা

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 সহ GPU

ইন্টারপ্রেটার API-এর সাথে GPU প্রতিনিধি ব্যবহার করতে:

  1. প্লে পরিষেবাগুলি থেকে GPU প্রতিনিধি ব্যবহার করতে প্রকল্প নির্ভরতা আপডেট করুন:

    implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
    
  2. TFlite শুরুতে GPU প্রতিনিধি বিকল্পটি সক্ষম করুন:

    কোটলিন

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

    জাভা

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build());
        
  3. দোভাষী বিকল্পগুলিতে GPU প্রতিনিধি সক্ষম করুন: InterpreterApi.Options()` addDelegateFactory() within কল করে GpuDelegateFactory-তে প্রতিনিধি ফ্যাক্টরি সেট করুন:

    কোটলিন

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

    জাভা

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

স্ট্যান্ড-অলোন TensorFlow Lite থেকে মাইগ্রেট করা হচ্ছে

আপনি যদি আপনার অ্যাপটি স্ট্যান্ড-অলোন TensorFlow Lite থেকে Play পরিষেবা API-তে স্থানান্তর করার পরিকল্পনা করছেন, তাহলে আপনার অ্যাপ প্রকল্প কোড আপডেট করার জন্য নিম্নলিখিত অতিরিক্ত নির্দেশিকা পর্যালোচনা করুন:

  1. আপনার ব্যবহারের ক্ষেত্রে সমর্থিত তা নিশ্চিত করতে এই পৃষ্ঠার সীমাবদ্ধতা বিভাগটি পর্যালোচনা করুন।
  2. আপনার কোড আপডেট করার আগে, আপনার মডেলগুলির জন্য কর্মক্ষমতা এবং নির্ভুলতা পরীক্ষা করুন, বিশেষ করে যদি আপনি সংস্করণ 2.1 এর আগে TensorFlow Lite-এর সংস্করণগুলি ব্যবহার করছেন, তাই নতুন বাস্তবায়নের সাথে তুলনা করার জন্য আপনার কাছে একটি বেসলাইন আছে।
  3. আপনি যদি TensorFlow Lite-এর জন্য Play পরিষেবা API ব্যবহার করার জন্য আপনার সমস্ত কোড স্থানান্তরিত করে থাকেন, তাহলে আপনার build.gradle ফাইল থেকে বিদ্যমান TensorFlow Lite রানটাইম লাইব্রেরি নির্ভরতা ( org.tensorflow: tensorflow-lite :* এর সাথে এন্ট্রিগুলি) সরিয়ে ফেলতে হবে যাতে আপনি আপনার অ্যাপের আকার কমাতে পারে।
  4. আপনার কোডে new Interpreter অবজেক্ট তৈরির সমস্ত ঘটনা শনাক্ত করুন এবং প্রত্যেকটিকে পরিবর্তন করুন যাতে এটি InterpreterApi.create() কল ব্যবহার করে। নতুন TfLite.initialize হল অ্যাসিঙ্ক্রোনাস, যার মানে বেশিরভাগ ক্ষেত্রে এটি একটি ড্রপ-ইন প্রতিস্থাপন নয়: কলটি সম্পূর্ণ হওয়ার জন্য আপনাকে অবশ্যই একজন শ্রোতা নিবন্ধন করতে হবে। ধাপ 3 কোডে কোড স্নিপেট পড়ুন।
  5. import org.tensorflow.lite.InterpreterApi; এবং import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; org.tensorflow.lite.Interpreter বা org.tensorflow.lite.InterpreterApi ক্লাস ব্যবহার করে যেকোন সোর্স ফাইলে।
  6. InterpreterApi.create() -এ যেকোনও কলে শুধুমাত্র একটি আর্গুমেন্ট থাকলে, আর্গুমেন্ট তালিকায় new InterpreterApi.Options() যোগ করুন।
  7. InterpreterApi.create() -এ যেকোনো কলের শেষ আর্গুমেন্টে .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) যোগ করুন।
  8. org.tensorflow.lite.Interpreter ক্লাসের অন্যান্য সমস্ত ঘটনাকে org.tensorflow.lite.InterpreterApi দিয়ে প্রতিস্থাপন করুন।

আপনি যদি একা টেনসরফ্লো লাইট এবং প্লে পরিষেবা API পাশাপাশি ব্যবহার করতে চান তবে আপনাকে অবশ্যই টেনসরফ্লো লাইট 2.9 (বা পরবর্তী) ব্যবহার করতে হবে। TensorFlow Lite 2.8 এবং পূর্ববর্তী সংস্করণগুলি Play service API সংস্করণের সাথে সামঞ্জস্যপূর্ণ নয়৷