অ্যান্ড্রয়েড দিয়ে অবজেক্ট ডিটেকশন

এই টিউটোরিয়ালটি আপনাকে দেখায় কিভাবে একটি ডিভাইস ক্যামেরা দ্বারা ক্যাপচার করা ফ্রেমে অবজেক্ট ক্রমাগত সনাক্ত করতে TensorFlow Lite ব্যবহার করে একটি Android অ্যাপ তৈরি করতে হয়। এই অ্যাপ্লিকেশনটি একটি শারীরিক অ্যান্ড্রয়েড ডিভাইসের জন্য ডিজাইন করা হয়েছে। আপনি যদি একটি বিদ্যমান প্রজেক্ট আপডেট করছেন, তাহলে আপনি কোড নমুনাটিকে রেফারেন্স হিসেবে ব্যবহার করতে পারেন এবং আপনার প্রজেক্ট পরিবর্তন করার জন্য নির্দেশাবলীতে এগিয়ে যেতে পারেন।

অবজেক্ট ডিটেকশন অ্যানিমেটেড ডেমো

বস্তু সনাক্তকরণ ওভারভিউ

অবজেক্ট ডিটেকশন হল একটি ইমেজের মধ্যে একাধিক শ্রেণীর বস্তুর উপস্থিতি এবং অবস্থান শনাক্ত করার মেশিন লার্নিং কাজ। একটি অবজেক্ট ডিটেকশন মডেলকে একটি ডেটাসেটে প্রশিক্ষণ দেওয়া হয় যাতে পরিচিত বস্তুর একটি সেট থাকে।

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

মডেল এবং ডেটাসেট

এই টিউটোরিয়ালটি এমন মডেলগুলি ব্যবহার করে যেগুলি COCO ডেটাসেট ব্যবহার করে প্রশিক্ষিত হয়েছিল৷ COCO হল একটি বৃহৎ আকারের অবজেক্ট ডিটেকশন ডেটাসেট যাতে 330K ছবি, 1.5 মিলিয়ন অবজেক্ট ইনস্ট্যান্স এবং 80টি অবজেক্ট ক্যাটাগরি রয়েছে।

আপনার কাছে নিম্নলিখিত প্রাক-প্রশিক্ষিত মডেলগুলির একটি ব্যবহার করার বিকল্প রয়েছে:

  • EfficientDet-Lite0 [প্রস্তাবিত] - একটি BiFPN বৈশিষ্ট্য এক্সট্র্যাক্টর, শেয়ার্ড বক্স ভবিষ্যদ্বাণী, এবং ফোকাল লস সহ একটি হালকা ওজনের বস্তু সনাক্তকরণ মডেল। COCO 2017 বৈধতা ডেটাসেটের জন্য mAP (মান গড় স্পষ্টতা) হল 25.69%৷

  • EfficientDet-Lite1 - একটি মাঝারি আকারের EfficientDet অবজেক্ট সনাক্তকরণ মডেল। COCO 2017 বৈধতা ডেটাসেটের জন্য mAP হল 30.55%।

  • EfficientDet-Lite2 - একটি বৃহত্তর EfficientDet অবজেক্ট সনাক্তকরণ মডেল। COCO 2017 যাচাইকরণ ডেটাসেটের এমএপি হল 33.97%।

  • MobileNetV1-SSD - বস্তু সনাক্তকরণের জন্য TensorFlow Lite-এর সাথে কাজ করার জন্য অপ্টিমাইজ করা একটি অত্যন্ত লাইটওয়েট মডেল। COCO 2017 বৈধতা ডেটাসেটের জন্য mAP হল 21%৷

এই টিউটোরিয়ালের জন্য, EfficientDet-Lite0 মডেলটি আকার এবং নির্ভুলতার মধ্যে একটি ভাল ভারসাম্য বজায় রাখে।

ডাউনলোড করা, নিষ্কাশন করা এবং মডেলগুলিকে অ্যাসেট ফোল্ডারে স্থাপন করা download.gradle ফাইল দ্বারা স্বয়ংক্রিয়ভাবে পরিচালিত হয়, যা বিল্ড টাইমে চালানো হয়। আপনাকে প্রজেক্টে TFLite মডেল ম্যানুয়ালি ডাউনলোড করতে হবে না।

