Android এ TensorFlow Lite দিয়ে ফুল চিনুন

1. ভূমিকা

657431be3173fa86.pngandroid.png

দ্রষ্টব্য: এই কোডল্যাবের পরীক্ষা করার জন্য একটি শারীরিক ডিভাইস প্রয়োজন

টেনসরফ্লো একটি বহুমুখী মেশিন লার্নিং ফ্রেমওয়ার্ক। TensorFlow ক্লাউডের ক্লাস্টার জুড়ে বিশাল মডেলের প্রশিক্ষণ থেকে শুরু করে আপনার ফোনের মতো একটি এমবেডেড সিস্টেমে স্থানীয়ভাবে মডেল চালানো পর্যন্ত ব্যবহার করা যেতে পারে।

এই কোডল্যাবটি একটি অ্যান্ড্রয়েড ডিভাইসে একটি ছবি শনাক্তকরণ মডেল চালানোর জন্য TensorFlow Lite ব্যবহার করে।

Android Studio 4.1 বা তার উপরে ইনস্টল করুন

আপনি যদি এটি ইতিমধ্যেই ইনস্টল না করে থাকেন, তাহলে আপনার TensorFlow Lite মডেলকে প্রশিক্ষণ দেওয়ার সময় AndroidStudio 4.1 বা তার উপরে ডাউনলোড করে ইনস্টল করুন।

আপনি কি শিখবেন

  • TensorFlow Lite Model Maker ব্যবহার করে কীভাবে আপনার নিজস্ব কাস্টম ইমেজ ক্লাসিফায়ারকে প্রশিক্ষণ দেবেন।
  • ক্যামেরাএক্স ব্যবহার করে একটি অ্যান্ড্রয়েড অ্যাপে কাস্টম মডেলকে একীভূত করতে টেনসরফ্লো লাইট মডেল আমদানি করতে কীভাবে অ্যান্ড্রয়েড স্টুডিও ব্যবহার করবেন।
  • আপনার মডেলকে ত্বরান্বিত করতে আপনার ফোনে কীভাবে GPU ব্যবহার করবেন।

যা আপনি নির্মাণ করবেন

একটি সাধারণ ক্যামেরা অ্যাপ যা ফুল শনাক্ত করতে টেনসরফ্লো ইমেজ রিকগনিশন প্রোগ্রাম চালায়।

f11c2821f2c8311d.png

লাইসেন্স: ব্যবহার করার জন্য বিনামূল্যে

2. Colab ব্যবহার করে ফুল শনাক্তকারীকে প্রশিক্ষণ দিন

মডেল প্রশিক্ষণ শুরু করার আগে, অ্যান্ড্রয়েড স্টুডিও 4.1 বা তার উপরে ডাউনলোড এবং ইনস্টল করা শুরু করুন।

Colab খুলুন যেটি টেনসরফ্লো লাইট ট্রান্সফার লার্নিং ব্যবহার করে ফুল চিনতে কেরাসের সাথে কীভাবে ক্লাসিফায়ারকে প্রশিক্ষণ দিতে হয় তা দেখায়।

3. ওয়ার্কিং ডিরেক্টরি সেট আপ করুন

গিট সংগ্রহস্থল ক্লোন করুন

নিম্নলিখিত কমান্ডটি এই কোডল্যাবের জন্য প্রয়োজনীয় ফাইলগুলি ধারণকারী গিট সংগ্রহস্থল ক্লোন করবে:

git clone https://github.com/hoitab/TFLClassify.git

এরপরে, আপনি এইমাত্র সংগ্রহস্থলটি ক্লোন করেছেন এমন ডিরেক্টরিতে যান। এই কোডল্যাবের বাকি অংশের জন্য আপনি এখানে কাজ করবেন:

cd TFLClassify

4. Android কঙ্কাল অ্যাপ সেট আপ করুন৷

android.png

Android Studio 4.1 বা তার উপরে ইনস্টল করুন

