يمكنك استخدام ميزة "التعرّف التلقائي على الكلام" (ASR) للتعرّف على عبارات محدّدة من المستخدم باستخدام SpeechRecognizer وتحويلها إلى نص.
SpeechRecognizer مدمجة في نظام التشغيل Android (ولا تتطلّب أي مكتبات إضافية) وتعمل حتى بدون اتصال بالإنترنت.
لكي يحوّل SpeechRecognizer كلام المستخدم إلى نص، يجب أن يمنح المستخدم تطبيقك الإذن RECORD_AUDIO. لمعرفة كيفية طلب هذا الإذن لتطبيقك، اطّلِع على طلب أذونات الأجهزة.
إنشاء مثيل SpeechRecognizer
أنشئ مثيلاً من 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).يتم إجراء مطابقة سلسلة غير حساسة لحالة الأحرف لتحديد الإجراء الذي يريد المستخدم اتخاذه.
طُرق بديلة عند المطابقة
في المثال السابق، يتم استخدام المطابقة ذات أعلى قيمة ثقة. ويعني هذا الخيار أنّه يجب أن يكون النظام واثقًا تمامًا من فهمه لما قاله المستخدم، وإلا لن يحدّد أي تطابق. عند استخدام هذا الأسلوب، قد تحصل على نتائج سلبية خاطئة.
يمكن اتّباع أسلوب آخر يتمثل في البحث في جميع النتائج المطابقة بغض النظر عن مستوى الثقة والعثور على أي نتيجة مطابقة تتناسب مع الإدخال الذي تبحث عنه. في المقابل، قد يؤدي هذا النوع من النهج إلى المزيد من النتائج الإيجابية الخاطئة. يعتمد النهج الذي يجب اتّباعه بشكل كبير على حالة الاستخدام.
بدء الاستماع
لبدء الاستماع إلى المستخدم، حدِّد ACTION_RECOGNIZE_SPEECH
النية عند طلب startListening.
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في الكلام الحواري.