אתם יכולים להשתמש בזיהוי דיבור אוטומטי (ASR) כדי לזהות ביטויים ספציפיים מהמשתמש באמצעות SpeechRecognizer ולהפוך אותם לטקסט.
SpeechRecognizer מובנה ב-Android (ולא נדרשות ספריות נוספות) והוא פועל גם במצב אופליין.
כדי ש-SpeechRecognizer יוכל להמיר את הדיבור של המשתמש לטקסט, המשתמש צריך להעניק לאפליקציה את ההרשאה RECORD_AUDIO. כאן מוסבר איך לבקש את ההרשאה הזו לאפליקציה.
יצירת מופע של SpeechRecognizer
יוצרים מופע של SpeechRecognizer ב-method onCreate() של הפעילות במשקפיים עם AI, כדי שהמופע יהיה זמין למשך משך החיים של הפעילות:
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מיועד לדיבור בשיחה.