অ্যান্ড্রয়েডের জন্য কুইকস্টার্ট

একটি লাইভ ক্যামেরা ফিড বিশ্লেষণ করতে এবং বস্তু শনাক্ত করতে TensorFlow Lite-এর সাহায্যে কীভাবে একটি Android অ্যাপ তৈরি করতে হয় এই পৃষ্ঠাটি আপনাকে দেখায়। এই মেশিন লার্নিং ইউজ কেসকে বলা হয় অবজেক্ট ডিটেকশন । উদাহরণ অ্যাপটি অবজেক্ট ডিটেকশন মেশিন লার্নিং মডেল কার্যকর করতে Google Play পরিষেবার মাধ্যমে দৃষ্টির জন্য TensorFlow Lite টাস্ক লাইব্রেরি ব্যবহার করে, যা TensorFlow Lite-এর সাথে একটি ML অ্যাপ্লিকেশন তৈরির জন্য প্রস্তাবিত পদ্ধতি।

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

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

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

  • অ্যান্ড্রয়েড স্টুডিও 4.2 বা উচ্চতর
  • Android SDK সংস্করণ 21 বা উচ্চতর

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

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

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

  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_play_services
    

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

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

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

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

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

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

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

উদাহরণ অ্যাপ কিভাবে কাজ করে

উদাহরণ অ্যাপটি একটি অ্যান্ড্রয়েড ডিভাইসের ক্যামেরা থেকে লাইভ ভিডিও স্ট্রিমে টেনসরফ্লো লাইট ফর্ম্যাটে অবজেক্টের সন্ধান করার জন্য মোবাইলনেটভি1.tflite- এর মতো প্রাক-প্রশিক্ষিত বস্তু সনাক্তকরণ মডেল ব্যবহার করে। এই বৈশিষ্ট্যের জন্য কোডটি প্রাথমিকভাবে এই ফাইলগুলিতে রয়েছে:

  • ObjectDetectorHelper.kt - রানটাইম পরিবেশ শুরু করে, হার্ডওয়্যার ত্বরণ সক্ষম করে এবং অবজেক্ট ডিটেকশন এমএল মডেল চালায়।
  • CameraFragment.kt - ক্যামেরা ইমেজ ডেটা স্ট্রীম তৈরি করে, মডেলের জন্য ডেটা প্রস্তুত করে এবং অবজেক্ট সনাক্তকরণের ফলাফল প্রদর্শন করে।

পরবর্তী বিভাগগুলি আপনাকে এই কোড ফাইলগুলির মূল উপাদানগুলি দেখায়, যাতে আপনি এই কার্যকারিতা যোগ করতে একটি Android অ্যাপ পরিবর্তন করতে পারেন৷

অ্যাপটি তৈরি করুন

নিম্নলিখিত বিভাগগুলি আপনার নিজের Android অ্যাপ তৈরি করতে এবং উদাহরণ অ্যাপে দেখানো মডেলটি চালানোর মূল পদক্ষেপগুলি ব্যাখ্যা করে৷ এই নির্দেশাবলী একটি রেফারেন্স পয়েন্ট হিসাবে আগে দেখানো উদাহরণ অ্যাপ্লিকেশন ব্যবহার করে.

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

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

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

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

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

    ...
    dependencies {
    ...
        // Tensorflow Lite dependencies
        implementation 'org.tensorflow:tensorflow-lite-task-vision-play-services:0.4.2'
        implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
    ...
    }
    
  2. অ্যান্ড্রয়েড স্টুডিওতে, নির্বাচন করে প্রকল্প নির্ভরতা সিঙ্ক করুন: ফাইল > গ্রেডল ফাইলের সাথে প্রকল্প সিঙ্ক করুন

Google Play পরিষেবাগুলি শুরু করুন৷

আপনি যখন TensorFlow Lite মডেলগুলি চালানোর জন্য Google Play পরিষেবাগুলি ব্যবহার করেন, তখন আপনি পরিষেবাটি ব্যবহার করার আগে আপনাকে অবশ্যই শুরু করতে হবে৷ আপনি যদি পরিষেবার সাথে হার্ডওয়্যার ত্বরণ সমর্থন ব্যবহার করতে চান, যেমন GPU ত্বরণ, আপনি এই প্রাথমিককরণের অংশ হিসাবে সেই সমর্থনটিকেও সক্ষম করুন৷

