অ্যান্ড্রয়েডে অটোএমএল-প্রশিক্ষিত মডেলের মাধ্যমে চিত্রগুলিতে বস্তুগুলি সনাক্ত করুন৷

আপনি AutoML Vision Edge ব্যবহার করে আপনার নিজের মডেলকে প্রশিক্ষণ দেওয়ার পরে, আপনি এটিকে আপনার অ্যাপে ব্যবহার করতে পারেন ছবিতে থাকা বস্তুগুলি সনাক্ত করতে৷

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

মডেল bundling বিকল্প
আপনার অ্যাপে বান্ডিল
  • মডেলটি আপনার অ্যাপের APK এর অংশ
  • Android ডিভাইস অফলাইনে থাকলেও মডেলটি অবিলম্বে উপলব্ধ
  • ফায়ারবেস প্রকল্পের প্রয়োজন নেই
Firebase দিয়ে হোস্ট করা হয়েছে

আপনি শুরু করার আগে

  1. আপনি যদি একটি মডেল ডাউনলোড করতে চান , তাহলে নিশ্চিত করুন যে আপনি আপনার Android প্রকল্পে Firebase যোগ করেছেন , যদি আপনি ইতিমধ্যে তা না করে থাকেন। আপনি মডেল বান্ডিল যখন এটি প্রয়োজন হয় না.

  2. আপনার মডিউলের অ্যাপ-লেভেল গ্রেডল ফাইলে টেনসরফ্লো লাইট টাস্ক লাইব্রেরির নির্ভরতা যোগ করুন, যা সাধারণত app/build.gradle হয় :

    আপনার অ্যাপের সাথে একটি মডেল বান্ডিল করার জন্য:

    dependencies {
      // ...
      // Object detection with a bundled Auto ML model
      implementation 'org.tensorflow:tensorflow-lite-task-vision:0.0.0-nightly-SNAPSHOT'
    }
    

    Firebase থেকে গতিশীলভাবে একটি মডেল ডাউনলোড করার জন্য, Firebase ML নির্ভরতা যোগ করুন:

    dependencies {
      // ...
      // Object detection with an Auto ML model deployed to Firebase
      implementation platform('com.google.firebase:firebase-bom:26.1.1')
      implementation 'com.google.firebase:firebase-ml-model-interpreter'
    
      implementation 'org.tensorflow:tensorflow-lite-task-vision:0.0.0-nightly'
    }
    

1. মডেল লোড করুন

একটি স্থানীয় মডেল উৎস কনফিগার করুন

আপনার অ্যাপের সাথে মডেল বান্ডিল করতে:

  1. আপনি Google Cloud কনসোল থেকে ডাউনলোড করা জিপ সংরক্ষণাগার থেকে মডেলটি বের করুন৷
  2. আপনার অ্যাপ প্যাকেজে আপনার মডেল অন্তর্ভুক্ত করুন:
    1. আপনার প্রোজেক্টে কোনো সম্পদ ফোল্ডার না থাকলে, app/ ফোল্ডারে ডান-ক্লিক করে নতুন > ফোল্ডার > সম্পদ ফোল্ডারে ক্লিক করে একটি তৈরি করুন।
    2. সম্পদ ফোল্ডারে এমবেডেড মেটাডেটা সহ আপনার tflite মডেল ফাইলটি অনুলিপি করুন।
  3. আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত যোগ করুন যাতে অ্যাপটি তৈরি করার সময় Gradle মডেল ফাইলটি সংকুচিত করে না:

    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

    মডেল ফাইল অ্যাপ প্যাকেজ অন্তর্ভুক্ত করা হবে এবং একটি কাঁচা সম্পদ হিসাবে উপলব্ধ.

একটি Firebase-হোস্টেড মডেল উৎস কনফিগার করুন

দূরবর্তীভাবে-হোস্ট করা মডেল ব্যবহার করতে, একটি RemoteModel অবজেক্ট তৈরি করুন, আপনি মডেলটি প্রকাশ করার সময় যে নামটি নির্ধারণ করেছিলেন তা উল্লেখ করে:

জাভা

// Specify the name you assigned when you deployed the model.
FirebaseCustomRemoteModel remoteModel =
        new FirebaseCustomRemoteModel.Builder("your_model").build();

কোটলিন

// Specify the name you assigned when you deployed the model.
val remoteModel =
    FirebaseCustomRemoteModel.Builder("your_model_name").build()