সেটআপ এবং রান উদাহরণ

অবজেক্ট ডিটেকশন অ্যাপ সেটআপ করতে, GitHub থেকে নমুনা ডাউনলোড করুন এবং Android Studio ব্যবহার করে চালান। এই টিউটোরিয়ালের নিম্নলিখিত বিভাগগুলি কোড উদাহরণের প্রাসঙ্গিক বিভাগগুলি অন্বেষণ করে, যাতে আপনি সেগুলি আপনার নিজের Android অ্যাপগুলিতে প্রয়োগ করতে পারেন৷

সিস্টেমের জন্য আবশ্যক

  • অ্যান্ড্রয়েড স্টুডিও সংস্করণ 2021.1.1 (বাম্বলবি) বা উচ্চতর।
  • Android SDK সংস্করণ 31 বা উচ্চতর
  • বিকাশকারী মোড সক্ষম সহ SDK 24 (Android 7.0 - Nougat) এর ন্যূনতম OS সংস্করণ সহ Android ডিভাইস৷

উদাহরণ কোড পান

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

উদাহরণ কোড ক্লোন এবং সেটআপ করতে:

  1. git সংগ্রহস্থল
    git clone https://github.com/tensorflow/examples.git
    
    ক্লোন করুন
  2. ঐচ্ছিকভাবে, স্পার্স চেকআউট ব্যবহার করার জন্য আপনার গিট ইনস্ট্যান্স কনফিগার করুন, যাতে আপনার কাছে অবজেক্ট ডিটেকশন উদাহরণ অ্যাপের জন্য শুধুমাত্র ফাইল থাকে:
    cd examples
    git sparse-checkout init --cone
    git sparse-checkout set lite/examples/object_detection/android
    

আমদানি করুন এবং প্রকল্প চালান

ডাউনলোড করা উদাহরণ কোড থেকে একটি প্রকল্প তৈরি করুন, প্রকল্পটি তৈরি করুন এবং তারপরে এটি চালান।

উদাহরণ কোড প্রকল্প আমদানি এবং নির্মাণ করতে:

  1. অ্যান্ড্রয়েড স্টুডিও শুরু করুন।
  2. অ্যান্ড্রয়েড স্টুডিও থেকে, ফাইল > নতুন > আমদানি প্রকল্প নির্বাচন করুন।
  3. build.gradle ফাইলের উদাহরণ কোড ডিরেক্টরিতে নেভিগেট করুন ( .../examples/lite/examples/object_detection/android/build.gradle ) এবং সেই ডিরেক্টরিটি নির্বাচন করুন।
  4. যদি অ্যান্ড্রয়েড স্টুডিও গ্রেডল সিঙ্কের অনুরোধ করে, ঠিক আছে বেছে নিন।
  5. নিশ্চিত করুন যে আপনার অ্যান্ড্রয়েড ডিভাইস আপনার কম্পিউটারের সাথে সংযুক্ত আছে এবং বিকাশকারী মোড সক্ষম করা আছে৷ সবুজ Run তীর ক্লিক করুন.

আপনি সঠিক ডিরেক্টরি নির্বাচন করলে, অ্যান্ড্রয়েড স্টুডিও একটি নতুন প্রকল্প তৈরি করে এবং এটি তৈরি করে। আপনার কম্পিউটারের গতির উপর নির্ভর করে এবং আপনি যদি অন্যান্য প্রকল্পের জন্য অ্যান্ড্রয়েড স্টুডিও ব্যবহার করেন তবে এই প্রক্রিয়াটি কয়েক মিনিট সময় নিতে পারে। বিল্ড সম্পূর্ণ হলে, অ্যান্ড্রয়েড স্টুডিও বিল্ড আউটপুট স্ট্যাটাস প্যানেলে একটি BUILD SUCCESSFUL বার্তা প্রদর্শন করে।

ঐচ্ছিক: Android প্লাগইন সংস্করণ আপডেট করে বিল্ড ত্রুটিগুলি ঠিক করতে:

  1. প্রকল্প ডিরেক্টরিতে build.gradle ফাইলটি খুলুন।
  2. নিম্নলিখিত হিসাবে অ্যান্ড্রয়েড টুল সংস্করণ পরিবর্তন করুন:

    // from: classpath
    'com.android.tools.build:gradle:4.2.2'
    // to: classpath
    'com.android.tools.build:gradle:4.1.2'
    
  3. নির্বাচন করে প্রকল্পটি সিঙ্ক করুন: ফাইল > গ্রেডল ফাইলের সাথে প্রকল্প সিঙ্ক করুন

প্রকল্প চালানোর জন্য:

  1. অ্যান্ড্রয়েড স্টুডিও থেকে, রান > রান… নির্বাচন করে প্রকল্পটি চালান।
  2. অ্যাপটি পরীক্ষা করতে ক্যামেরা সহ একটি সংযুক্ত Android ডিভাইস নির্বাচন করুন।

পরবর্তী বিভাগগুলি আপনাকে রেফারেন্স পয়েন্ট হিসাবে এই উদাহরণ অ্যাপটি ব্যবহার করে আপনার নিজের অ্যাপে এই কার্যকারিতা যোগ করতে আপনার বিদ্যমান প্রকল্পে যে পরিবর্তনগুলি করতে হবে তা দেখায়।

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

আপনার নিজের অ্যাপ্লিকেশনে, আপনাকে অবশ্যই TensorFlow Lite মেশিন লার্নিং মডেলগুলি চালানোর জন্য নির্দিষ্ট প্রকল্প নির্ভরতা যোগ করতে হবে এবং ইউটিলিটি ফাংশনগুলি অ্যাক্সেস করতে হবে যা ডেটা রূপান্তর করে যেমন চিত্রগুলিকে একটি টেনসর ডেটা ফর্ম্যাটে যা আপনি যে মডেলটি ব্যবহার করছেন তার দ্বারা প্রক্রিয়া করা যেতে পারে৷

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

নিম্নলিখিত নির্দেশাবলী ব্যাখ্যা করে কিভাবে আপনার নিজের Android অ্যাপ প্রকল্পে প্রয়োজনীয় প্রকল্প এবং মডিউল নির্ভরতা যোগ করতে হয়।

মডিউল নির্ভরতা যোগ করতে:

  1. TensorFlow Lite ব্যবহার করে এমন মডিউলে, নিম্নলিখিত নির্ভরতাগুলি অন্তর্ভুক্ত করতে মডিউলের build.gradle ফাইলটি আপডেট করুন। উদাহরণ কোডে, এই ফাইলটি এখানে অবস্থিত: ...examples/lite/examples/object_detection/android/app/build.gradle ( কোড রেফারেন্স )

    dependencies {
      ...
      implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.0'
      // Import the GPU delegate plugin Library for GPU inference
      implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.0'
      implementation 'org.tensorflow:tensorflow-lite-gpu:2.9.0'
    }
    

    প্রকল্পে অবশ্যই ভিশন টাস্ক লাইব্রেরি ( tensorflow-lite-task-vision ) অন্তর্ভুক্ত করতে হবে। গ্রাফিক্স প্রসেসিং ইউনিট (GPU) লাইব্রেরি ( tensorflow-lite-gpu-delegate-plugin ) GPU-তে অ্যাপ চালানোর জন্য পরিকাঠামো প্রদান করে এবং প্রতিনিধি ( tensorflow-lite-gpu ) সামঞ্জস্যের তালিকা প্রদান করে।

  2. অ্যান্ড্রয়েড স্টুডিওতে, নির্বাচন করে প্রকল্প নির্ভরতা সিঙ্ক করুন: ফাইল > গ্রেডল ফাইলের সাথে প্রকল্প সিঙ্ক করুন

ML মডেল শুরু করুন

আপনার Android অ্যাপে, মডেলের সাথে ভবিষ্যদ্বাণী চালানোর আগে আপনাকে অবশ্যই প্যারামিটার সহ TensorFlow Lite মেশিন লার্নিং মডেলটি আরম্ভ করতে হবে। এই প্রারম্ভিক পরামিতিগুলি বস্তু সনাক্তকরণ মডেল জুড়ে সামঞ্জস্যপূর্ণ এবং ভবিষ্যদ্বাণীগুলির জন্য ন্যূনতম নির্ভুলতা থ্রেশহোল্ডের মতো সেটিংস অন্তর্ভুক্ত করতে পারে।

