1. शुरू करने से पहले
ML Kit एक मोबाइल SDK है. यह Google की ऑन-डिवाइस मशीन लर्निंग की विशेषज्ञता को Android और iOS ऐप्लिकेशन में शामिल करता है. अपने ऐप्लिकेशन में आने वाली सामान्य समस्याओं को हल करने या उपयोगकर्ताओं के लिए बिलकुल नया अनुभव बनाने के लिए, विज़न और नैचुरल लैंग्वेज एपीआई का इस्तेमाल किया जा सकता है. ये एपीआई, इस्तेमाल करने में आसान होने के साथ-साथ बहुत काम के होते हैं. ये सभी, Google के बेहतरीन एमएल मॉडल पर काम करते हैं. साथ ही, इन्हें बिना किसी शुल्क के इस्तेमाल किया जा सकता है.
ML Kit के सभी एपीआई, डिवाइस पर काम करते हैं. इससे, रीयल-टाइम में इस्तेमाल के ऐसे उदाहरणों को लागू किया जा सकता है जहां आपको लाइव कैमरा स्ट्रीम को प्रोसेस करना हो. इसका यह भी मतलब है कि यह सुविधा ऑफ़लाइन भी उपलब्ध है.
इस कोडलैब में, आपको किसी इमेज के लिए ऑब्जेक्ट डिटेक्शन और ट्रैकिंग (ओडीटी) की सुविधा को अपने मौजूदा Android ऐप्लिकेशन में जोड़ने का तरीका बताया जाएगा. कृपया ध्यान दें कि इस कोडलैब में, एमएल किट ओडीटी के इस्तेमाल को हाइलाइट करने के लिए कुछ शॉर्टकट का इस्तेमाल किया गया है.
आपको क्या बनाने को मिलेगा
इस कोडलैब में, आपको ML Kit की मदद से एक Android ऐप्लिकेशन बनाना है. आपका ऐप्लिकेशन, दी गई इमेज में मौजूद ऑब्जेक्ट का पता लगाने के लिए, ML Kit Object Detection and Tracking API का इस्तेमाल करेगा.आखिर में, आपको दाईं ओर मौजूद इमेज जैसा कुछ दिखेगा. |
|
आपको क्या सीखने को मिलेगा
- अपने Android ऐप्लिकेशन में ML Kit SDK को इंटिग्रेट करने का तरीका
- ML Kit का ऑब्जेक्ट का पता लगाने और उसे ट्रैक करने वाला एपीआई
आपको इन चीज़ों की ज़रूरत होगी
- Android Studio का नया वर्शन (v4.1.2+)
- Android Studio Emulator या Android डिवाइस
- सैंपल कोड
- Kotlin में Android डेवलपमेंट की बुनियादी जानकारी
यह कोडलैब, ML Kit पर आधारित है. काम के न होने वाले कॉन्सेप्ट और कोड ब्लॉक को हटा दिया जाता है. साथ ही, आपको सिर्फ़ कॉपी और पेस्ट करने के लिए कॉन्सेप्ट और कोड ब्लॉक दिए जाते हैं.
2. सेट अप करें
कोड डाउनलोड करें
इस कोडलैब के लिए पूरा कोड डाउनलोड करने के लिए, यहां दिए गए लिंक पर क्लिक करें:
डाउनलोड की गई ज़िप फ़ाइल को अनपैक करें. इससे एक रूट फ़ोल्डर (mlkit-android-main) अनपैक हो जाएगा. इसमें आपको ज़रूरी सभी संसाधन मिल जाएंगे. इस कोडलैब के लिए, आपको सिर्फ़ object-detection सबडायरेक्ट्री में मौजूद सोर्स की ज़रूरत होगी.
mlkit-android रिपॉज़िटरी में मौजूद object-detection सबडायरेक्ट्री में दो डायरेक्ट्री होती हैं:
स्टार्टर—यह कोडलैब के लिए शुरुआती कोड है.
final—यह फ़ोल्डर, सैंपल ऐप्लिकेशन के पूरे कोड के लिए है.
3. प्रोजेक्ट में ML Kit का ऑब्जेक्ट डिटेक्शन और ट्रैकिंग एपीआई जोड़ना
ऐप्लिकेशन को Android Studio में इंपोर्ट करना
चलिए, Android Studio में स्टार्टर ऐप्लिकेशन इंपोर्ट करके शुरू करते हैं.
Android Studio खोलें. इसके बाद, Import Project (Gradle, Eclipse ADT, etc.) को चुनें. अब सोर्स कोड से starter फ़ोल्डर चुनें. यह वही सोर्स कोड होना चाहिए जिसे आपने पहले डाउनलोड किया था.

ML Kit ऑब्जेक्ट डिटेक्शन और ट्रैकिंग के लिए डिपेंडेंसी जोड़ना
ML Kit की डिपेंडेंसी की मदद से, अपने ऐप्लिकेशन में ML Kit ODT SDK को इंटिग्रेट किया जा सकता है. अपने प्रोजेक्ट की app/build.gradle फ़ाइल के आखिर में ये लाइनें जोड़ें:
build.gradle
dependencies {
// ...
implementation 'com.google.mlkit:object-detection:16.2.4'
}
अपने प्रोजेक्ट को Gradle फ़ाइलों के साथ सिंक करना
यह पक्का करने के लिए कि आपके ऐप्लिकेशन के लिए सभी डिपेंडेंसी उपलब्ध हैं, आपको इस समय अपने प्रोजेक्ट को ग्रेडल फ़ाइलों के साथ सिंक करना चाहिए.
Android Studio के टूलबार में जाकर, सिंक प्रोजेक्ट विद Gradle फ़ाइलें (
) चुनें.
(अगर यह बटन बंद है, तो पक्का करें कि आपने सिर्फ़ starter/app/build.gradle इंपोर्ट किया हो, न कि पूरी रिपॉज़िटरी.)
4. स्टार्टर ऐप्लिकेशन चलाना
आपने प्रोजेक्ट को Android Studio में इंपोर्ट कर लिया है. साथ ही, ML Kit के ऑब्जेक्ट डिटेक्शन और ट्रैकिंग के लिए डिपेंडेंसी जोड़ ली हैं. अब ऐप्लिकेशन को पहली बार चलाने के लिए तैयार हैं.
अपने Android डिवाइस को यूएसबी के ज़रिए होस्ट से कनेक्ट करें या Android Studio Emulator शुरू करें. इसके बाद, Android Studio टूलबार में Run (
) पर क्लिक करें.
ऐप्लिकेशन को चलाना और एक्सप्लोर करना
ऐप्लिकेशन आपके Android डिवाइस पर लॉन्च होना चाहिए. इसमें कुछ बॉयलरप्लेट कोड है. इससे आपको फ़ोटो कैप्चर करने या पहले से सेट की गई इमेज चुनने की सुविधा मिलती है. साथ ही, इसे ऑब्जेक्ट का पता लगाने और उसे ट्रैक करने वाली पाइपलाइन में फ़ीड करने की सुविधा मिलती है. इस पाइपलाइन को आपको इस कोडलैब में बनाना होगा. कोड लिखने से पहले, आइए ऐप्लिकेशन के बारे में थोड़ी जानकारी ले लें.
सबसे पहले, नीचे की ओर बटन (
) दिया गया है. इसका इस्तेमाल इन कामों के लिए किया जा सकता है:
- अपने डिवाइस/एम्युलेटर में इंटिग्रेट किया गया कैमरा ऐप्लिकेशन खोलें
- कैमरा ऐप्लिकेशन में जाकर फ़ोटो खींचें
- स्टार्टर ऐप्लिकेशन में कैप्चर की गई इमेज मिलती है
- इमेज दिखाओ
फ़ोटो लें बटन आज़माएं. फ़ोटो लेने के लिए दिए गए निर्देशों का पालन करें. इसके बाद, फ़ोटो को स्वीकार करें और देखें कि वह स्टार्टर ऐप्लिकेशन में दिख रही है या नहीं.
यह सुविधा कैसे काम करती है, यह देखने के लिए कुछ बार दोहराएं:

दूसरा, यहां तीन इमेज पहले से सेट हैं. इनमें से कोई भी इमेज चुनी जा सकती है. अगर Android एम्युलेटर का इस्तेमाल किया जा रहा है, तो ऑब्जेक्ट का पता लगाने वाले कोड की जांच करने के लिए, इन इमेज का इस्तेमाल बाद में किया जा सकता है.
तीन प्रीसेट इमेज में से कोई इमेज चुनें. देखें कि इमेज, बड़े व्यू में दिख रही हो:

5. डिवाइस पर ऑब्जेक्ट का पता लगाने की सुविधा जोड़ना
इस चरण में, आपको स्टार्टर ऐप्लिकेशन में ऐसी सुविधा जोड़नी होगी जिससे इमेज में मौजूद ऑब्जेक्ट का पता लगाया जा सके. आपने पिछले चरण में देखा कि स्टार्टर ऐप्लिकेशन में, डिवाइस पर कैमरा ऐप्लिकेशन से फ़ोटो लेने के लिए बॉयलरप्लेट कोड होता है. ऐप्लिकेशन में तीन प्रीसेट इमेज भी हैं. अगर Android एम्युलेटर पर कोडलैब चलाया जा रहा है, तो इन इमेज पर ऑब्जेक्ट डिटेक्शन की सुविधा आज़माई जा सकती है.
जब आपने कोई इमेज चुनी हो, तो प्रीसेट की गई इमेज में से या कैमरा ऐप्लिकेशन से फ़ोटो लेने पर, बॉयलरप्लेट कोड उस इमेज को Bitmap इंस्टेंस में डिकोड करता है. इसके बाद, उसे स्क्रीन पर दिखाता है और इमेज के साथ runObjectDetection तरीके को कॉल करता है.
इस चरण में, ऑब्जेक्ट का पता लगाने के लिए, runObjectDetection तरीके में कोड जोड़ा जाएगा!
किसी इमेज पर, डिवाइस पर मौजूद ऑब्जेक्ट का पता लगाने की सुविधा सेट अप करना और उसे चालू करना
ML Kit ODT को सेट अप करने के लिए, सिर्फ़ तीन आसान चरण और तीन एपीआई हैं:
- इमेज तैयार करें:
InputImage - डिटेक्टर ऑब्जेक्ट बनाएं:
ObjectDetection.getClient(options) - ऊपर दिए गए दो ऑब्जेक्ट को कनेक्ट करें:
process(image)
ये काम, फ़ाइल MainActivity.kt में मौजूद runObjectDetection(bitmap: Bitmap) फ़ंक्शन के अंदर किए जाते हैं.
/**
* ML Kit Object Detection Function
*/
private fun runObjectDetection(bitmap: Bitmap) {
}
फ़िलहाल, फ़ंक्शन खाली है. ML Kit ODT को लागू करने के लिए, यहां दिया गया तरीका अपनाएं! इस दौरान, Android Studio आपसे ज़रूरी इंपोर्ट जोड़ने के लिए कहेगा:
com.google.mlkit.vision.common.InputImagecom.google.mlkit.vision.objects.ObjectDetectioncom.google.mlkit.vision.objects.defaults.ObjectDetectorOptions
पहला चरण: InputImage बनाना
ML Kit, Bitmap से InputImage बनाने के लिए एक आसान एपीआई उपलब्ध कराता है. इसके बाद, InputImage को ML Kit API में फ़ीड किया जा सकता है.
// Step 1: create ML Kit's InputImage object
val image = InputImage.fromBitmap(bitmap, 0)
ऊपर दिए गए कोड को runObjectDetection(bitmap:Bitmap) में सबसे ऊपर जोड़ें.
दूसरा चरण: डिटेक्टर इंस्टेंस बनाना
ML Kit, बिल्डर डिज़ाइन पैटर्न का पालन करता है. आपको कॉन्फ़िगरेशन को बिल्डर को पास करना होगा. इसके बाद, उससे डिटेक्टर हासिल करना होगा. कॉन्फ़िगर करने के लिए तीन विकल्प हैं (इस कोडलैब में, बोल्ड किए गए विकल्पों का इस्तेमाल किया गया है):
- डिटेक्टर मोड (एक इमेज या स्ट्रीम)
- पहचान करने का मोड (सिंगल या एक से ज़्यादा ऑब्जेक्ट की पहचान करना)
- क्लासिफ़िकेशन मोड (चालू है या बंद है)
यह कोडलैब, एक इमेज में मौजूद कई ऑब्जेक्ट का पता लगाने और उन्हें कैटगरी में बांटने के लिए है. इसे अभी जोड़ें:
// Step 2: acquire detector object
val options = ObjectDetectorOptions.Builder()
.setDetectorMode(ObjectDetectorOptions.SINGLE_IMAGE_MODE)
.enableMultipleObjects()
.enableClassification()
.build()
val objectDetector = ObjectDetection.getClient(options)
तीसरा चरण: इमेज को डिटेक्टर में डालना
ऑब्जेक्ट का पता लगाने और उसे कैटगरी में बांटने की प्रोसेस एसिंक होती है:
- डिटेक्टर को
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( 0.0 से 1.0 के बीच का फ़्लोट. 1.0 का मतलब 100% है)
आपने शायद यह देखा होगा कि कोड, debugPrint() के साथ मिले नतीजे के लिए printf जैसी प्रोसेसिंग करता है.
इसे 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}")
}
}
}
अब आपके पास, इमेज का पता लगाने की सुविधा के लिए इमेज स्वीकार करने का विकल्प है!
Android Studio टूलबार में, चलाएं (
) पर क्लिक करके, कोडलैब को चलाएं. कोई प्रीसेट इमेज चुनें या फ़ोटो लें. इसके बाद, IDE में logcat विंडो(
) देखें.
आपको कुछ ऐसा दिखेगा:
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: Food
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
...इसका मतलब है कि डिटेक्टर ने तीन ऑब्जेक्ट देखे:
- ये कैटगरी खाना और घर के सामान हैं.
- दूसरी क्लास के लिए कोई कैटगरी नहीं दिखाई गई है, क्योंकि यह एक अनजान क्लास है.
- कोई
trackingIdनहीं (क्योंकि यह एक इमेज का पता लगाने वाला मोड है). boundingBoxआयत के अंदर की पोज़िशन (उदाहरण के लिए, (481, 2021) – (2426, 3376))- डिटेक्टर को पूरा भरोसा है कि पहली इमेज में खाना है (90% कॉन्फ़िडेंस—यह सलाद था).
तकनीकी तौर पर, ML Kit की ऑब्जेक्ट डिटेक्शन सुविधा को काम करने के लिए, आपको बस इतना ही करना है: आपने यह सब कर लिया है! बधाई हो!
यूआई के मामले में, आप अब भी उसी स्टेज पर हैं जहां आपने शुरू किया था. हालांकि, यूआई पर पता लगाए गए नतीजों का इस्तेमाल किया जा सकता है. जैसे, बेहतर अनुभव देने के लिए बाउंडिंग बॉक्स बनाना: चलिए, अगले चरण पर चलते हैं – पता लगाए गए नतीजों को प्रोसेस करना!
6. डिटेक्शन के नतीजों को प्रोसेस करना
पिछले चरणों में, आपने पता लगाए गए नतीजे को logcat में प्रिंट किया है. यह आसान और तेज़ है.
इस सेक्शन में, आपको इमेज में मौजूद नतीजे का इस्तेमाल करना होगा:
- इमेज पर बाउंडिंग बॉक्स बनाना
- बाउंडिंग बॉक्स के अंदर, कैटगरी का नाम और कॉन्फ़िडेंस ड्रा करें
विज़ुअलाइज़ेशन यूटिलिटी के बारे में जानकारी
कोड लैब में कुछ बॉयलरप्लेट कोड मौजूद है. इससे आपको ऑब्जेक्ट का पता लगाने के नतीजे को विज़ुअलाइज़ करने में मदद मिलेगी. विज़ुअलाइज़ेशन कोड को आसान बनाने के लिए, इन यूटिलिटी का इस्तेमाल करें:
data class BoxWithText(val box: Rect, val text: String)यह एक डेटा क्लास है. इसका इस्तेमाल, विज़ुअलाइज़ेशन के लिए ऑब्जेक्ट का पता लगाने के नतीजे को सेव करने के लिए किया जाता है.boxवह बाउंडिंग बॉक्स है जिसमें ऑब्जेक्ट मौजूद होता है. वहीं,textवह स्ट्रिंग है जिसमें ऑब्जेक्ट का पता लगाने से जुड़ा नतीजा होता है. इसे ऑब्जेक्ट के बाउंडिंग बॉक्स के साथ दिखाया जाता है.fun drawDetectionResult(bitmap: Bitmap, detectionResults: List<BoxWithText>): Bitmapयह तरीका, इनपुटbitmapपरdetectionResultsमें ऑब्जेक्ट का पता लगाने के नतीजे दिखाता है. साथ ही, इसकी बदली गई कॉपी दिखाता है.
यहां drawDetectionResult यूटिलिटी तरीके के आउटपुट का एक उदाहरण दिया गया है:

ML Kit के डिटेक्शन के नतीजे को विज़ुअलाइज़ करना
विज़ुअलाइज़ेशन यूटिलिटी का इस्तेमाल करके, इनपुट इमेज के ऊपर एमएल किट के ऑब्जेक्ट डिटेक्शन का नतीजा ड्रॉ करें.
उस जगह पर जाएं जहां debugPrint() को कॉल किया जाता है और इसके नीचे यह कोड स्निपेट जोड़ें:
// Parse ML Kit's DetectedObject and create corresponding visualization data
val detectedObjects = it.map { obj ->
var text = "Unknown"
// We will show the top confident detection result if it exist
if (obj.labels.isNotEmpty()) {
val firstLabel = obj.labels.first()
text = "${firstLabel.text}, ${firstLabel.confidence.times(100).toInt()}%"
}
BoxWithText(obj.boundingBox, text)
}
// Draw the detection result on the input bitmap
val visualizedResult = drawDetectionResult(bitmap, detectedObjects)
// Show the detection result on the app screen
runOnUiThread {
inputImageView.setImageBitmap(visualizedResult)
}
- इसके लिए, आपको ML Kit के
DetectedObjectको पार्स करना होगा. साथ ही, विज़ुअलाइज़ेशन का नतीजा दिखाने के लिए,BoxWithTextऑब्जेक्ट की एक सूची बनानी होगी. - इसके बाद,
drawDetectionResultयूटिलिटी मेथड का इस्तेमाल करके, इनपुट इमेज के ऊपर डिटेक्शन का नतीजा ड्रा करें और उसे स्क्रीन पर दिखाएं.
इसे चलाएं
अब Android Studio टूलबार में मौजूद, चलाएँ (
) पर क्लिक करें.
ऐप्लिकेशन लोड होने के बाद, कैमरे के आइकॉन वाले बटन को दबाएं. इसके बाद, कैमरे को किसी ऑब्जेक्ट पर पॉइंट करें, उसकी फ़ोटो लें, और Camera ऐप्लिकेशन में जाकर फ़ोटो को स्वीकार करें. इसके अलावा, पहले से सेट की गई किसी भी इमेज पर आसानी से टैप किया जा सकता है. आपको ऑब्जेक्ट का पता चलने के नतीजे दिखेंगे. एमएल किट ओडीटी की नई सुविधा का अनुभव करने के लिए, बटन को फिर से दबाएं या कोई दूसरी इमेज चुनें. ऐसा कुछ बार करें!

