ML Kit এবং CameraX: Android এর সাহায্যে ভাষা চিনুন, শনাক্ত করুন এবং পাঠ্য অনুবাদ করুন

১. ভূমিকা

এমএল কিট হলো একটি মোবাইল এসডিকে, যা গুগলের মেশিন লার্নিং দক্ষতাকে একটি শক্তিশালী অথচ সহজে ব্যবহারযোগ্য প্যাকেজের মাধ্যমে অ্যান্ড্রয়েড এবং অ্যান্ড্রয়েড অ্যাপে নিয়ে আসে। আপনি মেশিন লার্নিং-এ নতুন বা অভিজ্ঞ, যা-ই হোন না কেন, মাত্র কয়েকটি কোডের লাইনেই আপনার প্রয়োজনীয় কার্যকারিতা সহজেই প্রয়োগ করতে পারবেন। এটি শুরু করার জন্য নিউরাল নেটওয়ার্ক বা মডেল অপটিমাইজেশন সম্পর্কে গভীর জ্ঞানের কোনো প্রয়োজন নেই।

এটা কীভাবে কাজ করে?

এমএল কিট গুগলের এমএল প্রযুক্তি, যেমন মোবাইল ভিশন এবং টেনসরফ্লো লাইট -কে একটিমাত্র এসডিকে-তে একত্রিত করে আপনার অ্যাপে এমএল কৌশল প্রয়োগ করা সহজ করে তোলে। আপনার মোবাইল ভিশনের অন-ডিভাইস মডেলের রিয়েল-টাইম ক্ষমতার প্রয়োজন হোক, বা কাস্টম টেনসরফ্লো লাইট মডেলের নমনীয়তার প্রয়োজন হোক, এমএল কিট মাত্র কয়েকটি কোডের লাইনের মাধ্যমেই তা সম্ভব করে তোলে।

এই কোডল্যাবটি আপনাকে ধাপে ধাপে দেখাবে কীভাবে রিয়েল-টাইম ক্যামেরা ফিড থেকে আপনার বিদ্যমান অ্যান্ড্রয়েড অ্যাপে টেক্সট রিকগনিশন, ল্যাঙ্গুয়েজ আইডেন্টিফিকেশন এবং ট্রান্সলেশন যুক্ত করা যায়। এই কোডল্যাবটি এমএল কিট এপিআই (ML Kit APIs)-এর সাথে ক্যামেরাএক্স (CameraX) ব্যবহারের সেরা পদ্ধতিগুলোও তুলে ধরবে।

আপনি যা তৈরি করবেন

এই কোডল্যাবে, আপনি এমএল কিট (ML Kit) ব্যবহার করে একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করবেন। আপনার অ্যাপটি রিয়েল-টাইম ক্যামেরা ফিড থেকে টেক্সট শনাক্ত করার জন্য এমএল কিট টেক্সট রিকগনিশন অন-ডিভাইস এপিআই (ML Kit Text Recognition on-device API) ব্যবহার করবে। শনাক্ত করা টেক্সটের ভাষা চিহ্নিত করার জন্য এটি এমএল কিট ল্যাঙ্গুয়েজ আইডেন্টিফিকেশন এপিআই (ML Kit Language Identification API) ব্যবহার করবে। সবশেষে, আপনার অ্যাপটি এমএল কিট ট্রান্সলেশন এপিআই (ML Kit Translation API) ব্যবহার করে এই টেক্সটটিকে ৫৯টি বিকল্পের মধ্য থেকে আপনার পছন্দের যেকোনো একটি ভাষায় অনুবাদ করবে।

শেষে, আপনি নিচের ছবির মতো কিছু দেখতে পাবেন।

e2a9b80f1ff442d7.png

আপনি যা শিখবেন

  • যেকোনো অ্যান্ড্রয়েড অ্যাপে সহজে মেশিন লার্নিং সক্ষমতা যোগ করতে কীভাবে এমএল কিট এসডিকে ব্যবহার করবেন।
  • এমএল কিট টেক্সট রিকগনিশন, ল্যাঙ্গুয়েজ আইডেন্টিফিকেশন, ট্রান্সলেশন এপিআই এবং এদের কার্যকারিতা।
  • এমএল কিট এপিআই-এর সাথে ক্যামেরাএক্স লাইব্রেরি কীভাবে ব্যবহার করবেন।

আপনার যা যা লাগবে

  • অ্যান্ড্রয়েড স্টুডিওর একটি সাম্প্রতিক সংস্করণ (v4.0+)
  • একটি ভৌত ​​অ্যান্ড্রয়েড ডিভাইস
  • নমুনা কোড
  • কোটলিনে অ্যান্ড্রয়েড ডেভেলপমেন্টের প্রাথমিক জ্ঞান

এই কোডল্যাবটি এমএল কিট (ML Kit)-কে কেন্দ্র করে তৈরি। অপ্রাসঙ্গিক ধারণা এবং কোড ব্লকগুলো আপনার জন্য আগেই সরবরাহ ও বাস্তবায়ন করা হয়েছে।

২. প্রস্তুতি গ্রহণ

কোডটি ডাউনলোড করুন

এই কোডল্যাবের সমস্ত কোড ডাউনলোড করতে নিচের লিঙ্কে ক্লিক করুন:

ডাউনলোড করা জিপ ফাইলটি আনপ্যাক করুন। এটি একটি রুট ফোল্ডার ( mlkit-android ) আনপ্যাক করবে, যেখানে আপনার প্রয়োজনীয় সমস্ত রিসোর্স থাকবে। এই কোডল্যাবের জন্য, আপনার শুধুমাত্র translate সাবডিরেক্টরিতে থাকা রিসোর্সগুলো প্রয়োজন হবে।

mlkit-android রিপোজিটরির translate সাবডিরেক্টরিতে নিম্নলিখিত ডিরেক্টরিটি রয়েছে:

  • android_studio_folder.png স্টার্টার — এই কোডল্যাবে আপনি যে কোডের উপর ভিত্তি করে কাজ করবেন, এটি সেই প্রাথমিক কোড।

৩. প্রজেক্ট ইম্পোর্ট করুন এবং এমএল কিট (ML Kit) ও ক্যামেরাএক্স (CameraX) নির্ভরতাগুলো যাচাই করুন।

স্টার্টার প্রজেক্টটি অ্যান্ড্রয়েড স্টুডিওতে ইম্পোর্ট করুন। 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'

৪. স্টার্টার অ্যাপটি চালান।

এখন যেহেতু আপনি অ্যান্ড্রয়েড স্টুডিওতে প্রজেক্টটি ইম্পোর্ট করেছেন এবং এমএল কিট ডিপেন্ডেন্সিগুলো চেক করেছেন, আপনি প্রথমবারের মতো অ্যাপটি রান করার জন্য প্রস্তুত! রান -এ ক্লিক করুন। execute.png অ্যান্ড্রয়েড স্টুডিও টুলবারে।

অ্যাপটি আপনার ডিভাইসে চালু হবে এবং আপনি বিভিন্ন লেখার দিকে ক্যামেরা তাক করে লাইভ ফিড দেখতে পারবেন, কিন্তু লেখা শনাক্তকরণের কার্যকারিতাটি এখনও বাস্তবায়ন করা হয়নি।

bd1489441c334de3.png

৫. টেক্সট শনাক্তকরণ যোগ করুন

এই ধাপে, আমরা আপনার অ্যাপে ভিডিও ক্যামেরা থেকে টেক্সট শনাক্ত করার কার্যকারিতা যোগ করব।

এমএল কিট টেক্সট ডিটেক্টর ইনস্ট্যানশিয়েট করুন

TextAnalyzer.kt ফাইলের শীর্ষে থাকা TODO টি পরিবর্তন করে TextRecognition ইনস্ট্যানশিয়েট করুন। এভাবেই আপনি পরবর্তী ধাপগুলোতে ব্যবহারের জন্য টেক্সট রিকগনাইজারের একটি হ্যান্ডেল পাবেন। এছাড়াও, ডিটেক্টরটির আর প্রয়োজন না হলে সেটিকে সঠিকভাবে বন্ধ করার জন্য আমাদের এটিকে একটি লাইফসাইকেল অবজারভার হিসেবে যুক্ত করতে হবে।

টেক্সটঅ্যানালাইজার.কেটি

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

init {
   lifecycle.addObserver(detector)
}

ক্যামেরার বাফার দিয়ে তৈরি ইনপুট ইমেজে টেক্সট রিকগনিশন চালান।

CameraX লাইব্রেরিটি ক্যামেরা থেকে ইমেজ বিশ্লেষণের জন্য প্রস্তুত ছবির একটি ধারা সরবরাহ করে। প্রতিটি ইমেজ ফ্রেমে ML Kit টেক্সট রিকগনিশন ব্যবহার করতে TextAnalyzer ক্লাসের recognizeText() মেথডটি প্রতিস্থাপন করুন।

