1. আপনি শুরু করার আগে
আপনি কি গুগল লেন্সের ডেমো দেখেছেন, যেখানে আপনি আপনার ফোনের ক্যামেরাকে একটি বস্তুর দিকে নির্দেশ করতে পারেন এবং আপনি এটি অনলাইনে কোথায় কিনতে পারেন তা খুঁজে পেতে পারেন? আপনি যদি আপনার অ্যাপে একই বৈশিষ্ট্য যুক্ত করতে পারেন তা শিখতে চান, তাহলে এই কোডল্যাবটি আপনার জন্য। এটি একটি শেখার পথের অংশ যা আপনাকে শেখায় কিভাবে একটি মোবাইল অ্যাপে একটি পণ্য চিত্র অনুসন্ধান বৈশিষ্ট্য তৈরি করতে হয়৷
এই কোডল্যাবে, আপনি একটি পণ্যের চিত্র অনুসন্ধান বৈশিষ্ট্য তৈরি করার প্রথম ধাপটি শিখবেন: কীভাবে চিত্রগুলিতে বস্তুগুলি সনাক্ত করতে হয় এবং ব্যবহারকারীকে তারা যে বস্তুগুলি অনুসন্ধান করতে চায় তা চয়ন করতে দেয়৷ এই বৈশিষ্ট্যটি তৈরি করতে আপনি এমএল কিট অবজেক্ট ডিটেকশন এবং ট্র্যাকিং ব্যবহার করবেন।
আপনি শেখার পথে ভিশন API পণ্য অনুসন্ধানের সাথে কীভাবে একটি পণ্য অনুসন্ধান ব্যাকএন্ড তৈরি করবেন তা সহ অবশিষ্ট পদক্ষেপগুলি সম্পর্কে শিখতে পারেন।
আপনি কি নির্মাণ করবেন
|
আপনি কি শিখবেন
- কিভাবে আপনার Android অ্যাপ্লিকেশনে ML Kit SDK সংহত করবেন
- এমএল কিট অবজেক্ট ডিটেকশন এবং ট্র্যাকিং API
আপনি কি প্রয়োজন হবে
- অ্যান্ড্রয়েড স্টুডিওর একটি সাম্প্রতিক সংস্করণ (v4.1.2+)
- অ্যান্ড্রয়েড স্টুডিও এমুলেটর বা একটি শারীরিক অ্যান্ড্রয়েড ডিভাইস
- নমুনা কোড
- কোটলিনে অ্যান্ড্রয়েড বিকাশের প্রাথমিক জ্ঞান
এই কোডল্যাবটি এমএল কিটের উপর দৃষ্টি নিবদ্ধ করে। অন্যান্য ধারণা এবং কোড ব্লকগুলি অধ্যয়ন করা হয় না এবং আপনাকে কেবল অনুলিপি এবং পেস্ট করার জন্য সরবরাহ করা হয়।
2. সেট আপ করুন
কোডটি ডাউনলোড করুন
এই কোডল্যাবের সমস্ত কোড ডাউনলোড করতে নিম্নলিখিত লিঙ্কে ক্লিক করুন:
ডাউনলোড করা জিপ ফাইলটি আনপ্যাক করুন। এটি আপনার প্রয়োজনীয় সমস্ত সংস্থান সহ একটি রুট ফোল্ডার ( odml-pathways-main
) আনপ্যাক করবে। এই কোডল্যাবের জন্য, আপনার শুধুমাত্র product-search/codelab1/android
সাবডিরেক্টরিতে উৎসের প্রয়োজন হবে।
mlkit-android সংগ্রহস্থলের অবজেক্ট-ডিটেকশন সাবডিরেক্টরিতে দুটি ডিরেক্টরি রয়েছে:
- starter — এই কোডল্যাবের জন্য আপনি যে কোড তৈরি করেন তা শুরু করার কোড।
- চূড়ান্ত — সমাপ্ত নমুনা অ্যাপের জন্য সম্পূর্ণ কোড।
3. প্রকল্পে ML কিট অবজেক্ট ডিটেকশন এবং ট্র্যাকিং API যোগ করুন
অ্যান্ড্রয়েড স্টুডিওতে অ্যাপটি আমদানি করুন
অ্যান্ড্রয়েড স্টুডিওতে স্টার্টার অ্যাপ আমদানি করে শুরু করুন।
অ্যান্ড্রয়েড স্টুডিওতে যান, ইমপোর্ট প্রজেক্ট (গ্র্যাডল, ইক্লিপস এডিটি, ইত্যাদি) নির্বাচন করুন এবং আপনি আগে ডাউনলোড করা সোর্স কোড থেকে স্টার্টার ফোল্ডারটি বেছে নিন।
এমএল কিট অবজেক্ট ডিটেকশন এবং ট্র্যাকিংয়ের জন্য নির্ভরতা যোগ করুন
ML কিট নির্ভরতা আপনাকে আপনার অ্যাপে ML Kit ODT SDK সংহত করতে দেয়।
আপনার প্রকল্পের app/build.gradle
ফাইলে যান এবং নিশ্চিত করুন যে নির্ভরতা ইতিমধ্যেই আছে:
build.gradle
dependencies {
// ...
implementation 'com.google.mlkit:object-detection:16.2.4'
}
গ্রেডল ফাইলের সাথে আপনার প্রকল্প সিঙ্ক করুন
আপনার অ্যাপে সমস্ত নির্ভরতা উপলব্ধ রয়েছে তা নিশ্চিত করার জন্য, আপনাকে এই মুহুর্তে গ্রেডল ফাইলগুলির সাথে আপনার প্রকল্প সিঙ্ক করা উচিত।
গ্রেডল ফাইলের সাথে সিঙ্ক প্রকল্প নির্বাচন করুন ( ) অ্যান্ড্রয়েড স্টুডিও টুলবার থেকে।
(যদি এই বোতামটি অক্ষম করা থাকে, তবে নিশ্চিত করুন যে আপনি শুধুমাত্র starter/app/build.gradle আমদানি করেছেন, সম্পূর্ণ সংগ্রহস্থল নয়।)
4. স্টার্টার অ্যাপ চালান
এখন যেহেতু আপনি অ্যান্ড্রয়েড স্টুডিওতে প্রজেক্টটি ইম্পোর্ট করেছেন এবং ML কিট অবজেক্ট ডিটেকশন এবং ট্র্যাকিংয়ের জন্য নির্ভরতা যোগ করেছেন, আপনি প্রথমবারের জন্য অ্যাপটি চালানোর জন্য প্রস্তুত৷
ইউএসবি এর মাধ্যমে আপনার অ্যান্ড্রয়েড ডিভাইসটিকে আপনার হোস্টের সাথে সংযুক্ত করুন বা অ্যান্ড্রয়েড স্টুডিও এমুলেটর শুরু করুন এবং রান ক্লিক করুন ( ) অ্যান্ড্রয়েড স্টুডিও টুলবারে।
অ্যাপটি চালান এবং অন্বেষণ করুন
অ্যাপটি আপনার অ্যান্ড্রয়েড ডিভাইসে চালু করা উচিত। এটিতে কিছু বয়লারপ্লেট কোড রয়েছে যা আপনাকে একটি ফটো ক্যাপচার করতে, বা একটি প্রিসেট চিত্র নির্বাচন করতে এবং এটিকে একটি বস্তু সনাক্তকরণ এবং ট্র্যাকিং পাইপলাইনে ফিড করতে দেয় যা আপনি এই কোডল্যাবে তৈরি করবেন। কোড লেখার আগে অ্যাপটি একটু এক্সপ্লোর করুন:
প্রথমে একটি বোতাম আছে ( ) নীচে থেকে
- আপনার ডিভাইস/এমুলেটরে সমন্বিত ক্যামেরা অ্যাপ চালু করুন
- আপনার ক্যামেরা অ্যাপের ভিতরে একটি ছবি তুলুন
- স্টার্টার অ্যাপে ক্যাপচার করা ছবি পান
- ছবিটি প্রদর্শন করুন
" ফটো তুলুন " বোতামটি ব্যবহার করে দেখুন। একটি ছবি তোলার জন্য প্রম্পটগুলি অনুসরণ করুন, ফটোটি গ্রহণ করুন এবং স্টার্টার অ্যাপের ভিতরে প্রদর্শিত এটি পর্যবেক্ষণ করুন।
দ্বিতীয়ত, 3টি প্রিসেট ইমেজ আছে যেগুলো থেকে আপনি বেছে নিতে পারেন। আপনি যদি একটি Android এমুলেটর চালাচ্ছেন তবে আপনি অবজেক্ট সনাক্তকরণ কোড পরীক্ষা করতে পরে এই চিত্রগুলি ব্যবহার করতে পারেন।
- 3টি প্রিসেট ছবি থেকে একটি ছবি নির্বাচন করুন ।
- দেখুন যে ছবিটি বড় ভিউতে দেখা যাচ্ছে।
5. ডিভাইসে অবজেক্ট সনাক্তকরণ যোগ করুন
এই ধাপে, আপনি চিত্রগুলিতে বস্তুগুলি সনাক্ত করতে স্টার্টার অ্যাপে কার্যকারিতা যুক্ত করবেন। আপনি আগের ধাপে যেমন দেখেছেন, স্টার্টার অ্যাপে ডিভাইসে ক্যামেরা অ্যাপের সাহায্যে ছবি তোলার জন্য বয়লারপ্লেট কোড রয়েছে। অ্যাপটিতে 3টি প্রিসেট ছবিও রয়েছে যেগুলি আপনি যদি অ্যান্ড্রয়েড এমুলেটরে কোডল্যাব চালান তবে আপনি অবজেক্ট সনাক্তকরণের চেষ্টা করতে পারেন।
আপনি যখন একটি ছবি নির্বাচন করেন, হয় প্রিসেট ইমেজ থেকে বা ক্যামেরা অ্যাপের মাধ্যমে একটি ছবি তোলার মাধ্যমে, বয়লারপ্লেট কোড সেই ছবিটিকে একটি Bitmap
ইনস্ট্যান্সে ডিকোড করে, এটি স্ক্রিনে দেখায় এবং ছবির সাথে runObjectDetection
পদ্ধতিতে কল করে।
এই ধাপে, আপনি অবজেক্ট ডিটেকশন করার জন্য runObjectDetection
পদ্ধতিতে কোড যোগ করবেন!
একটি ছবিতে ডিভাইসে অবজেক্ট সনাক্তকরণ সেট আপ করুন এবং চালান৷
এমএল কিট ওডিটি সেট আপ করার জন্য 3টি API সহ শুধুমাত্র 3টি সহজ ধাপ রয়েছে৷
- একটি ছবি প্রস্তুত করুন:
InputImage
- একটি আবিষ্কারক বস্তু তৈরি করুন:
ObjectDetection.getClient(options)
- উপরের 2টি বস্তু সংযুক্ত করুন:
process(image)
আপনি ফাংশন ** runObjectDetection(bitmap: Bitmap)
** MainActivity.kt
ফাইলের ভিতরে এইগুলি অর্জন করেন।
/**
* ML Kit Object Detection Function
*/
private fun runObjectDetection(bitmap: Bitmap) {
}
এই মুহূর্তে ফাংশনটি খালি। এমএল কিট ওডিটি সংহত করতে নিম্নলিখিত ধাপে যান! পথে, অ্যান্ড্রয়েড স্টুডিও আপনাকে প্রয়োজনীয় আমদানি যোগ করার জন্য অনুরোধ করবে
-
com.google.mlkit.vision.common.InputImage
-
com.google.mlkit.vision.objects.ObjectDetection
-
com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions
ধাপ 1: একটি ইনপুট ইমেজ তৈরি করুন
এমএল কিট একটি Bitmap
থেকে একটি InputImage
তৈরি করতে একটি সাধারণ API প্রদান করে। তারপর আপনি ML Kit API-এ একটি InputImage
ফিড করতে পারেন।
// Step 1: create ML Kit's InputImage object
val image = InputImage.fromBitmap(bitmap, 0)
runObjectDetection(bitmap:Bitmap)
এর শীর্ষে উপরের কোডটি যোগ করুন ।
ধাপ 2: একটি আবিষ্কারক উদাহরণ তৈরি করুন
এমএল কিট বিল্ডার ডিজাইন প্যাটার্ন অনুসরণ করে, আপনি বিল্ডারের কাছে কনফিগারেশনটি পাস করবেন, তারপর এটি থেকে একটি ডিটেক্টর অর্জন করবেন। কনফিগার করার জন্য 3টি বিকল্প রয়েছে (কোডল্যাবে বোল্ড ব্যবহার করা হয়):
- আবিষ্কারক মোড ( একক চিত্র বা স্ট্রিম )
- সনাক্তকরণ মোড ( একক বা একাধিক বস্তু সনাক্তকরণ )
- শ্রেণিবিন্যাস মোড ( চালু বা বন্ধ )
এই কোডল্যাবটি একক চিত্রের জন্য - একাধিক বস্তু সনাক্তকরণ এবং শ্রেণীবিভাগ, আসুন এটি করি:
// Step 2: acquire detector object
val options = ObjectDetectorOptions.Builder()
.setDetectorMode(ObjectDetectorOptions.SINGLE_IMAGE_MODE)
.enableMultipleObjects()
.enableClassification()
.build()
val objectDetector = ObjectDetection.getClient(options)
ধাপ 3: ডিটেক্টরে ছবি(গুলি) ফিড করুন
বস্তু সনাক্তকরণ এবং শ্রেণীবিভাগ হল async প্রক্রিয়াকরণ:
- আপনি ডিটেক্টরে একটি চিত্র পাঠান (
process()
এর মাধ্যমে) - ডিটেক্টর এটি বেশ কঠিন কাজ করে
- ডিটেক্টর একটি কলব্যাকের মাধ্যমে আপনাকে ফলাফলটি রিপোর্ট করে
নিম্নলিখিত কোডটি ঠিক তাই করে ( মজার রানঅবজেক্টডিটেকশন (বিটম্যাপ:বিটম্যাপ) এর ভিতরে বিদ্যমান কোডটিতে অনুলিপি করুন এবং যুক্ত করুন fun runObjectDetection(bitmap:Bitmap)):
// Step 3: feed given image to detector and setup callback
objectDetector.process(image)
.addOnSuccessListener {
// Task completed successfully
debugPrint(it)
}
.addOnFailureListener {
// Task failed with an exception
Log.e(TAG, it.message.toString())
}
সমাপ্তির পরে, ডিটেক্টর আপনাকে অবহিত করবে
- বস্তুর মোট সংখ্যা সনাক্ত করা হয়েছে
- প্রতিটি সনাক্ত করা বস্তুর সাথে বর্ণনা করা হয়েছে
-
trackingId
: একটি পূর্ণসংখ্যা যা আপনি ক্রস ফ্রেম ট্র্যাক করতে ব্যবহার করেন (এই কোডল্যাবে ব্যবহার করা হয় না) -
boundingBox
: বস্তুর বাউন্ডিং বক্স -
labels:
সনাক্ত করা বস্তুর জন্য লেবেলের তালিকা (শুধুমাত্র যখন শ্রেণীবিভাগ সক্রিয় থাকে) -
index
(এই লেবেলের সূচী পান) -
text
("ফ্যাশন গুডস", "ফুড", "হোম গুডস", "প্লেস", "প্ল্যান্ট" সহ এই লেবেলের টেক্সট পান) -
confidence
(1.0 এর সাথে 0.0 থেকে 1.0 এর মধ্যে ফ্লোট মানে 100%)
আপনি সম্ভবত লক্ষ্য করেছেন যে কোডটি debugPrint()
দিয়ে Logcat-এ ফলাফল সনাক্ত করে। এটি MainActivity
ক্লাসে যোগ করুন:
private fun debugPrint(detectedObjects: List<DetectedObject>) {
detectedObjects.forEachIndexed { index, detectedObject ->
val box = detectedObject.boundingBox
Log.d(TAG, "Detected object: $index")
Log.d(TAG, " trackingId: ${detectedObject.trackingId}")
Log.d(TAG, " boundingBox: (${box.left}, ${box.top}) - (${box.right},${box.bottom})")
detectedObject.labels.forEach {
Log.d(TAG, " categories: ${it.text}")
Log.d(TAG, " confidence: ${it.confidence}")
}
}
}
এখন আপনি সনাক্তকরণের জন্য ছবি গ্রহণ করতে প্রস্তুত!
রান ক্লিক করে কোডল্যাব চালান ( ) অ্যান্ড্রয়েড স্টুডিও টুলবারে। একটি পূর্বনির্ধারিত চিত্র নির্বাচন করার চেষ্টা করুন বা একটি ছবি তুলুন, তারপরে লগক্যাট উইন্ডোটি দেখুন( ) IDE এর ভিতরে। আপনি এই অনুরূপ কিছু দেখতে হবে:
D/MLKit Object Detection: Detected object: 0
D/MLKit Object Detection: trackingId: null
D/MLKit Object Detection: boundingBox: (481, 2021) - (2426,3376)
D/MLKit Object Detection: categories: Fashion good
D/MLKit Object Detection: confidence: 0.90234375
D/MLKit Object Detection: Detected object: 1
D/MLKit Object Detection: trackingId: null
D/MLKit Object Detection: boundingBox: (2639, 2633) - (3058,3577)
D/MLKit Object Detection: Detected object: 2
D/MLKit Object Detection: trackingId: null
D/MLKit Object Detection: boundingBox: (3, 1816) - (615,2597)
D/MLKit Object Detection: categories: Home good
D/MLKit Object Detection: confidence: 0.75390625
যার মানে ডিটেক্টর 3টি বস্তু দেখেছে:
- বিভাগগুলি হল ফ্যাশন ভাল এবং ঘর ভাল ।
- ২য় শ্রেণীতে ফেরত দেওয়া হয়নি কারণ এটি একটি অজানা শ্রেণী।
- কোন
trackingId
নেই (কারণ এটি একক চিত্র সনাক্তকরণ মোড) -
boundingBox
আয়তক্ষেত্রের ভিতরে অবস্থান (যেমন (481, 2021) – (2426, 3376)) - আবিষ্কারক বেশ আত্মবিশ্বাসী যে 1মটি একটি ফ্যাশন ভাল (90%) ( এটি একটি পোশাক )
এমএল কিট অবজেক্ট ডিটেকশন কাজ করার জন্য টেকনিক্যালি আপনার যা দরকার- এই মুহূর্তে আপনি সবই পেয়েছেন! অভিনন্দন !
হ্যাঁ, UI এর দিকে, আপনি এখনও সেই পর্যায়ে আছেন যখন আপনি শুরু করেছিলেন, কিন্তু আপনি UI-তে সনাক্ত করা ফলাফলগুলি ব্যবহার করতে পারেন যেমন একটি ভাল অভিজ্ঞতা তৈরি করতে বাউন্ডিং বাক্সটি আঁকা। পরবর্তী ধাপ হল শনাক্ত ফলাফল কল্পনা করা!
6. সনাক্তকরণ ফলাফল পোস্ট-প্রসেসিং
পূর্ববর্তী ধাপে, আপনি সনাক্ত করা ফলাফল logcat এ মুদ্রণ করেছেন: সহজ এবং দ্রুত।
এই বিভাগে, আপনি চিত্রের ফলাফল ব্যবহার করবেন:
- ছবির উপর আবদ্ধ বাক্স আঁকুন
- বাউন্ডিং বাক্সের ভিতরে বিভাগের নাম এবং আত্মবিশ্বাস আঁকুন
ভিজ্যুয়ালাইজেশন ইউটিলিটিগুলি বুঝুন
কোডল্যাবের ভিতরে কিছু বয়লারপ্লেট কোড রয়েছে যা আপনাকে সনাক্তকরণের ফলাফলটি কল্পনা করতে সহায়তা করে। আমাদের ভিজ্যুয়ালাইজেশন কোড সহজ করতে এই ইউটিলিটিগুলি ব্যবহার করুন:
-
class ImageClickableView
এটি একটি ইমেজ ভিউ ক্লাস যা সনাক্তকরণ ফলাফলের সাথে ভিজ্যুয়ালাইজেশন এবং ইন্টারঅ্যাকশনের জন্য কিছু সুবিধাজনক ব্যবহার প্রদান করে। -
fun drawDetectionResults(results: List<DetectedObject>)
এই পদ্ধতিটি সনাক্ত করা প্রতিটি বস্তুর কেন্দ্রে সাদা বৃত্ত আঁকে। -
fun setOnObjectClickListener(listener: ((objectImage: Bitmap) -> Unit))
এটি একটি কলব্যাক যা ক্রপ করা ইমেজ প্রাপ্ত করার জন্য যাতে ব্যবহারকারীর ট্যাপ করা বস্তুটিই থাকে। আপনি এই ক্রপ করা ইমেজটিকে পরবর্তী কোডল্যাবে ইমেজ সার্চ ব্যাকএন্ডে পাঠাবেন যাতে দৃশ্যত একই রকম ফলাফল পাওয়া যায়। এই কোডল্যাবে, আপনি এখনও এই পদ্ধতিটি ব্যবহার করবেন না।
এমএল কিট সনাক্তকরণ ফলাফল দেখান
ইনপুট ইমেজের উপরে ML Kit অবজেক্ট ডিটেকশন ফলাফল দেখানোর জন্য ভিজ্যুয়ালাইজেশন ইউটিলিটি ব্যবহার করুন।
যেখানে আপনি debugPrint()
কল করেন সেখানে যান এবং এর নীচে নিম্নলিখিত কোড স্নিপেট যোগ করুন:
runOnUiThread {
viewBinding.ivPreview.drawDetectionResults(it)
}
চালান
এখন রান ক্লিক করুন ( ) অ্যান্ড্রয়েড স্টুডিও টুলবারে।
একবার অ্যাপ লোড হয়ে গেলে, ক্যামেরা আইকন সহ বোতাম টিপুন, আপনার ক্যামেরাকে একটি বস্তুর দিকে নির্দেশ করুন, একটি ছবি তুলুন, ফটো গ্রহণ করুন (ক্যামেরা অ্যাপে) অথবা আপনি সহজেই যেকোন প্রিসেট ছবি ট্যাপ করতে পারেন। আপনি সনাক্তকরণ ফলাফল দেখতে হবে; আবার বোতাম টিপুন বা কয়েকবার পুনরাবৃত্তি করতে অন্য একটি ছবি নির্বাচন করুন এবং সর্বশেষ ML Kit ODT-এর অভিজ্ঞতা নিন!
7. অভিনন্দন!
আপনি আপনার অ্যাপে অবজেক্ট ডিটেকশন ক্ষমতা যোগ করতে ML Kit ব্যবহার করেছেন:
- 3টি API সহ 3টি ধাপ৷
- ইনপুট ইমেজ তৈরি করুন
- ডিটেক্টর তৈরি করুন
- ডিটেক্টরে ছবি পাঠান
যে আপনি এটি পেতে এবং চলমান প্রয়োজন!
আমরা কভার করেছি কি
- আপনার অ্যান্ড্রয়েড অ্যাপে এমএল কিট অবজেক্ট ডিটেকশন এবং ট্র্যাকিং কীভাবে যুক্ত করবেন
- ইমেজে অবজেক্ট শনাক্ত করতে এমএল কিটে অন-ডিভাইস অবজেক্ট ডিটেকশন এবং ট্র্যাকিং কীভাবে ব্যবহার করবেন
পরবর্তী পদক্ষেপ
- একটি পণ্য অনুসন্ধান ব্যাকএন্ডে সনাক্ত করা বস্তুটি কিভাবে পাঠাতে হয় এবং অনুসন্ধানের ফলাফল দেখাতে হয় সে সম্পর্কে এই কোডল্যাবটি ব্যবহার করে দেখুন
- শনাক্তকরণ এবং শ্রেণিবিন্যাস নির্ভুলতা এবং কার্যকারিতা অনুভব করতে আরও চিত্র এবং লাইভ ভিডিও সহ ML Kit ODT এর সাথে আরও অন্বেষণ করুন
- একটি কাস্টম মডেলকে কীভাবে প্রশিক্ষণ দেওয়া যায় তা শিখতে অবজেক্ট ডিটেকশন লার্নিং পাথওয়ের সাথে এগিয়ে যান দেখুন
- অবজেক্ট ডিটেকশন লাইভ-ক্যামেরা এবং স্ট্যাটিক-ইমেজের জন্য মেটেরিয়াল ডিজাইনের সুপারিশ সম্পর্কে পড়ুন
- আপনার নিজের Android অ্যাপে ML Kit ODT প্রয়োগ করুন