আপনি যদি এটি ইতিমধ্যেই ইনস্টল না করে থাকেন তাহলে AndroidStudio 4.1 বা তার উপরে ইনস্টল করুন।

অ্যান্ড্রয়েড স্টুডিও দিয়ে প্রকল্পটি খুলুন

নিম্নলিখিত পদক্ষেপগুলি গ্রহণ করে অ্যান্ড্রয়েড স্টুডিওর সাথে একটি প্রকল্প খুলুন:

  1. অ্যান্ড্রয়েড স্টুডিও খুলুন 7f2480ded53a193b.png . এটি লোড হওয়ার পরে এই পপআপ থেকে "একটি বিদ্যমান প্রকল্প খুলুন" নির্বাচন করুন:

f3b8bea7e3b39376.png

  1. ফাইল সিলেক্টরে, আপনার ওয়ার্কিং ডিরেক্টরি থেকে TFLClassify/build.gradle বেছে নিন।
  1. আপনি একটি "Gradle Sync" পপআপ পাবেন, প্রথমবার যখন আপনি প্রকল্পটি খুলবেন, গ্রেডল র‍্যাপার ব্যবহার করার বিষয়ে জিজ্ঞাসা করবেন৷ "ঠিক আছে" ক্লিক করুন।

d68b4d7189e6c1e4.png

  1. আপনার ফোনে ডেভেলপার মডেল এবং USB ডিবাগিং সক্ষম করুন যদি আপনি ইতিমধ্যে না করে থাকেন। এটি একটি এককালীন সেট আপ. এই নির্দেশাবলী অনুসরণ করুন.
  2. একবার আপনার প্রজেক্ট এবং আপনার ফোন উভয়ই প্রস্তুত হয়ে গেলে, আপনি TFL_Classify.start নির্বাচন করে একটি বাস্তব ডিভাইসে এটি চালাতে পারেন এবং রান বোতাম টিপুন 86934b7b01ad7565.png টুলবারে:

60a77ef126c1373d.png

  1. এখন টেনসরফ্লো ডেমোকে আপনার ক্যামেরা অ্যাক্সেস করার অনুমতি দিন:

b63cba02bb36b7e3.png

  1. আপনি আপনার ফোনে নিম্নলিখিত স্ক্রীন দেখতে পাবেন যেখানে আসল ফলাফল প্রদর্শিত হবে তার জায়গায় র্যান্ডম নম্বর রয়েছে।

82c603596afa35f1.png

5. Android অ্যাপে TensorFlow Lite যোগ করুন

  1. বাম দিকে প্রজেক্ট এক্সপ্লোরারে start মডিউলটি নির্বাচন করুন:

cede7f2b8b23c1a7.png

  1. start মডিউলে ডান-ক্লিক করুন বা File ক্লিক করুন, তারপর New > Other > TensorFlow Lite Model

bf243d9fdd27e20a.png

  1. মডেল লোকেশন নির্বাচন করুন যেখানে আপনি আগে কাস্টম প্রশিক্ষিত FlowerModel.tflite ডাউনলোড করেছেন।

cfee18cc6674a408.png

  1. Finish ক্লিক করুন.
  2. আপনি শেষে নিম্নলিখিত দেখতে পাবেন. FlowerModel.tflite সফলভাবে আমদানি করা হয়েছে এবং এটি আপনাকে শুরু করার জন্য ইনপুট/আউটপুট সহ কিছু নমুনা কোড সহ মডেল সম্পর্কিত উচ্চ স্তরের তথ্য দেখায়।

82840065f0d59def.png

6. ঐচ্ছিক: সমস্ত করণীয় তালিকা পরীক্ষা করে দেখুন

