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

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

নিম্নলিখিত বিভাগগুলি Google Play পরিষেবাগুলিতে TensorFlow Lite-এর সাথে ইন্টারপ্রেটার এবং টাস্ক লাইব্রেরি APIগুলি কীভাবে ব্যবহার করতে হয় তার নির্দেশাবলী প্রদান করে৷ যদিও একটি অ্যাপের পক্ষে ইন্টারপ্রেটার এপিআই এবং টাস্ক লাইব্রেরি এপিআই উভয়ই ব্যবহার করা সম্ভব, বেশিরভাগ অ্যাপের শুধুমাত্র এক সেট API ব্যবহার করা উচিত।

টাস্ক লাইব্রেরি API ব্যবহার করে

টেনসরফ্লো লাইট টাস্ক এপিআই ইন্টারপ্রেটার এপিআইকে মোড়ানো এবং ভিজ্যুয়াল, অডিও এবং টেক্সট ডেটা ব্যবহার করে এমন সাধারণ মেশিন লার্নিং কাজগুলির জন্য একটি উচ্চ-স্তরের প্রোগ্রামিং ইন্টারফেস প্রদান করে। আপনার অ্যাপ্লিকেশানের যদি সমর্থিত টাস্কগুলির একটির প্রয়োজন হয় তবে আপনার টাস্ক API ব্যবহার করা উচিত।

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

আপনার প্রকল্প নির্ভরতা আপনার মেশিন লার্নিং ব্যবহারের ক্ষেত্রে নির্ভর করে। টাস্ক API তে নিম্নলিখিত লাইব্রেরি রয়েছে:

  • ভিশন লাইব্রেরি: org.tensorflow:tensorflow-lite-task-vision-play-services
  • অডিও লাইব্রেরি: org.tensorflow:tensorflow-lite-task-audio-play-services
  • টেক্সট লাইব্রেরি: org.tensorflow:tensorflow-lite-task-text-play-services

TensorFlow Lite-এর জন্য Play পরিষেবা API অ্যাক্সেস করতে আপনার অ্যাপ প্রোজেক্ট কোডে একটি নির্ভরতা যোগ করুন। উদাহরণস্বরূপ, একটি দৃষ্টি টাস্ক বাস্তবায়ন করতে নিম্নলিখিত ব্যবহার করুন:

dependencies {
...
    implementation 'org.tensorflow:tensorflow-lite-task-vision-play-services:0.4.2'
...
}

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

TensorFlow Lite API ব্যবহার করার আগে Google Play পরিষেবা API-এর TensorFlow Lite কম্পোনেন্ট চালু করুন। নিম্নলিখিত উদাহরণ ভিশন লাইব্রেরি আরম্ভ করে:

কোটলিন

init {
  TfLiteVision.initialize(context)
}

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

TensorFlow Lite কম্পোনেন্ট আরম্ভ করার পরে, অনুমান তৈরি করতে detect() পদ্ধতিতে কল করুন। লাইব্রেরি এবং ব্যবহারের ক্ষেত্রের উপর নির্ভর করে detect() পদ্ধতির মধ্যে সঠিক কোড পরিবর্তিত হয়। TfLiteVision লাইব্রেরির সাথে একটি সাধারণ বস্তু সনাক্তকরণ ব্যবহারের ক্ষেত্রে নিম্নলিখিতটি রয়েছে:

কোটলিন

fun detect(...) {
  if (!TfLiteVision.isInitialized()) {
    Log.e(TAG, "detect: TfLiteVision is not initialized yet")
    return
  }

  if (objectDetector == null) {
    setupObjectDetector()
  }

  ...

}

ডেটা ফরম্যাটের উপর নির্ভর করে, অনুমান তৈরি করার আগে আপনাকে detect() পদ্ধতির মধ্যে আপনার ডেটা প্রিপ্রসেস এবং রূপান্তর করতে হতে পারে। উদাহরণস্বরূপ, একটি অবজেক্ট ডিটেক্টরের জন্য ইমেজ ডেটা নিম্নলিখিত প্রয়োজন:

val imageProcessor = ImageProcessor.Builder().add(Rot90Op(-imageRotation / 90)).build()
val tensorImage = imageProcessor.process(TensorImage.fromBitmap(image))
val results = objectDetector?.detect(tensorImage)

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

ইন্টারপ্রেটার এপিআই টাস্ক লাইব্রেরি এপিআই এর চেয়ে বেশি নিয়ন্ত্রণ এবং নমনীয়তা প্রদান করে। যদি আপনার মেশিন লার্নিং টাস্ক টাস্ক লাইব্রেরি দ্বারা সমর্থিত না হয়, অথবা আপনার যদি ML মডেল তৈরি এবং চালানোর জন্য আরও সাধারণ-উদ্দেশ্য ইন্টারফেসের প্রয়োজন হয় তবে আপনার ইন্টারপ্রেটার 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) ব্যবহার করে আপনার মডেলের কর্মক্ষমতা ত্বরান্বিত করতে দেয়। আপনি ডেলিগেট নামক হার্ডওয়্যার ড্রাইভার ব্যবহার করে এই বিশেষায়িত প্রসেসরগুলির সুবিধা নিতে পারেন। আপনি Google Play পরিষেবাগুলিতে TensorFlow Lite সহ নিম্নলিখিত হার্ডওয়্যার ত্বরণ প্রতিনিধি ব্যবহার করতে পারেন:

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

  • NNAPI প্রতিনিধি - এই প্রতিনিধিটি আপনার অ্যান্ড্রয়েড ডেভেলপমেন্ট প্রজেক্টে একটি অন্তর্ভুক্ত লাইব্রেরি নির্ভরতা হিসাবে উপলব্ধ, এবং আপনার অ্যাপে বান্ডিল করা হয়েছে।

টেনসরফ্লো লাইটের সাথে হার্ডওয়্যার ত্বরণ সম্পর্কে আরও তথ্যের জন্য, টেনসরফ্লো লাইট প্রতিনিধি পৃষ্ঠাটি দেখুন।

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

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

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

useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

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

টাস্ক এপিআই সহ

কোটলিন

lateinit val optionsTask = useGpuTask.continueWith { task ->
  val baseOptionsBuilder = BaseOptions.builder()
  if (task.result) {
    baseOptionsBuilder.useGpu()
  }
 ObjectDetectorOptions.builder()
          .setBaseOptions(baseOptionsBuilder.build())
          .setMaxResults(1)
          .build()
}
    

জাভা

Task<ObjectDetectorOptions> optionsTask = useGpuTask.continueWith({ task ->
  BaseOptions baseOptionsBuilder = BaseOptions.builder();
  if (task.getResult()) {
    baseOptionsBuilder.useGpu();
  }
  return ObjectDetectorOptions.builder()
          .setBaseOptions(baseOptionsBuilder.build())
          .setMaxResults(1)
          .build()
});
    

দোভাষী অপির সাথে

কোটলিন

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. GPU প্রতিনিধি setEnableGpuDelegateSupport দিয়ে শুরু করুন। উদাহরণস্বরূপ, আপনি নিম্নলিখিতগুলির সাথে TfLiteVision এর জন্য GPU প্রতিনিধি শুরু করতে পারেন:

    কোটলিন

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

    জাভা

        TfLiteVision.initialize(context, TfLiteInitializationOptions.builder().setEnableGpuDelegateSupport(true).build());
        
  3. BaseOptions সহ GPU প্রতিনিধি বিকল্প সক্রিয় করুন:

    কোটলিন

        val baseOptions = BaseOptions.builder().useGpu().build()
        

    জাভা

        BaseOptions baseOptions = BaseOptions.builder().useGpu().build();
        
  4. .setBaseOptions ব্যবহার করে বিকল্পগুলি কনফিগার করুন। উদাহরণস্বরূপ, আপনি নিম্নলিখিতগুলির সাথে ObjectDetector GPU সেট আপ করতে পারেন:

    কোটলিন

        val options =
            ObjectDetectorOptions.builder()
                .setBaseOptions(baseOptions)
                .setMaxResults(1)
                .build()
        

    জাভা

        ObjectDetectorOptions options =
            ObjectDetectorOptions.builder()
                .setBaseOptions(baseOptions)
                .setMaxResults(1)
                .build();
        

ইন্টারপ্রেটার 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 সংস্করণের সাথে সামঞ্জস্যপূর্ণ নয়৷