ML किट और CameraX की मदद से, टेक्स्ट की पहचान करें, उसकी पहचान करें, और उसका अनुवाद करें: Android

1. परिचय

ML Kit एक मोबाइल SDK है. यह Google की मशीन लर्निंग की विशेषज्ञता को Android और Android ऐप्लिकेशन के लिए, इस्तेमाल में आसान और असरदार पैकेज में उपलब्ध कराता है. चाहे आपने अभी-अभी मशीन लर्निंग का इस्तेमाल शुरू किया हो या आपके पास इसका अनुभव हो, आपको जिस सुविधा की ज़रूरत है उसे कोड की कुछ ही लाइनों में आसानी से लागू किया जा सकता है. शुरू करने के लिए, न्यूरल नेटवर्क या मॉडल ऑप्टिमाइज़ेशन के बारे में ज़्यादा जानकारी होना ज़रूरी नहीं है.

यह सुविधा कैसे काम करती है?

ML Kit, Google की एमएल टेक्नोलॉजी को एक ही SDK में उपलब्ध कराता है. जैसे, Mobile Vision और TensorFlow Lite. इससे, आपके ऐप्लिकेशन में एमएल तकनीकें आसानी से लागू की जा सकती हैं. आपको Mobile Vision के डिवाइस पर मौजूद मॉडल की रीयल-टाइम सुविधाओं की ज़रूरत हो या कस्टम TensorFlow Lite मॉडल की सुविधा चाहिए हो, ML Kit की मदद से कुछ ही लाइनों के कोड में यह काम किया जा सकता है.

इस कोडलैब में, आपको अपने मौजूदा Android ऐप्लिकेशन में, रीयल-टाइम कैमरा फ़ीड से टेक्स्ट की पहचान करने, भाषा की पहचान करने, और अनुवाद करने की सुविधा जोड़ने के आसान चरणों के बारे में बताया जाएगा. इस कोडलैब में, ML Kit API के साथ CameraX का इस्तेमाल करने के सबसे सही तरीकों के बारे में भी बताया जाएगा.

आपको क्या बनाना है

इस कोडलैब में, आपको ML Kit की मदद से एक Android ऐप्लिकेशन बनाना है. आपका ऐप्लिकेशन, ML Kit के Text Recognition on-device API का इस्तेमाल करेगा. इससे, कैमरे से रीयल-टाइम में मिलने वाले फ़ीड से टेक्स्ट की पहचान की जा सकेगी. यह पहचाने गए टेक्स्ट की भाषा की पहचान करने के लिए, ML Kit Language Identification API का इस्तेमाल करेगा. आखिर में, आपका ऐप्लिकेशन इस टेक्स्ट का अनुवाद, एमएल किट के Translation API का इस्तेमाल करके 59 विकल्पों में से किसी भी चुनी गई भाषा में करेगा.

आखिर में, आपको नीचे दी गई इमेज जैसा कुछ दिखेगा.

e2a9b80f1ff442d7.png

आपको क्या सीखने को मिलेगा

  • किसी भी Android ऐप्लिकेशन में मशीन लर्निंग की सुविधाएं आसानी से जोड़ने के लिए, ML Kit SDK का इस्तेमाल कैसे करें.
  • ML Kit के टेक्स्ट पहचानने, भाषा की पहचान करने, और अनुवाद करने वाले एपीआई और उनकी क्षमताओं के बारे में जानकारी.
  • ML Kit API के साथ CameraX लाइब्रेरी का इस्तेमाल करने का तरीका.

आपको इन चीज़ों की ज़रूरत होगी

  • Android Studio का नया वर्शन (v4.0+)
  • फ़िज़िकल Android डिवाइस
  • सैंपल कोड
  • Kotlin में Android डेवलपमेंट की बुनियादी जानकारी

यह कोडलैब, ML Kit पर आधारित है. आपके लिए, काम के न होने वाले कॉन्सेप्ट और कोड ब्लॉक पहले से ही उपलब्ध कराए गए हैं और उन्हें लागू किया गया है.

2. सेट अप करना

कोड डाउनलोड करें