TODO তালিকা আপনাকে সঠিক অবস্থানে নেভিগেট করা সহজ করে তোলে যেখানে আপনাকে কোডল্যাব আপডেট করতে হবে। ভবিষ্যতের কাজের কথা মনে করিয়ে দিতে আপনি এটিকে আপনার Android প্রকল্পেও ব্যবহার করতে পারেন। আপনি কোড মন্তব্য ব্যবহার করে করণীয় আইটেম যোগ করতে পারেন এবং TODO কীওয়ার্ড টাইপ করতে পারেন। TODO তালিকা অ্যাক্সেস করতে, আপনি করতে পারেন:

  1. আমরা কি করতে যাচ্ছি তা দেখার একটি দুর্দান্ত উপায় হল TODO তালিকাটি পরীক্ষা করা। এটি করতে, উপরের মেনু বার থেকে View > Tool Windows > TODO নির্বাচন করুন

5de29b413574f25c.png

  1. ডিফল্টরূপে, এটি সমস্ত মডিউলে সমস্ত TODO তালিকাভুক্ত করে যা এটিকে একটু বিভ্রান্তিকর করে তোলে। আমরা TODO প্যানেলের পাশের গ্রুপ বাই বোতামে ক্লিক করে এবং Modules বেছে নিয়ে শুধুমাত্র শুরু TODOগুলি সাজাতে পারি

5d8fe7b102340208.png

  1. স্টার্ট মডিউলের অধীনে সমস্ত আইটেম প্রসারিত করুন:

8d0f14a039995b20.png

7. TensorFlow Lite দিয়ে কাস্টম মডেল চালান

  1. TODO তালিকায় TODO 1 এ ক্লিক করুন বা MainActivity.kt ফাইলটি খুলুন এবং TODO 1 সনাক্ত করুন, এই লাইনটি যোগ করে মডেলটি শুরু করুন:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {

  ...
  // TODO 1: Add class variable TensorFlow Lite Model
  private val flowerModel = FlowerModel.newInstance(ctx)

  ...
}
  1. ক্যামেরাএক্স অ্যানালাইজারের বিশ্লেষণ পদ্ধতির ভিতরে, আমাদের ক্যামেরা ইনপুট ImageProxy একটি Bitmap রূপান্তর করতে হবে এবং অনুমান প্রক্রিয়ার জন্য একটি TensorImage অবজেক্ট তৈরি করতে হবে।
override fun analyze(imageProxy: ImageProxy) {
  ...
  // TODO 2: Convert Image to Bitmap then to TensorImage
  val tfImage = TensorImage.fromBitmap(toBitmap(imageProxy))
  ...
}

  1. চিত্রটি প্রক্রিয়া করুন এবং ফলাফলে নিম্নলিখিত ক্রিয়াকলাপগুলি সম্পাদন করুন:
  • সর্বোত্তম সম্ভাবনার সাথে অ্যাট্রিবিউট score অধীনে সম্ভাব্যতার ভিত্তিতে ফলাফলগুলিকে নিচের দিকে সাজান।
  • ধ্রুবক MAX_RESULT_DISPLAY দ্বারা সংজ্ঞায়িত শীর্ষ k ফলাফল নিন। কম বা বেশি ফলাফল পেতে আপনি ঐচ্ছিকভাবে এই ভেরিয়েবলের মান পরিবর্তন করতে পারেন।
override fun analyze(imageProxy: ImageProxy) {
  ...
  // TODO 3: Process the image using the trained model, sort and pick out the top results
  val outputs = flowerModel.process(tfImage)
      .probabilityAsCategoryList.apply {
          sortByDescending { it.score } // Sort with highest confidence first
      }.take(MAX_RESULT_DISPLAY) // take the top results

  ...
}
  1. সাজানো এবং ফিল্টার করা ফলাফলগুলিকে ডেটা অবজেক্টে রূপান্তর করুন RecyclerView দ্বারা ডেটা বাইন্ডিংয়ের মাধ্যমে ব্যবহার করার জন্য প্রস্তুত Recognition :
override fun analyze(imageProxy: ImageProxy) {
  ...
  // TODO 4: Converting the top probability items into a list of recognitions
  for (output in outputs) {
      items.add(Recognition(output.label, output.score))
  }
  ...
}
  1. নীচের লাইনগুলি মন্তব্য করুন বা মুছুন যা আমরা আগে দেখতে পাই এমন জাল ফলাফল তৈরি করতে সহায়তা করে:
// START - Placeholder code at the start of the codelab. Comment this block of code out.
for (i in 0..MAX_RESULT_DISPLAY-1){
    items.add(Recognition("Fake label $i", Random.nextFloat()))
}
// END - Placeholder code at the start of the codelab. Comment this block of code out.
  1. TFL_Classify.start নির্বাচন করে একটি বাস্তব ডিভাইসে অ্যাপটি চালান এবং রান বোতাম টিপুন 86934b7b01ad7565.png টুলবারে:

60a77ef126c1373d.png

  1. আপনি আপনার ফোনে র্যান্ডম নম্বর সহ নিম্নলিখিত স্ক্রীন দেখতে পাবেন যেখানে প্রকৃত ফলাফল প্রদর্শিত হবে:

f11c2821f2c8311d.png

8. ঐচ্ছিক: GPU প্রতিনিধির সাথে অনুমানকে ত্বরান্বিত করুন

TensorFlow Lite আপনার মোবাইল ডিভাইসে অনুমানের গতি বাড়ানোর জন্য বেশ কয়েকটি হার্ডওয়্যার এক্সিলারেটরকে সমর্থন করে। GPU হল একটি এক্সিলারেটর যা TensorFlow Lite একটি প্রতিনিধি প্রক্রিয়ার মাধ্যমে ব্যবহার করতে পারে এবং এটি ব্যবহার করা মোটামুটি সহজ।

  1. start মডিউলের অধীনে build.gradle খুলুন অথবা আপনি TODO তালিকার অধীনে TODO 5 এ ক্লিক করতে পারেন এবং নিম্নলিখিত নির্ভরতা যোগ করতে পারেন:
// TODO 5: Optional GPU Delegates    
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
  1. MainActivity.kt ফাইলে ফিরে যান অথবা TODO তালিকার TODO 6-এ ক্লিক করুন। FlowerModel-এর সাধারণ সূচনাকে নিম্নলিখিতগুলির সাথে প্রতিস্থাপন করুন: GPU সামঞ্জস্যের তালিকার একটি উদাহরণ পান এবং GPU সূচনা করুন এটি তালিকাভুক্ত সামঞ্জস্যপূর্ণ GPUগুলির মধ্যে একটি কিনা তার উপর নির্ভর করে৷ অন্যথায়, পরিবর্তে মডেলটি চালানোর জন্য 4টি CPU থ্রেড শুরু করুন:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {
  ...

  // TODO 1: Add class variable TensorFlow Lite Model
  // Initializing the flowerModel by lazy so that it runs in the same thread when the process
  // method is called.
  private val flowerModel: FlowerModel by lazy{

    // TODO 6. Optional GPU acceleration
    val compatList = CompatibilityList()

    val options = if(compatList.isDelegateSupportedOnThisDevice){
        Log.d(TAG, "This device is GPU Compatible ")
        Model.Options.Builder().setDevice(Model.Device.GPU).build()
    } else {
        Log.d(TAG, "This device is GPU Incompatible ")
        Model.Options.Builder().setNumThreads(4).build()
    }

  ...
}
  1. পদ্ধতি ইনপুট options যোগ করে এটি ব্যবহার করার জন্য মডেল ইনিশিয়ালাইজার পরিবর্তন করুন:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {

  private val flowerModel: FlowerModel by lazy{

    ...

    // Initialize the Flower Model
    FlowerModel.newInstance(ctx, options)
  }
}

  1. TFL_Classify.start নির্বাচন করে একটি বাস্তব ডিভাইসে অ্যাপটি চালান এবং রান বোতাম টিপুন 86934b7b01ad7565.png টুলবারে:

60a77ef126c1373d.png

9. পরবর্তী কি?

আরও তথ্যের জন্য এখানে কিছু লিঙ্ক রয়েছে: