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

১. ভূমিকা

657431be3173fa86.pngandroid.png

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

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

এই কোডল্যাবটি একটি অ্যান্ড্রয়েড ডিভাইসে ইমেজ রিকগনিশন মডেল চালানোর জন্য টেনসরফ্লো লাইট ব্যবহার করে।

অ্যান্ড্রয়েড স্টুডিও ৪.১ বা তার উচ্চতর সংস্করণ ইনস্টল করুন

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

আপনি যা শিখবেন

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

আপনি যা তৈরি করবেন

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

f11c2821f2c8311d.png

লাইসেন্স: বিনামূল্যে ব্যবহারযোগ্য

২. কোলাব ব্যবহার করে একটি ফুল শনাক্তকারীকে প্রশিক্ষণ দিন

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

TensorFlow Lite ট্রান্সফার লার্নিং ব্যবহার করে Keras-এর সাহায্যে ফুল শনাক্ত করার জন্য কীভাবে একটি ক্লাসিফায়ারকে প্রশিক্ষণ দিতে হয়, তা দেখানো Colab ফাইলটি খুলুন।

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

গিট রিপোজিটরি ক্লোন করুন

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

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

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

cd TFLClassify

৪. অ্যান্ড্রয়েড স্কেলেটন অ্যাপটি সেট আপ করুন

android.png

অ্যান্ড্রয়েড স্টুডিও ৪.১ বা তার উচ্চতর সংস্করণ ইনস্টল করুন

যদি আপনার কম্পিউটারে আগে থেকে ইনস্টল করা না থাকে, তাহলে AndroidStudio 4.1 বা তার উচ্চতর সংস্করণ ইনস্টল করুন

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

নিম্নলিখিত ধাপগুলো অনুসরণ করে অ্যান্ড্রয়েড স্টুডিওতে একটি প্রজেক্ট খুলুন:

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

f3b8bea7e3b39376.png

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

d68b4d7189e6c1e4.png

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

60a77ef126c1373d.png

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

b63cba02bb36b7e3.png

  1. আপনার ফোনে নিম্নলিখিত স্ক্রিনটি দেখতে পাবেন, যেখানে আসল ফলাফল প্রদর্শিত হওয়ার জায়গায় এলোমেলো সংখ্যা থাকবে।

82c603596afa35f1.png

৫. অ্যান্ড্রয়েড অ্যাপে 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

৬. ঐচ্ছিক: সমস্ত করণীয় তালিকা দেখে নেওয়া

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

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

5de29b413574f25c.png

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

5d8fe7b102340208.png

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

8d0f14a039995b20.png

৭. 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. CameraX Analyzer-এর analyze মেথডের ভিতরে, ইনফারেন্স প্রক্রিয়ার জন্য আমাদের ক্যামেরা ইনপুট 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. সাজানো এবং ফিল্টার করা ফলাফলগুলিকে ডেটা অবজেক্টে রূপান্তর করুন Recognition ডেটা বাইন্ডিংয়ের মাধ্যমে RecyclerView দ্বারা ব্যবহারের জন্য প্রস্তুত।
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

৮. ঐচ্ছিক: 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-টি ইনিশিয়ালাইজ করুন। অন্যথায়, মডেলটি চালানোর জন্য ৪টি 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

৯. এরপর কী?

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