Получите промежуточный результат при потоковой передаче звука с помощью streaming_detect_intent

Я последовал этому примеру и смог собрать аудио буферы с моего микрофона и отправить их в Dialogflow.

https://cloud.google.com/dialogflow-enterprise/docs/detect-intent-stream

Но это последовательная обработка. Сначала мне нужно собрать все аудио буферы, которые я потом могу отправить в Dialogflow.

Тогда я получаю правильный результат, а также промежуточные результаты.

Но только после того, как я дождался, пока человек сначала перестанет говорить, я смог отправить собранные аудио буферы в Dialogflow.

Я хотел бы мгновенно отправить (потоковое) аудиобуфер в диалог, пока кто-то еще говорит, а также сразу получить промежуточные результаты.

Кто-нибудь знает, возможно ли это, и указывает ли мне правильное направление? Мой предпочтительный язык - Python.

Большое спасибо!


person TVK    schedule 04.01.2019    source источник


Ответы (2)


Я получил ответ от службы поддержки Dialogflow:

Из документации Dialogflow: Распознавание прекращается, когда он обнаруживает, что голосовой звук остановлен или приостановлен. В этом случае, как только обнаруженное намерение получено, клиент должен закрыть поток и начать новый запрос с новым потоком по мере необходимости. Это означает, что пользователь должен остановить / приостановить разговор, чтобы вы отправили его в Dialogflow.

Чтобы Dialogflow мог определить правильное намерение, он должен иметь полное пользовательское высказывание.

Если вы ищете распознавание речи в реальном времени, обратите внимание на наш продукт для преобразования речи в текст (https://cloud.google.com/speech-to-text/).

person TVK    schedule 07.01.2019

Пытаясь сделать что-то подобное недавно, я обнаружил, что у кого-то уже была эта проблема. и разобрались. По сути, вы можете передать аудиопоток в DialogFlow с помощью метода streamingDetectIntent и получить промежуточные результаты, поскольку во входном аудиосигнале распознается допустимый язык. Сложность заключается в том, что вам нужно установить порог для входного потока, чтобы поток заканчивался, как только пользователь прекращает говорить в течение установленного времени. Закрытие потока служит той же цели, что и достижение конца аудиофайла, и запускает попытку сопоставления намерений.

Связанное выше решение использует SoX для потоковой передачи звука с внешнего устройства. Хорошая вещь в этом подходе заключается в том, что SoX уже имеет параметры для установки пороговых значений уровня звука на запускать / останавливать процесс потоковой передачи (посмотрите на параметр silence), чтобы вы могли точно настроить параметры для работы в соответствии с вашими потребностями. Если вы не используете NodeJS, вам может потребоваться написать собственную утилиту для обработки инициирования аудиопотока, но, надеюсь, это может указать вам правильное направление.

person vm909    schedule 07.01.2019