Я транслирую с микрофона клиента Android на сервер nodejs (созданный мной), который передает звук агенту DialogFlow. Код потоковой передачи сервера nodejs основан на этом фрагменте: https://cloud.google.com/dialogflow/docs/detect-intent-stream#streaming_detect_intent
Сервер в nodejs сначала получает промежуточные результаты (со словами, обнаруженными автоматом c распознавание речи - ASR) и затем конечный результат DialogFlow (с анализом NLU). Протокол соединения между клиентом Android и сервером nodejs является веб-сокетом.
Проблема, с которой я сталкиваюсь, заключается в том, что при потоковой передаче аудио коротких предложений (в моем случае слова на итальянском языке "sì «/« нет »), конечный результат dialogFlow иногда приходит с задержкой, близкой к 10 секундам.
Я измерил задержку окончательного результата DialogFlow от того, когда прибывает первый частичный результат ASR. Итак, мои эксперименты продолжаются так:
- Я открываю микрофон и начинаю говорить (я просто говорю «sì» или «нет»)
- приходит первый промежуточный результат ( таймер запускается)
- поступает конечный результат DialogFlow (таймер останавливается)
Промежуточные результаты распознавания речи приходят почти сразу, то есть с очень низкой задержкой.
Что касается задержки, с которой приходит окончательный результат DialogFlow, то примерно один раз в два результат приходит в течение 4 секунд, что является приемлемым, в противном случае это занимает больше времени (в худшем случае даже с 10 или 11 секундами задержка). В последнем случае задержка неприемлема, поскольку пользовательский интерфейс слишком медленный.
Опять же, я должен сказать, что эта проблема встречается только в очень коротких предложениях. С предложениями, состоящими из слов всего из нескольких слогов, задержка DialogFlow всегда незначительна, и все в порядке.
Я также пробовал с моделями Engli sh, но предложения, состоящие из "да" и «нет» страдают от такой же задержки. Я также провел несколько тестов с моделями, отличными от модели по умолчанию (в частности, я попробовал модель command_and_search
, которая описывается как «Подходит для коротких запросов, таких как голосовые команды или голосовой поиск»), но без удачи.
Я понимаю, что использование таких коротких предложений, как "да" и "нет", не является наиболее частым случаем использования для агента DialogFlow, однако я считаю, что в определенных обстоятельствах полезно (иногда необходимо) использовать их.
Поэтому я спрашиваю, сталкивался ли кто-нибудь с этой проблемой и знает, как ее преодолеть.