তারপরে, আপনি যে শর্তে ডাউনলোড করার অনুমতি দিতে চান তা উল্লেখ করে মডেল ডাউনলোড টাস্ক শুরু করুন। যদি মডেলটি ডিভাইসে না থাকে, বা মডেলটির একটি নতুন সংস্করণ উপলব্ধ থাকলে, টাস্কটি অসিঙ্ক্রোনাসভাবে Firebase থেকে মডেলটি ডাউনলোড করবে:

জাভা

DownloadConditions downloadConditions = new DownloadConditions.Builder()
        .requireWifi()
        .build();
RemoteModelManager.getInstance().download(remoteModel, downloadConditions)
        .addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(@NonNull Task<Void> task) {
                // Success.
            }
        });

কোটলিন

val downloadConditions = DownloadConditions.Builder()
    .requireWifi()
    .build()
RemoteModelManager.getInstance().download(remoteModel, downloadConditions)
    .addOnSuccessListener {
        // Success.
    }

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

আপনার মডেল থেকে একটি অবজেক্ট ডিটেক্টর তৈরি করুন

আপনি আপনার মডেল উত্স কনফিগার করার পরে, তাদের মধ্যে একটি থেকে একটি ObjectDetector অবজেক্ট তৈরি করুন।

যদি আপনার কাছে শুধুমাত্র স্থানীয়ভাবে বান্ডিল করা মডেল থাকে, তাহলে আপনার মডেল ফাইল থেকে একটি অবজেক্ট ডিটেক্টর তৈরি করুন এবং আপনার প্রয়োজনীয় কনফিডেন্স স্কোর থ্রেশহোল্ড কনফিগার করুন ( আপনার মডেলের মূল্যায়ন দেখুন):

জাভা

// Initialization
ObjectDetectorOptions options = ObjectDetectorOptions.builder()
    .setScoreThreshold(0)  // Evaluate your model in the Google Cloud console
                           // to determine an appropriate value.
    .build();
ObjectDetector objectDetector = ObjectDetector.createFromFileAndOptions(context, modelFile, options);

কোটলিন

// Initialization
val options = ObjectDetectorOptions.builder()
    .setScoreThreshold(0)  // Evaluate your model in the Google Cloud console
                           // to determine an appropriate value.
    .build()
val objectDetector = ObjectDetector.createFromFileAndOptions(context, modelFile, options)

আপনার যদি দূরবর্তীভাবে-হোস্ট করা মডেল থাকে, তাহলে আপনাকে এটি চালানোর আগে এটি ডাউনলোড করা হয়েছে কিনা তা পরীক্ষা করতে হবে। আপনি মডেল ম্যানেজারের isModelDownloaded() পদ্ধতি ব্যবহার করে মডেল ডাউনলোড টাস্কের স্থিতি পরীক্ষা করতে পারেন।

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

জাভা

FirebaseModelManager.getInstance().isModelDownloaded(remoteModel)
        .addOnSuccessListener(new OnSuccessListener<Boolean>() {
            @Override
            public void onSuccess(Boolean isDownloaded) {
            }
        });

কোটলিন

FirebaseModelManager.getInstance().isModelDownloaded(remoteModel)
        .addOnSuccessListener { success ->

        }

যদি আপনার কাছে শুধুমাত্র একটি দূরবর্তীভাবে হোস্ট করা মডেল থাকে, তাহলে আপনি মডেল-সম্পর্কিত কার্যকারিতা অক্ষম করুন-উদাহরণস্বরূপ, আপনার UI-এর ধূসর-আউট বা অংশ লুকান-যতক্ষণ না আপনি নিশ্চিত করেন যে মডেলটি ডাউনলোড করা হয়েছে। আপনি মডেল ম্যানেজারের download() পদ্ধতিতে একজন শ্রোতাকে সংযুক্ত করে এটি করতে পারেন।

একবার আপনি জানেন যে আপনার মডেলটি ডাউনলোড করা হয়েছে, মডেল ফাইল থেকে একটি অবজেক্ট ডিটেক্টর তৈরি করুন:

জাভা

FirebaseModelManager.getInstance().getLatestModelFile(remoteModel)
        .addOnCompleteListener(new OnCompleteListener<File>() {
            @Override
            public void onComplete(@NonNull Task<File> task) {
                File modelFile = task.getResult();
                if (modelFile != null) {
                    ObjectDetectorOptions options = ObjectDetectorOptions.builder()
                            .setScoreThreshold(0)
                            .build();
                    objectDetector = ObjectDetector.createFromFileAndOptions(
                            getApplicationContext(), modelFile.getPath(), options);
                }
            }
        });

