AutoML Vision Edge ব্যবহার করে আপনার নিজস্ব মডেল প্রশিক্ষণের পর, আপনি ছবিতে বস্তু সনাক্ত করতে আপনার অ্যাপে এটি ব্যবহার করতে পারেন।
AutoML Vision Edge থেকে প্রশিক্ষিত মডেলগুলিকে একীভূত করার দুটি উপায় রয়েছে: আপনি আপনার অ্যাপের সম্পদ ফোল্ডারের ভিতরে রেখে মডেলটি বান্ডেল করতে পারেন, অথবা আপনি Firebase থেকে গতিশীলভাবে এটি ডাউনলোড করতে পারেন।
| মডেল বান্ডলিং বিকল্পগুলি | |
|---|---|
| আপনার অ্যাপে বান্ডেল করা |
|
| Firebase এর সাথে হোস্ট করা হয়েছে |
|
শুরু করার আগে
যদি আপনি একটি মডেল ডাউনলোড করতে চান , তাহলে আপনার অ্যান্ড্রয়েড প্রোজেক্টে Firebase যোগ করতে ভুলবেন না, যদি আপনি ইতিমধ্যেই তা না করে থাকেন। মডেলটি বান্ডেল করার সময় এটি প্রয়োজন হয় না।
আপনার মডিউলের অ্যাপ-লেভেল gradle ফাইলে TensorFlow Lite Task লাইব্রেরির জন্য নির্ভরতা যোগ করুন, যা সাধারণত
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. মডেলটি লোড করুন
একটি স্থানীয় মডেল উৎস কনফিগার করুন
আপনার অ্যাপের সাথে মডেলটি বান্ডেল করতে:
- Google Cloud কনসোল থেকে ডাউনলোড করা জিপ আর্কাইভ থেকে মডেলটি বের করুন।
- আপনার অ্যাপ প্যাকেজে আপনার মডেলটি অন্তর্ভুক্ত করুন:
- যদি আপনার প্রোজেক্টে কোন অ্যাসেট ফোল্ডার না থাকে, তাহলে
app/ফোল্ডারে ডান ক্লিক করে, তারপর New > Folder > Assets Folder এ ক্লিক করে একটি তৈরি করুন। - আপনার
tfliteমডেল ফাইলটি এমবেডেড মেটাডেটা সহ অ্যাসেট ফোল্ডারে কপি করুন।
- যদি আপনার প্রোজেক্টে কোন অ্যাসেট ফোল্ডার না থাকে, তাহলে
অ্যাপ তৈরির সময় Gradle মডেল ফাইলটি সংকুচিত না করে তা নিশ্চিত করতে আপনার অ্যাপের
build.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 না থাকে, তাহলে আপনি TensorFlow Lite ডক্সে দেখানো পিক্সেল অ্যারে লোড করতে পারেন।
৩. অবজেক্ট ডিটেক্টর চালান
একটি ছবিতে বস্তু সনাক্ত করতে, TensorImage বস্তুটিকে ObjectDetector এর detect() পদ্ধতিতে পাস করুন।
জাভা
List<Detection> results = objectDetector.detect(image);
কোটলিন
val results = objectDetector.detect(image)
৪. লেবেলযুক্ত বস্তু সম্পর্কে তথ্য পান
যদি অবজেক্ট ডিটেকশন অপারেশন সফল হয়, তাহলে এটি 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()
}
রিয়েল-টাইম পারফর্ম্যান্স উন্নত করার টিপস
আপনি যদি রিয়েল-টাইম অ্যাপ্লিকেশনে ছবি লেবেল করতে চান, তাহলে সেরা ফ্রেমরেট অর্জনের জন্য এই নির্দেশিকাগুলি অনুসরণ করুন:
- থ্রটল কল ইমেজ লেবেলারে আসে। ইমেজ লেবেলার চলাকালীন যদি একটি নতুন ভিডিও ফ্রেম পাওয়া যায়, তাহলে ফ্রেমটি ফেলে দিন। উদাহরণের জন্য কুইকস্টার্ট নমুনা অ্যাপে
VisionProcessorBaseক্লাসটি দেখুন। - যদি আপনি ইনপুট ছবিতে গ্রাফিক্স ওভারলে করার জন্য ইমেজ লেবেলারের আউটপুট ব্যবহার করেন, তাহলে প্রথমে ফলাফলটি পান, তারপর ইমেজটি রেন্ডার করুন এবং এক ধাপে ওভারলে করুন। এটি করার মাধ্যমে, আপনি প্রতিটি ইনপুট ফ্রেমের জন্য শুধুমাত্র একবার ডিসপ্লে সারফেসে রেন্ডার করবেন। উদাহরণের জন্য কুইকস্টার্ট নমুনা অ্যাপে
CameraSourcePreviewএবংGraphicOverlayক্লাসগুলি দেখুন। যদি আপনি Camera2 API ব্যবহার করেন, তাহলে
ImageFormat.YUV_420_888ফর্ম্যাটে ছবি তুলুন।যদি আপনি পুরোনো ক্যামেরা API ব্যবহার করেন, তাহলে
ImageFormat.NV21ফর্ম্যাটে ছবি তুলুন।