VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Параллельное воспроизведение речи и восприятие ответа

Раздел для разработчиков для обсуждения программных и аппаратных продуктов и их реализации.

Модераторы: april22, Zavr2008

Ответить
homez
Сообщения: 6
Зарегистрирован: 26 мар 2014, 19:47

Параллельное воспроизведение речи и восприятие ответа

Сообщение homez »

Приветствую всех присутствующих!!

Я работаю над автоматизированным приемом заказов от клиентов по телефону на Asterisk 1.8. Клиенту задается несколько вопросов с помощью голосового движка Гугл, для этого использовал этот скрипт на Perl: http://zaf.github.io/asterisk-googletts/. Ответы клиента распознаются с помощью этого скрипта Perl: http://zaf.github.io/asterisk-speech-recog/. Система уже рабочая, заказов пока не так много, но надеемся на увеличение их числа. Диалогом с клиентом управляет PHP-скрипт через AGI-интерфейс (для удобства использовал PAGI: https://github.com/marcelog/PAGI).

Есть вопросы, после которых обработанный ответ клиента воспроизводится ему обратно, и он должен подвердить или не подтвердить, правильно ли понял его робот. Например, дата и время, когда услуга будет предоставлена, а также контактный телефон (спрашивается только тогда, когда у абонента номер скрыт), дабы избежать случайных ляп. Для этого используются команды STREAM FILE (запись речи робота подготавливается с помощью того же googletts.agi, слегка модифицированного), и сразу после нее - WAIT DIGIT на 7 секунд. Нажатие клиентом в это время цифры 1 воспринимается как подтверждение, нажатие 2 - как несогласие. Работает вполне адекватно.

Однако, не тлеет мечта подключить возможность и голосового подтверждения (да/нет), которое можно было бы сделать и во время речи робота, как и цифрового подтверждения (которое во время STREAM FILE тоже работает). Сложности, которые встали на моем пути:
1) RECORD FILE и STREAM FILE не могут работать параллельно. Я пытался обратиться в сторону команды BACKGROUND вместо STREAM FILE, но здесь тоже параллельности быть не может.
2) Даже если голосовое подтверждение сделать возможным только после того, как фраза робота закончится, и вместо WAIT DIGIT использовать RECORD FILE, то есть проблема с восприятием тишины, которую я уже успешно использовал как признак конца ответа - в разных задачах у меня этот таймаут 2-3 секунды. Если человек ничего не собирается говорить, а, допустим, секунд 5 выискивает цифру 1 или 2, то тишина сработает раньше. Если тишину не воспринимать, а ограничить длину записи 7 секундами, то от голосового ответа не будет никакого преимущества - сказав "да" или "нет", человек будет ждать дольше.

Мне пришла идея запустить RECORD FILE в цикле, записывая в разные файлы кусочки, например, по секунде. Записался первый - отправляем на Гугл, пытаемся разобрать фразу. Записался второй - склеиваем с первым и снова отправляем на Гугл, записался второй - отправляем уже файл, склеенный из трех, и т.д., пока не разберем фразу "да" или "нет", или пока клиент не нажмет цифру. Разумеется, есть сложность с многопоточной обработкой в PHP (RECORD FILE и запросы к Гуглу должны делаться параллельно), но если что, я могу написать для распознавания отдельный скрипт, подключаемый с помощью popen. И всё-таки, если я это сделаю, вопрос 1 останется для меня не решенным.

Кто-нибудь сталкивался с подобным? Существуют ли пути решения? Может быть, я что-то упустил?
gosha
Сообщения: 375
Зарегистрирован: 06 сен 2010, 17:41
Контактная информация:

Re: Параллельное воспроизведение речи и восприятие ответа

Сообщение gosha »

для 1 можно Playback в ChanSpy пустить, но помоему выжимать из гугла больше не стоит.
homez
Сообщения: 6
Зарегистрирован: 26 мар 2014, 19:47

Re: Параллельное воспроизведение речи и восприятие ответа

Сообщение homez »

Про ChanSpy мне пока ничего не ясно, наверное, надо про это почитать побольше.
gosha писал(а):но помоему выжимать из гугла больше не стоит.
Извините, вот этой фразы не понял.
gosha
Сообщения: 375
Зарегистрирован: 06 сен 2010, 17:41
Контактная информация:

Re: Параллельное воспроизведение речи и восприятие ответа

Сообщение gosha »

ну гугл молодец - дал tts и asr бесплатно. для простых весчей оно очень даже ничего работает но пытаться из него выжать фоновое распознование не надо.

P.S. может и не стоит ждать одновременно и голосового подтверждения и через dtmf. Мы делали проще - в самом начале спрашивали как хочется работать или голосом или через дтмф и уже потом либо ждали только голосом или только дтмф.
homez
Сообщения: 6
Зарегистрирован: 26 мар 2014, 19:47

Re: Параллельное воспроизведение речи и восприятие ответа

Сообщение homez »

В одной задаче я dtmf и распознавание голоса успешно использовал параллельно - это оценки клиентом качества работы нашим сотрудникам после выполненных заказов, от 1 до 5, можно сказать как голосом (включая "хорошо", "отлично" и т.д.), так и DTMF, нажатый DTMF имеет приоритет. Но там, если вдруг чего-то не поймем или не распознаем - не дополучим оценки. А тут - упущенный заказ.

Спасибо за Ваши ответы, я еще пораскину мозгами.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH