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

ML Kit और CameraX की मदद से, टेक्स्ट की पहचान करना, भाषा की पहचान करना, और टेक्स्ट का अनुवाद करना:
Android

इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी

subjectपिछली बार नव॰ 4, 2021 को अपडेट किया गया
account_circlecarenc ने लिखा

1. परिचय

ML Kit एक मोबाइल SDK टूल है. यह 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 Translation API का इस्तेमाल करके, इस टेक्स्ट का अनुवाद 59 विकल्पों में से किसी भी चुनी गई भाषा में कर देगा.

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

e2a9b80f1ff442d7.png

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

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

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

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

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

2. सेट अप करना

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

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

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

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

  • android_studio_folder.pngstarter—शुरुआती कोड जिसे आपने इस कोडलैब में बनाया है.

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. टेक्स्ट की पहचान करने की सुविधा जोड़ना

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

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

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

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

ML Kit के भाषा आइडेंटिफ़ायर को इंस्टैंशिएट करना

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 टूलबार में, चालू करें ( 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 के एपीआई के साथ CameraX का इस्तेमाल करने का तरीका

अगले चरण

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

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