আপনি SpeechRecognizer (SpeechRecognizer) ব্যবহার করে অটোমেটিক স্পিচ রিকগনিশন (ASR)-এর মাধ্যমে আপনার ব্যবহারকারীর নির্দিষ্ট উক্তি শনাক্ত করতে এবং সেগুলোকে টেক্সটে রূপান্তর করতে পারেন। SpeechRecognizer অ্যান্ড্রয়েডের সাথে বিল্ট-ইন থাকে (এর জন্য কোনো অতিরিক্ত লাইব্রেরির প্রয়োজন হয় না) এবং এটি অফলাইনেও কাজ করে।
SpeechRecognizer আপনার ব্যবহারকারীর কথাকে টেক্সটে রূপান্তর করার জন্য, ব্যবহারকারীকে আপনার অ্যাপকে RECORD_AUDIO পারমিশনটি দিতে হবে। আপনার অ্যাপের জন্য এই পারমিশনটি কীভাবে অনুরোধ করতে হয় তা জানতে, “হার্ডওয়্যার পারমিশন অনুরোধ করুন” দেখুন।
স্পিচরিকগনাইজার ইনস্ট্যানশিয়েট করুন
আপনার প্রজেক্টেড অ্যাক্টিভিটির onCreate মেথডে SpeechRecognizer টি ইনস্ট্যানশিয়েট করুন, যাতে এটি অ্যাক্টিভিটিটির পুরো জীবনকাল ধরে উপলব্ধ থাকে:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//The RECORD_AUDIO permission must be granted to your app before instantiation
speechRecognizer = SpeechRecognizer.createOnDeviceSpeechRecognizer(this)
speechRecognizer?.setRecognitionListener(recognitionListener)
...
}
আপনার রিকগনিশনলিসেনার কনফিগার করুন
setRecognitionListener মেথডটি আপনাকে সেই অবজেক্টটি নির্দিষ্ট করার সুযোগ দেয় যেখানে গুরুত্বপূর্ণ কলব্যাকগুলো করা হয়, যেমন RecognitionListener.onResults এর ক্ষেত্রে, যেটি সিস্টেম কথিত ভাষা শনাক্ত করার পর কল করে।
val recognitionListener = object : RecognitionListener {
override fun onResults(results: Bundle?) {
val matches = results?.getStringArrayList(RESULTS_RECOGNITION)
val confidences = results?.getFloatArray(CONFIDENCE_SCORES)
val mostConfidentIndex = confidences!!.indices.maxByOrNull { confidences[it] }
if (mostConfidentIndex != null){
val spokenText = matches[mostConfidentIndex]
if (spokenText.equals("Start my Run", ignoreCase = true)){
// User indicated they want to start a run
}
}
}
...
}
কোড সম্পর্কে মূল বিষয়গুলো
বান্ডেলটি থেকে দুটি অ্যারে কোয়েরি করা হয়। প্রথম অ্যারেটিতে সমস্ত ম্যাচ অন্তর্ভুক্ত থাকে এবং দ্বিতীয়টি হলো শোনা কথাটির উপর স্পিচ রিকগনাইজারের আস্থার মান। এই অ্যারেগুলোর ইন্ডেক্সগুলো একে অপরের সাথে সঙ্গতিপূর্ণ। সর্বোচ্চ আস্থার মান (
mostConfidentIndex) যুক্ত ম্যাচটি ব্যবহার করা হয়।ব্যবহারকারী কী পদক্ষেপ নিতে চান তা নির্ধারণ করার জন্য কেস-ইনসেনসিটিভ স্ট্রিং ম্যাচ করা হয়।
মেলানোর সময় বিকল্প পদ্ধতি
পূর্ববর্তী উদাহরণে, সর্বোচ্চ কনফিডেন্স ভ্যালুযুক্ত ম্যাচটি ব্যবহার করা হয়েছে। এই পছন্দের অর্থ হলো, ব্যবহারকারীর কাছ থেকে যা বোঝা গেছে সে বিষয়ে সিস্টেমকে যথেষ্ট আত্মবিশ্বাসী হতে হবে, নইলে এটি কোনো ম্যাচ চিহ্নিত করবে না। এই পদ্ধতি ব্যবহার করার সময়, আপনি ফলস নেগেটিভ পেতে পারেন।
আরেকটি পদ্ধতি হতে পারে, নির্ভরযোগ্যতা নির্বিশেষে সমস্ত মিলগুলো খতিয়ে দেখা এবং আপনার কাঙ্ক্ষিত ইনপুটের সাথে মেলে এমন যেকোনো মিল খুঁজে বের করা। এর বিপরীতে, এই ধরনের পদ্ধতির ফলে ভুল ফলাফলের (ফলস পজিটিভ) সংখ্যা বেড়ে যেতে পারে। আপনার কোন পদ্ধতিটি গ্রহণ করা উচিত, তা মূলত আপনার ব্যবহারের ধরনের (ইউসকেস) উপর নির্ভর করে।
শোনা শুরু করুন
ব্যবহারকারীর কথা শোনা শুরু করতে, startListening কল করার সময় ACTION_RECOGNIZE_SPEECH ইন্টেন্টটি উল্লেখ করুন।
override fun onStart() {
super.onStart()
val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
}
speechRecognizer?.startListening(intent)
}
কোড সম্পর্কে মূল বিষয়গুলো
-
ACTION_RECOGNIZE_SPEECHব্যবহার করার সময়, আপনাকে অবশ্যইEXTRA_LANGUAGE_MODELএক্সট্রাটিও উল্লেখ করতে হবে। -
LANGUAGE_MODEL_FREE_FORMকথোপকথনমূলক বক্তব্যের জন্য উদ্দিষ্ট।