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

1. परिचय

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

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

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

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

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

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

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

e2a9b80f1ff442d7.png

आपको इनके बारे में जानकारी मिलेगी

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

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

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

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

2. सेट अप किया जा रहा है

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

इस कोडलैब के लिए सभी कोड डाउनलोड करने के लिए, नीचे दिए गए लिंक पर क्लिक करें:

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

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

  • android_studio_फ़ोल्डर.pngस्टार्टर—शुरुआती कोड जिसे आपने इस कोडलैब में बनाया है.

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

Android Studio में स्टार्टर प्रोजेक्ट इंपोर्ट करें. app/build.gradle फ़ाइल में, पुष्टि करें कि ज़रूरी ML किट और 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 में प्रोजेक्ट इंपोर्ट कर लिया है और एमएल किट डिपेंडेंसी के लिए जांच कर ली है, तो अब आप ऐप्लिकेशन को पहली बार चलाने के लिए तैयार हैं! Android Studio के टूलबार में, Run ( एक्ज़ीक्यूट करें) पर क्लिक करें.

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

bd1489441c334de3.png

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

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

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

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

TextAnalyzer.kt

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

init {
   lifecycle.addObserver(detector)
}

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

CameraX लाइब्रेरी, कैमरे से इमेज के विश्लेषण के लिए तैयार इमेज की एक स्ट्रीम उपलब्ध कराती है. हर इमेज फ़्रेम पर एमएल किट टेक्स्ट की पहचान करने की सुविधा का इस्तेमाल करने के लिए, TextAnalyticsr क्लास में 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 के टूलबार में, Run ( एक्ज़ीक्यूट करें) पर क्लिक करें. ऐप्लिकेशन लोड होने के बाद, यह रीयल टाइम में कैमरे से टेक्स्ट की पहचान करना शुरू कर देगा. पुष्टि करने के लिए, कैमरे को किसी टेक्स्ट के सामने ले जाएं. अगर आपका ऐप्लिकेशन किसी टेक्स्ट की पहचान नहीं कर रहा है, तो 'रीसेट करके' देखें खाली जगह की तरफ़ कैमरे को पॉइंट करें और फिर कैमरे को टेक्स्ट की ओर पॉइंट करें.

6. भाषा की पहचान जोड़ें

एमएल किट लैंग्वेज आइडेंटिफ़ायर को इंस्टैंशिएट करें

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

MainViewModel.kt

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

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

MainViewModel.kt

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

पहचान किए गए टेक्स्ट पर, उपयोगकर्ता के डिवाइस पर मौजूद भाषा की पहचान करने की सुविधा का इस्तेमाल करना

इमेज में मौजूद टेक्स्ट की भाषा जानने के लिए, एमएल किट लैंग्वेज आइडेंटिफ़ायर का इस्तेमाल करें.

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 के टूलबार में, Run ( एक्ज़ीक्यूट करें) पर क्लिक करें. ऐप्लिकेशन लोड होने के बाद, यह कैमरे से टेक्स्ट की पहचान करना और रीयल टाइम में टेक्स्ट की भाषा की पहचान करना शुरू कर देगा. पुष्टि करने के लिए, कैमरे को किसी टेक्स्ट के सामने ले जाएं.

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 के टूलबार में, Run ( एक्ज़ीक्यूट करें) पर क्लिक करें. ऐप्लिकेशन लोड हो जाने के बाद, यह नीचे दी गई मूविंग इमेज की तरह दिखना चाहिए, जिसमें टेक्स्ट की पहचान, चुनी गई भाषा में कॉन्टेंट के नतीजे, और चुनी गई भाषा में अनुवाद किया गया टेक्स्ट दिखेगा. इन 59 भाषाओं में से कोई भी भाषा चुनी जा सकती है.

e2a9b80f1ff442d7.png

8. बधाई हो!

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

इसमें हमने इन विषयों के बारे में बताया

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

अगले चरण

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

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