شما میتوانید از تشخیص خودکار گفتار (ASR) برای تشخیص گفتههای خاص کاربر خود با استفاده از SpeechRecognizer و تبدیل آنها به متن استفاده کنید. SpeechRecognizer در اندروید تعبیه شده است (نیازی به کتابخانههای اضافی ندارد) و حتی در حالت آفلاین نیز کار میکند.
برای اینکه SpeechRecognizer بتواند گفتار کاربر شما را به متن تبدیل کند، کاربر باید به برنامه شما مجوز RECORD_AUDIO را اعطا کند. برای یادگیری نحوه درخواست این مجوز برای برنامه خود، به درخواست مجوزهای سختافزاری مراجعه کنید.
نمونهسازی تشخیصدهنده گفتار
SpeechRecognizer در متد onCreate() مربوط به اکتیویتی عینک هوش مصنوعی خود نمونهسازی کنید تا در طول عمر اکتیویتی در دسترس باشد:
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)
...
}
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برای گفتار محاورهای در نظر گرفته شده است.