Вы можете использовать автоматическое распознавание речи (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предназначен для разговорной речи.