একটি TensorFlow Lite মডেলে মডেল কোড সহ একটি .tflite ফাইল অন্তর্ভুক্ত থাকে এবং প্রায়শই মডেল দ্বারা ভবিষ্যদ্বাণী করা ক্লাসগুলির নাম সম্বলিত একটি লেবেল ফাইল অন্তর্ভুক্ত থাকে। বস্তু সনাক্তকরণের ক্ষেত্রে, শ্রেণী হল বস্তু যেমন একজন ব্যক্তি, কুকুর, বিড়াল বা গাড়ি।

এই উদাহরণটি download_models.gradle এ নির্দিষ্ট করা বেশ কয়েকটি মডেল ডাউনলোড করে এবং ObjectDetectorHelper ক্লাস মডেলগুলির জন্য একটি নির্বাচক প্রদান করে:

val modelName =
  when (currentModel) {
    MODEL_MOBILENETV1 -> "mobilenetv1.tflite"
    MODEL_EFFICIENTDETV0 -> "efficientdet-lite0.tflite"
    MODEL_EFFICIENTDETV1 -> "efficientdet-lite1.tflite"
    MODEL_EFFICIENTDETV2 -> "efficientdet-lite2.tflite"
    else -> "mobilenetv1.tflite"
  }

আপনার অ্যাপে মডেলটি শুরু করতে:

  1. আপনার উন্নয়ন প্রকল্পের src/main/assets ডিরেক্টরিতে একটি .tflite মডেল ফাইল যোগ করুন, যেমন: EfficientDet-Lite0
  2. আপনার মডেলের ফাইল নামের জন্য একটি স্ট্যাটিক ভেরিয়েবল সেট করুন। উদাহরণ অ্যাপে, আপনি EfficientDet-Lite0 শনাক্তকরণ মডেল ব্যবহার করতে modelName ভেরিয়েবলটিকে MODEL_EFFICIENTDETV0 এ সেট করেছেন।
  3. মডেলের জন্য বিকল্পগুলি সেট করুন, যেমন ভবিষ্যদ্বাণী থ্রেশহোল্ড, ফলাফল সেট আকার এবং ঐচ্ছিকভাবে, হার্ডওয়্যার ত্বরণ প্রতিনিধি:

    val optionsBuilder =
      ObjectDetector.ObjectDetectorOptions.builder()
        .setScoreThreshold(threshold)
        .setMaxResults(maxResults)
    
  4. একটি TensorFlow Lite ObjectDetector অবজেক্ট তৈরি করতে এই অবজেক্টের সেটিংস ব্যবহার করুন যাতে মডেলটি রয়েছে:

    objectDetector =
      ObjectDetector.createFromFileAndOptions(
        context, modelName, optionsBuilder.build())
    

setupObjectDetector নিম্নলিখিত মডেল পরামিতি সেট আপ করে:

  • সনাক্তকরণ থ্রেশহোল্ড
  • শনাক্তকরণ ফলাফলের সর্বাধিক সংখ্যা
  • ব্যবহার করার জন্য প্রসেসিং থ্রেডের সংখ্যা ( BaseOptions.builder().setNumThreads(numThreads) )
  • প্রকৃত মডেল ( modelName )
  • অবজেক্ট ডিটেক্টর অবজেক্ট ( objectDetector )

হার্ডওয়্যার অ্যাক্সিলারেটর কনফিগার করুন

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

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

অবজেক্ট ডিটেক্টরটি যে থ্রেডটি ব্যবহার করছে তার বর্তমান সেটিংস ব্যবহার করে শুরু করা হয়েছে। আপনি CPU এবং NNAPI প্রতিনিধিদের সাথে ডিটেক্টর ব্যবহার করতে পারেন যেগুলি প্রধান থ্রেডে তৈরি করা হয় এবং একটি ব্যাকগ্রাউন্ড থ্রেডে ব্যবহার করা হয়, তবে যে থ্রেডটি ডিটেক্টরকে আরম্ভ করে সেটি অবশ্যই GPU প্রতিনিধি ব্যবহার করতে হবে।