इस कोडलैब के लिए पूरा कोड डाउनलोड करने के लिए, यहां दिए गए लिंक पर क्लिक करें:

डाउनलोड की गई ज़िप फ़ाइल को अनपैक करें. इससे एक रूट फ़ोल्डर (mlkit-android) अनपैक हो जाएगा. इसमें आपको ज़रूरी सभी संसाधन मिल जाएंगे. इस कोडलैब के लिए, आपको सिर्फ़ translate सबडायरेक्ट्री में मौजूद संसाधनों की ज़रूरत होगी.

mlkit-android रिपॉज़िटरी में मौजूद translate सबडायरेक्ट्री में यह डायरेक्ट्री शामिल होती है:

  • android_studio_folder.pngस्टार्टर—यह शुरुआती कोड होता है, जिसे इस कोडलैब में इस्तेमाल करके आगे बढ़ाया जाता है.

3. प्रोजेक्ट इंपोर्ट करना और ML Kit और CameraX की डिपेंडेंसी की पुष्टि करना

स्टार्टर प्रोजेक्ट को Android Studio में इंपोर्ट करें. app/build.gradle फ़ाइल में, पुष्टि करें कि ML Kit और CameraX की ज़रूरी डिपेंडेंसी शामिल की गई हों:

// CameraX dependencies
def camerax_version = "1.0.0-beta05"
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
implementation "androidx.camera:camera-view:1.0.0-alpha12"

// ML Kit dependencies
implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
implementation 'com.google.mlkit:language-id:16.0.0'
implementation 'com.google.mlkit:translate:16.0.0'

4. स्टार्टर ऐप्लिकेशन चलाना

प्रोजेक्ट को Android Studio में इंपोर्ट करने और ML Kit की डिपेंडेंसी की जांच करने के बाद, अब ऐप्लिकेशन को पहली बार चलाने के लिए तैयार हैं! Android Studio टूलबार में, Run ( execute.png) पर क्लिक करें.

ऐप्लिकेशन आपके डिवाइस पर लॉन्च हो जाएगा. इसके बाद, कैमरे को अलग-अलग टेक्स्ट पर पॉइंट करके लाइव फ़ीड देखा जा सकता है. हालांकि, टेक्स्ट पहचानने की सुविधा अभी लागू नहीं की गई है.

bd1489441c334de3.png

5. टेक्स्ट की पहचान करने की सुविधा जोड़ना

इस चरण में, हम आपके ऐप्लिकेशन में वीडियो कैमरे से टेक्स्ट को पहचानने की सुविधा जोड़ेंगे.

ML Kit के टेक्स्ट डिटेक्टर को इंस्टैंशिएट करना

TextRecognition को इंस्टैंशिएट करने के लिए, TextAnalyzer.kt के सबसे ऊपर मौजूद TODO को बदलें. इस तरह, आपको टेक्स्ट पहचानने वाले टूल का हैंडल मिलता है, ताकि इसे बाद के चरणों में इस्तेमाल किया जा सके. हमें डिटेक्टर को लाइफ़साइकल ऑब्ज़र्वर के तौर पर भी जोड़ना होगा, ताकि जब डिटेक्टर की ज़रूरत न हो, तो उसे ठीक से बंद किया जा सके.

TextAnalyzer.kt

private val detector = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)

init {
   lifecycle.addObserver(detector)
}

कैमरे से बफ़र करके बनाई गई इनपुट इमेज पर, टेक्स्ट की पहचान करने की सुविधा इस्तेमाल करना

CameraX लाइब्रेरी, कैमरे से इमेज की एक स्ट्रीम उपलब्ध कराती है. इससे इमेज का विश्लेषण किया जा सकता है. हर इमेज फ़्रेम पर ML Kit की टेक्स्ट पहचानने की सुविधा का इस्तेमाल करने के लिए, TextAnalyzer क्लास में recognizeText() तरीके को बदलें.

TextAnalyzer.kt

private fun recognizeText(
   image: InputImage
): Task<Text> {
   // Pass image to an ML Kit Vision API
   return detector.process(image)
       .addOnSuccessListener { text ->
           // Task completed successfully
           result.value = text.text
       }
       .addOnFailureListener { exception ->
           // Task failed with an exception
           Log.e(TAG, "Text recognition error", exception)
           val message = getErrorMessage(exception)
           message?.let {
               Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
           }
       }
}

यहां दी गई लाइन में, टेक्स्ट पहचानने की प्रोसेस शुरू करने के लिए, ऊपर दिए गए तरीके को कॉल करने का तरीका दिखाया गया है. analyze() तरीके के आखिर में यह लाइन जोड़ें. ध्यान दें कि इमेज का विश्लेषण पूरा होने के बाद, आपको imageProxy.close को कॉल करना होगा. ऐसा न करने पर, लाइव कैमरे का फ़ीड विश्लेषण के लिए अन्य इमेज प्रोसेस नहीं कर पाएगा.

TextAnalyzer.kt

recognizeText(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
   imageProxy.close()
}

अपने डिवाइस पर ऐप्लिकेशन चलाना

अब Android Studio टूलबार में मौजूद, चलाएँ ( execute.png) पर क्लिक करें. ऐप्लिकेशन लोड होने के बाद, उसे कैमरे से रीयल-टाइम में टेक्स्ट की पहचान करनी चाहिए. पुष्टि करने के लिए, कैमरे को किसी टेक्स्ट पर फ़ोकस करें. अगर आपका ऐप्लिकेशन किसी टेक्स्ट की पहचान नहीं कर पा रहा है, तो कैमरे को टेक्स्ट पर ले जाने से पहले, उसे किसी खाली जगह पर ले जाकर पहचान करने की सुविधा को ‘रीसेट' करें.

6. भाषा की पहचान करने की सुविधा जोड़ना

ML Kit Language Identifier को इंस्टैंशिएट करना

MainViewModel.kt मुख्य फ़ोल्डर में मौजूद है. फ़ाइल पर जाएं और MainViewModel.kt में यह फ़ील्ड जोड़ें. इस तरह, आपको भाषा आइडेंटिफ़ायर का हैंडल मिलता है, जिसका इस्तेमाल अगले चरण में किया जा सकता है.

MainViewModel.kt

private val languageIdentifier = LanguageIdentification.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)

इसके अलावा, आपको यह भी पक्का करना होगा कि जब क्लाइंट की ज़रूरत न हो, तो उन्हें बंद कर दिया जाए. इसके लिए, onCleared() के ViewModel तरीके को बदलें.

MainViewModel.kt

override fun onCleared() {
   languageIdentifier.close()
   translators.evictAll()
}

पहचाने गए टेक्स्ट की भाषा का पता लगाने की सुविधा को डिवाइस पर चालू करना

इमेज में पहचाने गए टेक्स्ट की भाषा का पता लगाने के लिए, ML Kit Language Identifier का इस्तेमाल करें.

MainViewModel.kt में, sourceLang फ़ील्ड की परिभाषा में मौजूद TODO की जगह यह कोड डालें. यह स्निपेट, भाषा की पहचान करने वाले तरीके को कॉल करता है. साथ ही, अगर यह "und" नहीं है, तो नतीजे असाइन करता है. 'भाषा की पहचान नहीं की जा सकी' का मतलब है कि एपीआई, इस्तेमाल की जा सकने वाली भाषाओं की सूची के आधार पर भाषा की पहचान नहीं कर सका.

MainViewModel.kt

val sourceLang = Transformations.switchMap(sourceText) { text ->
   val result = MutableLiveData<Language>()
   languageIdentifier.identifyLanguage(text)
       .addOnSuccessListener { languageCode ->
           if (languageCode != "und")
               result.value = Language(languageCode)
       }
   result
}

अपने डिवाइस पर ऐप्लिकेशन चलाना

अब Android Studio टूलबार में मौजूद, चलाएँ ( execute.png) पर क्लिक करें. ऐप्लिकेशन लोड होने के बाद, उसे कैमरे से टेक्स्ट को पहचानना शुरू कर देना चाहिए. साथ ही, टेक्स्ट की भाषा की पहचान रीयल-टाइम में करनी चाहिए. पुष्टि करने के लिए, कैमरे को किसी टेक्स्ट पर फ़ोकस करें.

7. अनुवाद जोड़ें

MainViewModel.kt में मौजूद translate() फ़ंक्शन की जगह यह कोड डालें. यह फ़ंक्शन, सोर्स भाषा की वैल्यू, टारगेट भाषा की वैल्यू, और सोर्स टेक्स्ट लेता है. इसके बाद, अनुवाद करता है. ध्यान दें कि अगर चुनी गई टारगेट भाषा का मॉडल, डिवाइस पर अब तक डाउनलोड नहीं किया गया है, तो हम ऐसा करने के लिए downloadModelIfNeeded() को कॉल करते हैं. इसके बाद, अनुवाद की प्रोसेस शुरू की जाती है.

MainViewModel.kt

private fun translate(): Task<String> {
   val text = sourceText.value
   val source = sourceLang.value
   val target = targetLang.value
   if (modelDownloading.value != false || translating.value != false) {
       return Tasks.forCanceled()
   }
   if (source == null || target == null || text == null || text.isEmpty()) {
       return Tasks.forResult("")
   }
   val sourceLangCode = TranslateLanguage.fromLanguageTag(source.code)
   val targetLangCode = TranslateLanguage.fromLanguageTag(target.code)
   if (sourceLangCode == null || targetLangCode == null) {
       return Tasks.forCanceled()
   }
   val options = TranslatorOptions.Builder()
       .setSourceLanguage(sourceLangCode)
       .setTargetLanguage(targetLangCode)
       .build()
   val translator = translators[options]
   modelDownloading.setValue(true)

   // Register watchdog to unblock long running downloads
   Handler().postDelayed({ modelDownloading.setValue(false) }, 15000)
   modelDownloadTask = translator.downloadModelIfNeeded().addOnCompleteListener {
       modelDownloading.setValue(false)
   }
   translating.value = true
   return modelDownloadTask.onSuccessTask {
       translator.translate(text)
   }.addOnCompleteListener {
       translating.value = false
   }
}

सिम्युलेटर पर ऐप्लिकेशन चलाना

अब Android Studio टूलबार में मौजूद, चलाएँ ( execute.png) पर क्लिक करें. ऐप्लिकेशन लोड होने के बाद, अब यह नीचे दी गई चलती-फिरती इमेज की तरह दिखना चाहिए. इसमें टेक्स्ट पहचानने और पहचानी गई भाषा के नतीजे दिख रहे हैं. साथ ही, चुनी गई भाषा में अनुवाद किया गया टेक्स्ट दिख रहा है. आपके पास 59 भाषाओं में से कोई भी भाषा चुनने का विकल्प होता है.

e2a9b80f1ff442d7.png

8. बधाई हो!

बधाई हो! आपने ML Kit का इस्तेमाल करके, अपने ऐप्लिकेशन में डिवाइस पर टेक्स्ट पहचानने, भाषा की पहचान करने, और अनुवाद करने की सुविधा जोड़ ली है! अब लाइव कैमरा फ़ीड से टेक्स्ट और उसकी भाषा को पहचाना जा सकता है. साथ ही, इस टेक्स्ट का रीयल-टाइम में अपनी पसंद की भाषा में अनुवाद किया जा सकता है.

हमने क्या-क्या बताया

  • अपने Android ऐप्लिकेशन में ML Kit जोड़ने का तरीका
  • इमेज में मौजूद टेक्स्ट की पहचान करने के लिए, ML Kit में डिवाइस पर टेक्स्ट की पहचान करने की सुविधा का इस्तेमाल कैसे करें
  • टेक्स्ट की भाषा की पहचान करने के लिए, ML Kit में उपयोगकर्ता के डिवाइस पर मौजूद भाषा की पहचान करने की सुविधा का इस्तेमाल कैसे करें
  • ML Kit में डिवाइस पर अनुवाद करने की सुविधा का इस्तेमाल करके, टेक्स्ट को 59 भाषाओं में डाइनैमिक तरीके से अनुवाद करने का तरीका
  • ML Kit API के साथ CameraX का इस्तेमाल कैसे करें

अगले चरण

  • अपने Android ऐप्लिकेशन में ML Kit और CameraX का इस्तेमाल करें!

ज़्यादा जानें