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

1. ভূমিকা

657431be3173fa86.png সম্পর্কেঅ্যান্ড্রয়েড.পিএনজি

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

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

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

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

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

তুমি কি শিখবে

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

তুমি কী তৈরি করবে

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

f11c2821f2c8311d.png সম্পর্কে

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

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

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

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

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

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

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

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

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

cd TFLClassify

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

অ্যান্ড্রয়েড.পিএনজি

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

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

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

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

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

f3b8bea7e3b39376.png সম্পর্কে

  1. ফাইল নির্বাচকের মধ্যে, আপনার কার্যকরী ডিরেক্টরি থেকে TFLClassify/build.gradle নির্বাচন করুন।
  1. প্রথমবার যখন আপনি প্রজেক্টটি খুলবেন, তখন "Gradle Sync" পপআপটি আসবে, যেখানে gradle wrapper ব্যবহার সম্পর্কে জিজ্ঞাসা করা হবে। "OK" এ ক্লিক করুন।

d68b4d7189e6c1e4.png সম্পর্কে

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

60a77ef126c1373d.png সম্পর্কে

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

b63cba02bb36b7e3.png সম্পর্কে

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

82c603596afa35f1.png সম্পর্কে

৫. অ্যান্ড্রয়েড অ্যাপে টেনসরফ্লো লাইট যোগ করুন

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

অনুসরণ

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

bf243d9fdd27e20a.png

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

অনুসরণ

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

82840065f0d59def.png সম্পর্কে

৬. ঐচ্ছিক: সমস্ত করণীয় তালিকা পরীক্ষা করা হচ্ছে

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

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

5de29b413574f25c.png সম্পর্কে

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

5d8fe7b102340208.png সম্পর্কে

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

8d0f14a039995b20.png সম্পর্কে

৭. টেনসরফ্লো লাইট দিয়ে কাস্টম মডেলটি চালান

  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 অ্যানালাইজারের বিশ্লেষণ পদ্ধতির ভিতরে, আমাদের ক্যামেরা ইনপুট 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 সম্পর্কে

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

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

  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 সম্পর্কে

৯. এরপর কী?

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