কোটলিন

FirebaseModelManager.getInstance().getLatestModelFile(remoteModel)
        .addOnSuccessListener { modelFile ->
            val options = ObjectDetectorOptions.builder()
                    .setScoreThreshold(0f)
                    .build()
            objectDetector = ObjectDetector.createFromFileAndOptions(
                    applicationContext, modelFile.path, options)
        }

2. ইনপুট ইমেজ প্রস্তুত করুন

তারপর, আপনি লেবেল করতে চান এমন প্রতিটি ছবির জন্য, আপনার ছবি থেকে একটি TensorImage অবজেক্ট তৈরি করুন। আপনি fromBitmap পদ্ধতি ব্যবহার করে একটি Bitmap থেকে একটি TensorImage অবজেক্ট তৈরি করতে পারেন:

জাভা

TensorImage image = TensorImage.fromBitmap(bitmap);

কোটলিন

val image = TensorImage.fromBitmap(bitmap)

যদি আপনার ছবির ডেটা Bitmap না থাকে, তাহলে আপনি টেনসরফ্লো লাইট ডক্সে দেখানো একটি পিক্সেল অ্যারে লোড করতে পারেন।

3. অবজেক্ট ডিটেক্টর চালান

একটি ছবিতে অবজেক্ট সনাক্ত করতে, TensorImage অবজেক্টটিকে ObjectDetector detect() পদ্ধতিতে পাস করুন।

জাভা

List<Detection> results = objectDetector.detect(image);

কোটলিন

val results = objectDetector.detect(image)

4. লেবেলযুক্ত বস্তু সম্পর্কে তথ্য পান

বস্তু সনাক্তকরণ অপারেশন সফল হলে, এটি Detection বস্তুর একটি তালিকা প্রদান করে। প্রতিটি Detection বস্তু এমন কিছু উপস্থাপন করে যা চিত্রে সনাক্ত করা হয়েছিল। আপনি প্রতিটি বস্তুর বাউন্ডিং বাক্স এবং এর লেবেল পেতে পারেন।

যেমন:

জাভা

for (Detection result : results) {
    RectF bounds = result.getBoundingBox();
    List<Category> labels = result.getCategories();
}

কোটলিন

for (result in results) {
    val bounds = result.getBoundingBox()
    val labels = result.getCategories()
}

রিয়েল-টাইম কর্মক্ষমতা উন্নত করার টিপস

আপনি যদি একটি রিয়েল-টাইম অ্যাপ্লিকেশনে চিত্রগুলিকে লেবেল করতে চান তবে সেরা ফ্রেমরেটগুলি অর্জন করতে এই নির্দেশিকাগুলি অনুসরণ করুন:

  • থ্রটল ইমেজ লেবেলার কল. ইমেজ লেবেলার চলাকালীন যদি একটি নতুন ভিডিও ফ্রেম উপলব্ধ হয়, ফ্রেমটি ফেলে দিন। একটি উদাহরণের জন্য Quickstart নমুনা অ্যাপে VisionProcessorBase ক্লাস দেখুন।
  • আপনি যদি ইনপুট ইমেজে গ্রাফিক্স ওভারলে করার জন্য ইমেজ লেবেলারের আউটপুট ব্যবহার করেন, তাহলে প্রথমে ফলাফল পান, তারপর একটি একক ধাপে ইমেজ এবং ওভারলে রেন্ডার করুন। এটি করার মাধ্যমে, আপনি প্রতিটি ইনপুট ফ্রেমের জন্য শুধুমাত্র একবার প্রদর্শন পৃষ্ঠে রেন্ডার করবেন। একটি উদাহরণের জন্য Quickstart নমুনা অ্যাপে CameraSourcePreview এবং GraphicOverlay ক্লাসগুলি দেখুন।
  • আপনি Camera2 API ব্যবহার করলে, ImageFormat.YUV_420_888 ফরম্যাটে ছবি ক্যাপচার করুন।

    আপনি পুরানো ক্যামেরা API ব্যবহার করলে, ImageFormat.NV21 ফর্ম্যাটে ছবিগুলি ক্যাপচার করুন৷