Требуется руководство: обнаружение голосовой активности и обработка тайм-аута с помощью облачного API преобразования речC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Требуется руководство: обнаружение голосовой активности и обработка тайм-аута с помощью облачного API преобразования реч

Сообщение Anonymous »


Мой сценарий довольно прост: после пробуждающего слова пользователя (я не использую для этого Google Speech) я начинаю отправлять данные микрофона в службу распознавания речи Google. Проблема, которую я пытаюсь решить, заключается в следующем: если пользователь активирует моего голосового помощника и сразу после этого ничего не говорит, я хочу остановить процесс отправки молчания в службу. Я считаю, что VoiceActivityTimeout специально создан для этой цели. Однако, поскольку я не разбираюсь в protobuf, я не уверен, как это реализовать и как он должен работать.

Это то, что я попробовал. Я взял этот пример и изменил его:streaming_transcribe_singlethread.cc:

личное: Обработчик (google::cloud::CompletionQueue cq, ParseResult args) : cq_(std::move(cq)), file_(args.path, std::ios::binary) { auto&streaming_config = *request_.mutable_streaming_config(); *streaming_config.mutable_config() = std::move(args.config); // Мои изменения начались здесь streaming_config.set_single_utterance (истина); streaming_config.set_enable_voice_activity_events (истина); auto& timeout = *streaming_config.mutable_voice_activity_timeout (); auto& продолжительность = *timeout.mutable_speech_start_timeout (); длительность.set_секунды (1); // конец моих изменений Я ожидаю, что запуск этого кода приведет к остановке процесса транскрипции сразу после первого фрагмента данных (в файле 10 секунд тишины, а мне нужно обнаружить речевую активность в первую секунду). Вместо этого я получаю следующее:

./streaming_transcribe_singlethread Silence.wav Отправка 64 КБ. Отправка 64 КБ. Отправка 64 КБ. Ошибка в потоке транскрипции: ОТМЕНЕНО: операция отменена. Молчание.wav

Я согласен, что если поток закрывается по таймауту, такого результата можно было ожидать. Однако я считаю, что первоначального фрагмента данных (около 3 секунд) должно быть достаточно, чтобы определить наличие тишины. Увы, изменение значения тайм-аута, похоже, не влияет на результат.

Я почти уверен, что делаю что-то не так. К сожалению, мне не удалось найти примеров того, как устанавливать и обрабатывать таймауты. Будьте добры, объясните мне, как это должно работать и что я делаю не так.

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

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»