Google Play পরিষেবাগুলির সাথে TensorFlow Lite আরম্ভ করতে:

  1. একটি TfLiteInitializationOptions অবজেক্ট তৈরি করুন এবং GPU সমর্থন সক্ষম করতে এটি পরিবর্তন করুন:

    val options = TfLiteInitializationOptions.builder()
        .setEnableGpuDelegateSupport(true)
        .build()
    
  2. প্লে পরিষেবার রানটাইম ব্যবহার সক্ষম করতে TfLiteVision.initialize() পদ্ধতি ব্যবহার করুন এবং এটি সফলভাবে লোড হয়েছে কিনা তা যাচাই করতে একজন শ্রোতা সেট করুন:

    TfLiteVision.initialize(context, options).addOnSuccessListener {
        objectDetectorListener.onInitialized()
    }.addOnFailureListener {
        // Called if the GPU Delegate is not supported on the device
        TfLiteVision.initialize(context).addOnSuccessListener {
            objectDetectorListener.onInitialized()
        }.addOnFailureListener{
            objectDetectorListener.onError("TfLiteVision failed to initialize: "
                    + it.message)
        }
    }
    

এমএল মডেল ইন্টারপ্রেটার শুরু করুন

মডেল ফাইল লোড করে এবং মডেল প্যারামিটার সেট করে TensorFlow Lite মেশিন লার্নিং মডেল ইন্টারপ্রেটার শুরু করুন। একটি TensorFlow Lite মডেলে মডেল কোড ধারণকারী একটি .tflite ফাইল অন্তর্ভুক্ত থাকে। আপনার ডেভেলপমেন্ট প্রজেক্টের src/main/assets ডিরেক্টরিতে আপনার মডেলগুলি সংরক্ষণ করা উচিত, উদাহরণস্বরূপ:

.../src/main/assets/mobilenetv1.tflite`

মডেলটি শুরু করতে:

  1. আপনার ডেভেলপমেন্ট প্রজেক্টের src/main/assets ডিরেক্টরিতে একটি .tflite মডেল ফাইল যোগ করুন, যেমন ssd_mobilenet_v1
  2. আপনার ML মডেলের ফাইলের নাম নির্দিষ্ট করতে modelName ভেরিয়েবল সেট করুন:

    val modelName = "mobilenetv1.tflite"
    
  3. মডেলের জন্য বিকল্পগুলি সেট করুন, যেমন পূর্বাভাস থ্রেশহোল্ড এবং ফলাফল সেট আকার:

    val optionsBuilder =
        ObjectDetector.ObjectDetectorOptions.builder()
            .setScoreThreshold(threshold)
            .setMaxResults(maxResults)
    
  4. বিকল্পগুলির সাথে GPU ত্বরণ সক্ষম করুন এবং ডিভাইসে ত্বরণ সমর্থিত না হলে কোডটিকে সুন্দরভাবে ব্যর্থ হওয়ার অনুমতি দিন:

    try {
        optionsBuilder.useGpu()
    } catch(e: Exception) {
        objectDetectorListener.onError("GPU is not supported on this device")
    }
    
    
  5. একটি TensorFlow Lite ObjectDetector অবজেক্ট তৈরি করতে এই অবজেক্টের সেটিংস ব্যবহার করুন যাতে মডেলটি রয়েছে:

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

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

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

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

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

  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 অবজেক্ট তৈরি করলে, আপনি একটি ভবিষ্যদ্বাণী বা অনুমান তৈরি করতে সেই ডেটার বিপরীতে মডেলটি চালাতে পারেন। উদাহরণ অ্যাপে, এই কোডটি ObjectDetectorHelper.detect() পদ্ধতিতে রয়েছে।

একটি মডেল চালানো এবং ইমেজ ডেটা থেকে ভবিষ্যদ্বাণী তৈরি করতে:

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

    val results = objectDetector?.detect(tensorImage)
    

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

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

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

  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()
        }
    }
    

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