প্রতিনিধিদের ObjectDetectionHelper.setupObjectDetector() ফাংশনের মধ্যে সেট করা হয়:

when (currentDelegate) {
    DELEGATE_CPU -> {
        // Default
    }
    DELEGATE_GPU -> {
        if (CompatibilityList().isDelegateSupportedOnThisDevice) {
            baseOptionsBuilder.useGpu()
        } else {
            objectDetectorListener?.onError("GPU is not supported on this device")
        }
    }
    DELEGATE_NNAPI -> {
        baseOptionsBuilder.useNnapi()
    }
}

TensorFlow Lite-এর সাথে হার্ডওয়্যার ত্বরণ প্রতিনিধিদের ব্যবহার সম্পর্কে আরও তথ্যের জন্য, TensorFlow Lite প্রতিনিধি দেখুন।

মডেলের জন্য ডেটা প্রস্তুত করুন

আপনার অ্যান্ড্রয়েড অ্যাপে, আপনার কোডটি বিদ্যমান ডেটা যেমন ইমেজ ফ্রেমকে একটি টেনসর ডেটা ফর্ম্যাটে রূপান্তর করে ব্যাখ্যা করার জন্য মডেলকে ডেটা প্রদান করে যা আপনার মডেল দ্বারা প্রক্রিয়া করা যেতে পারে। টেনসরের যে ডেটা আপনি একটি মডেলে পাস করেন তাতে অবশ্যই নির্দিষ্ট মাত্রা বা আকৃতি থাকতে হবে যা মডেলটিকে প্রশিক্ষণের জন্য ব্যবহৃত ডেটার বিন্যাসের সাথে মেলে।

এই কোডের উদাহরণে ব্যবহৃত EfficientDet-Lite0 মডেলটি প্রতি পিক্সেলে তিনটি চ্যানেল (লাল, নীল এবং সবুজ) সহ 320 x 320 মাত্রা সহ চিত্রগুলি উপস্থাপন করে টেনসর গ্রহণ করে। টেনসরের প্রতিটি মান হল 0 থেকে 255 এর মধ্যে একটি একক বাইট৷ তাই, নতুন ছবিতে ভবিষ্যদ্বাণী চালানোর জন্য, আপনার অ্যাপটিকে অবশ্যই সেই চিত্র ডেটাকে সেই আকার এবং আকৃতির টেনসর ডেটা অবজেক্টে রূপান্তর করতে হবে৷ TensorFlow Lite Task Library Vision API আপনার জন্য ডেটা ট্রান্সফর্মেশন পরিচালনা করে।

অ্যাপটি ক্যামেরা থেকে ছবি তোলার জন্য একটি ImageAnalysis অবজেক্ট ব্যবহার করে। এই বস্তুটি ক্যামেরা থেকে বিটম্যাপ সহ detectObject ফাংশনকে কল করে। ImageProcessor দ্বারা ডেটা স্বয়ংক্রিয়ভাবে পুনরায় আকার দেওয়া হয় এবং ঘোরানো হয় যাতে এটি মডেলের চিত্র ডেটা প্রয়োজনীয়তা পূরণ করে। তারপরে ছবিটি একটি TensorImage অবজেক্টে অনুবাদ করা হয়।