টেক্সটঅ্যানালাইজার.কেটি

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 কল করতে হবে, অন্যথায় লাইভ ক্যামেরা ফিড বিশ্লেষণের জন্য পরবর্তী ছবিগুলো প্রসেস করতে পারবে না।

টেক্সটঅ্যানালাইজার.কেটি

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

আপনার ডিভাইসে অ্যাপটি চালান

এখন রান-এ ক্লিক করুন ( execute.png অ্যান্ড্রয়েড স্টুডিও টুলবারে থাকা `</text>` অপশনটি নির্বাচন করুন। অ্যাপটি লোড হওয়ার পর, এটি রিয়েল-টাইমে ক্যামেরা থেকে টেক্সট শনাক্ত করা শুরু করবে। নিশ্চিত করার জন্য আপনার ক্যামেরাটি যেকোনো টেক্সটের উপর ধরুন। যদি আপনার অ্যাপ কোনো টেক্সট শনাক্ত না করে, তবে টেক্সটের দিকে ক্যামেরা তাক করার আগে একটি ফাঁকা জায়গায় ক্যামেরা তাক করে ডিটেকশনটি 'রিসেট' করার চেষ্টা করুন।

৬. ভাষা শনাক্তকরণ যোগ করুন

এমএল কিট ল্যাঙ্গুয়েজ আইডেন্টিফায়ার ইনস্ট্যানশিয়েট করুন

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
}

আপনার ডিভাইসে অ্যাপটি চালান

এখন রান-এ ক্লিক করুন ( execute.png অ্যান্ড্রয়েড স্টুডিও টুলবারে থাকা অপশনটিতে ক্লিক করুন। অ্যাপটি লোড হয়ে গেলে, এটি ক্যামেরা থেকে টেক্সট শনাক্ত করা এবং রিয়েল-টাইমে টেক্সটের ভাষা চিহ্নিত করা শুরু করবে। নিশ্চিত করার জন্য আপনার ক্যামেরাটি যেকোনো টেক্সটের উপর রাখুন।

৭. অনুবাদ যোগ করুন

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
   }
}

সিমুলেটরে অ্যাপটি চালান।

এখন রান-এ ক্লিক করুন ( execute.png অ্যান্ড্রয়েড স্টুডিও টুলবারে থাকা `</text>` অপশনটি নির্বাচন করুন। অ্যাপটি লোড হয়ে গেলে, এটি নীচের চলমান চিত্রটির মতো দেখাবে, যেখানে টেক্সট শনাক্তকরণ ও চিহ্নিত ভাষার ফলাফল এবং নির্বাচিত ভাষায় অনূদিত টেক্সট প্রদর্শিত হবে। আপনি ৫৯টি ভাষার যেকোনো একটি বেছে নিতে পারেন।

e2a9b80f1ff442d7.png

৮. অভিনন্দন!

অভিনন্দন, আপনি এইমাত্র এমএল কিট (ML Kit) ব্যবহার করে আপনার অ্যাপে ডিভাইস-ভিত্তিক টেক্সট শনাক্তকরণ, ভাষা সনাক্তকরণ এবং অনুবাদ যুক্ত করেছেন! এখন আপনি লাইভ ক্যামেরা ফিড থেকে টেক্সট ও তার ভাষা শনাক্ত করতে পারবেন এবং এই টেক্সটটিকে রিয়েল-টাইমে আপনার পছন্দের ভাষায় অনুবাদ করতে পারবেন।

আমরা যা আলোচনা করেছি

  • আপনার অ্যান্ড্রয়েড অ্যাপে কীভাবে এমএল কিট যুক্ত করবেন
  • ছবিতে থাকা টেক্সট শনাক্ত করতে এমএল কিট-এর অন-ডিভাইস টেক্সট রিকগনিশন কীভাবে ব্যবহার করবেন
  • টেক্সটের ভাষা শনাক্ত করতে এমএল কিট-এ অন-ডিভাইস ল্যাঙ্গুয়েজ আইডেন্টিফিকেশন কীভাবে ব্যবহার করবেন
  • এমএল কিট-এ অন-ডিভাইস ট্রান্সলেশন ব্যবহার করে কীভাবে ৫৯টি ভাষায় টেক্সট ডাইনামিকভাবে অনুবাদ করবেন
  • এমএল কিট এপিআই-এর সাথে ক্যামেরাএক্স কীভাবে ব্যবহার করবেন

পরবর্তী পদক্ষেপ

  • আপনার নিজের অ্যান্ড্রয়েড অ্যাপে এমএল কিট এবং ক্যামেরাএক্স ব্যবহার করুন!

আরও জানুন