7. बधाई हो!
आपने अपने ऐप्लिकेशन में ऑब्जेक्ट डिटेक्शन की सुविधाएं जोड़ने के लिए, ML Kit का इस्तेमाल किया है:
- तीन एपीआई के साथ तीन चरण
- इनपुट इमेज बनाना
- डिटेक्टर बनाना
- डिटेक्टर को इमेज भेजें
बस इतना ही करना है!
आगे बढ़ने पर, आपको मॉडल को बेहतर बनाने की ज़रूरत पड़ सकती है: जैसा कि आप देख सकते हैं कि डिफ़ॉल्ट मॉडल सिर्फ़ पांच कैटगरी की पहचान कर सकता है. मॉडल को चाकू, कांटा, और बोतल के बारे में भी पता नहीं है. कस्टम मॉडल को ट्रेन करने का तरीका जानने के लिए, डिवाइस पर मशीन लर्निंग - ऑब्जेक्ट डिटेक्शन के लर्निंग पाथवे में मौजूद अन्य कोडलैब देखें.
हमने क्या-क्या बताया
- अपने Android ऐप्लिकेशन में ML Kit की ऑब्जेक्ट डिटेक्शन और ट्रैकिंग सुविधा कैसे जोड़ें
- इमेज में मौजूद ऑब्जेक्ट का पता लगाने के लिए, ML Kit में डिवाइस पर ऑब्जेक्ट का पता लगाने और उसे ट्रैक करने की सुविधा का इस्तेमाल कैसे करें
अगले चरण
- ज़्यादा इमेज और लाइव वीडियो के साथ ML Kit ODT की मदद से, ऑब्जेक्ट का पता लगाने और उन्हें कैटगरी में बांटने की सुविधा को एक्सप्लोर करें. इससे आपको यह पता चलेगा कि यह सुविधा कितनी सटीक है और इसकी परफ़ॉर्मेंस कैसी है
- कस्टम मॉडल को ट्रेन करने का तरीका जानने के लिए, डिवाइस पर मशीन लर्निंग - ऑब्जेक्ट का पता लगाने से जुड़ा लर्निंग पाथ देखें
- अपने Android ऐप्लिकेशन में ML Kit ODT का इस्तेमाल करना