এমএল মডেল দ্বারা প্রক্রিয়াকরণের জন্য ক্যামেরা সাবসিস্টেম থেকে ডেটা প্রস্তুত করতে:

  1. প্রয়োজনীয় বিন্যাসে চিত্রগুলি বের করতে একটি ImageAnalysis অবজেক্ট তৈরি করুন:

    imageAnalyzer =
        ImageAnalysis.Builder()
            .setTargetAspectRatio(AspectRatio.RATIO_4_3)
            .setTargetRotation(fragmentCameraBinding.viewFinder.display.rotation)
            .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
            .setOutputImageFormat(OUTPUT_IMAGE_FORMAT_RGBA_8888)
            .build()
            ...
    
  2. ক্যামেরা সাবসিস্টেমের সাথে বিশ্লেষক সংযোগ করুন এবং ক্যামেরা থেকে প্রাপ্ত ডেটা ধারণ করার জন্য একটি বিটম্যাপ বাফার তৈরি করুন:

    .also {
      it.setAnalyzer(cameraExecutor) {
        image -> if (!::bitmapBuffer.isInitialized)
        { bitmapBuffer = Bitmap.createBitmap( image.width, image.height,
        Bitmap.Config.ARGB_8888 ) } detectObjects(image)
        }
      }
    
  3. মডেলের জন্য প্রয়োজনীয় নির্দিষ্ট চিত্র ডেটা বের করুন এবং চিত্র ঘূর্ণন তথ্য পাস করুন:

    private fun detectObjects(image: ImageProxy) {
      //Copy out RGB bits to the shared bitmap buffer
      image.use {bitmapBuffer.copyPixelsFromBuffer(image.planes[0].buffer) }
        val imageRotation = image.imageInfo.rotationDegrees
        objectDetectorHelper.detect(bitmapBuffer, imageRotation)
      }
    
  4. যেকোন চূড়ান্ত ডেটা ট্রান্সফরমেশন সম্পূর্ণ করুন এবং একটি TensorImage অবজেক্টে ইমেজ ডেটা যোগ করুন, যেমনটি উদাহরণ অ্যাপের ObjectDetectorHelper.detect() পদ্ধতিতে দেখানো হয়েছে:

    val imageProcessor = ImageProcessor.Builder().add(Rot90Op(-imageRotation / 90)).build()
    // Preprocess the image and convert it into a TensorImage for detection.
    val tensorImage = imageProcessor.process(TensorImage.fromBitmap(image))
    

ভবিষ্যদ্বাণী চালান

আপনার অ্যান্ড্রয়েড অ্যাপে, একবার আপনি সঠিক বিন্যাসে ইমেজ ডেটা সহ একটি TensorImage অবজেক্ট তৈরি করলে, আপনি একটি ভবিষ্যদ্বাণী বা অনুমান তৈরি করতে সেই ডেটার বিপরীতে মডেলটি চালাতে পারেন।

উদাহরণ অ্যাপের fragments/CameraFragment.kt ক্লাসে, bindCameraUseCases ফাংশনের মধ্যে imageAnalyzer অবজেক্টটি স্বয়ংক্রিয়ভাবে ভবিষ্যদ্বাণীর জন্য মডেলে ডেটা পাস করে যখন অ্যাপটি ক্যামেরার সাথে সংযুক্ত থাকে।

অ্যাপটি ক্যামেরা সিলেক্টর, প্রিভিউ উইন্ডো এবং এমএল মডেল প্রসেসিং পরিচালনা করতে cameraProvider.bindToLifecycle() পদ্ধতি ব্যবহার করে। ObjectDetectorHelper.kt ক্লাস মডেলের মধ্যে ইমেজ ডেটা পাস করার ব্যবস্থা করে। মডেল চালাতে এবং ইমেজ ডেটা থেকে ভবিষ্যদ্বাণী তৈরি করতে:

  • আপনার ভবিষ্যদ্বাণী ফাংশনে ইমেজ ডেটা পাস করে ভবিষ্যদ্বাণী চালান:

    val results = objectDetector?.detect(tensorImage)
    

টেনসরফ্লো লাইট ইন্টারপ্রেটার অবজেক্ট এই ডেটা গ্রহণ করে, এটিকে মডেলের বিপরীতে চালায় এবং ভবিষ্যদ্বাণীগুলির একটি তালিকা তৈরি করে। মডেল দ্বারা ডেটা ক্রমাগত প্রক্রিয়াকরণের জন্য, runForMultipleInputsOutputs() পদ্ধতিটি ব্যবহার করুন যাতে দোভাষী বস্তুগুলি তৈরি না হয় এবং তারপরে প্রতিটি ভবিষ্যদ্বাণী চালানোর জন্য সিস্টেম দ্বারা সরানো হয়।

মডেল আউটপুট হ্যান্ডেল

আপনার অ্যান্ড্রয়েড অ্যাপে, আপনি অবজেক্ট ডিটেকশন মডেলের বিপরীতে ইমেজ ডেটা চালানোর পরে, এটি ভবিষ্যদ্বাণীগুলির একটি তালিকা তৈরি করে যা আপনার অ্যাপ কোডকে অতিরিক্ত ব্যবসায়িক যুক্তি, ব্যবহারকারীর কাছে ফলাফল প্রদর্শন বা অন্যান্য পদক্ষেপের মাধ্যমে পরিচালনা করতে হবে।

যে কোনো প্রদত্ত TensorFlow Lite মডেলের আউটপুট এটি তৈরি করা ভবিষ্যদ্বাণীর সংখ্যা (এক বা একাধিক) এবং প্রতিটি ভবিষ্যদ্বাণীর জন্য বর্ণনামূলক তথ্যের পরিপ্রেক্ষিতে পরিবর্তিত হয়। একটি অবজেক্ট ডিটেকশন মডেলের ক্ষেত্রে, ভবিষ্যদ্বাণীতে সাধারণত একটি বাউন্ডিং বাক্সের ডেটা অন্তর্ভুক্ত থাকে যা নির্দেশ করে যে ছবিতে একটি বস্তু কোথায় সনাক্ত করা হয়েছে। উদাহরণ কোডে, ফলাফলগুলি CameraFragment.kt এর onResults ফাংশনে পাঠানো হয়, যেটি অবজেক্ট সনাক্তকরণ প্রক্রিয়ায় ডিটেক্টর লিসটেনার হিসেবে কাজ করে।

interface DetectorListener {
  fun onError(error: String)
  fun onResults(
    results: MutableList<Detection>?,
    inferenceTime: Long,
    imageHeight: Int,
    imageWidth: Int
  )
}

এই উদাহরণে ব্যবহৃত মডেলের জন্য, প্রতিটি ভবিষ্যদ্বাণীতে অবজেক্টের জন্য একটি বাউন্ডিং বক্সের অবস্থান, বস্তুর জন্য একটি লেবেল এবং ভবিষ্যদ্বাণীর আত্মবিশ্বাসের প্রতিনিধিত্বকারী ফ্লোট হিসাবে 0 এবং 1-এর মধ্যে একটি ভবিষ্যদ্বাণী স্কোর অন্তর্ভুক্ত রয়েছে, 1 সর্বোচ্চ আত্মবিশ্বাসের রেটিং। . সাধারণভাবে, 50% (0.5) এর নিচে স্কোর সহ ভবিষ্যদ্বাণীগুলিকে সিদ্ধান্তহীন বলে মনে করা হয়। যাইহোক, আপনি কীভাবে কম-মূল্যের পূর্বাভাসের ফলাফলগুলি পরিচালনা করবেন তা আপনার এবং আপনার আবেদনের প্রয়োজনের উপর নির্ভর করে।

মডেল পূর্বাভাস ফলাফল পরিচালনা করতে:

  1. আপনার অ্যাপ কোড বা ইউজার ইন্টারফেস অবজেক্টে ফলাফল পাস করতে শ্রোতা প্যাটার্ন ব্যবহার করুন। উদাহরণ অ্যাপটি ObjectDetectorHelper অবজেক্ট থেকে CameraFragment অবজেক্টে সনাক্তকরণের ফলাফলগুলি পাস করতে এই প্যাটার্নটি ব্যবহার করে:

    objectDetectorListener.onResults(
    // instance of CameraFragment
        results,
        inferenceTime,
        tensorImage.height,
        tensorImage.width)
    
  2. ফলাফলের উপর কাজ করুন, যেমন ব্যবহারকারীর কাছে পূর্বাভাস প্রদর্শন করা। উদাহরণটি ফলাফল দেখানোর জন্য CameraPreview অবজেক্টে একটি ওভারলে আঁকে:

    override fun onResults(
      results: MutableList<Detection>?,
      inferenceTime: Long,
      imageHeight: Int,
      imageWidth: Int
    ) {
        activity?.runOnUiThread {
            fragmentCameraBinding.bottomSheetLayout.inferenceTimeVal.text =
                String.format("%d ms", inferenceTime)
    
            // Pass necessary information to OverlayView for drawing on the canvas
            fragmentCameraBinding.overlay.setResults(
                results ?: LinkedList<Detection>(),
                imageHeight,
                imageWidth
            )
    
            // Force a redraw
            fragmentCameraBinding.overlay.invalidate()
        }
    }
    

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

পরবর্তী পদক্ষেপ

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