









Распознование речи на Asterisk
Распознование и генерация речи на AsteriskГолосовое меню с распознование и генерацией речи.
Задача:
Создать IVR который воспроизводил бы текст и распознавал бы голос, а также совершал бы действия в соответствии с голосовыми командами.
Что мы имеем:
1) Установлендистрибутив Ubuntu
2) Установлен Asterisk
Способ решения:
Будут использоваться Googleсервисы по воспроизведению голоса (чтение текста) и определению голосовых команд. Для этого в диалплане будут использованы перл скрипты.
Описание решения:
1) Установим пакеты:
a. Perl: The Perl Programming Language
#apt-get install perl
b. perl-libwww: The World-Wide Web library for Perl
#apt-get install libwww-perl
d. perl-libjson: Module for manipulating JSON-formatted data
#apt-get install libjson-perl
e. flac: Free Lossless Audio Codec
#apt-get install flac
f. Для подключения к гугловскому
сайту по HTTPSустанавливаем пакет IO-Socket-SSL:
#apt-get install libio-socket-ssl-perl
g. sox : SoundeXchange, программа по обработке звука:
#apt-get install sox
h. mpg123 : MPEG проигрыватель
#apt-get install mpg123
i. модуль в астере (обычно он установлен с самого начала) format_sln : Raw slinear module for asterisk
2) Создадим ключ, который будет использоваться нашим скриптом для авторизации наших запросов на сайте гугл вовремя распознавания речи (обычно данный ключ позволяет распознать до 50-500 запросов в день, но если необходимо коммерческое использование то можно и оплатить это удовольствие, 300 $ в месяц, кажется). Для этого совершаем следующие действия:
a. Зайдем на сайт Google Developers Console (https://console.developers.google.com/) под своей учеткой.
b. Если вы до этого не активировали подписку на Chromedev, то надо ее активировать путем перехода на сайт:
https://groups.google.com/a/chromium.org/forum/#!forum/chromium-dev
c. После вступления в группу создаем новый проект на сайте https://console.developers.google.com/project
d. Заходим в проект и находим SpeechAPI
e. Включаем API (Enable API)
f. Создаем ключ:
g. Копируем содержимое ключа, содержимое данного ключа будет использоваться ниже, на шаге 3.b).
3) Создаем два перл скрипта в папке /var/lib/asterisk/agi-bin/
a. Первый называется googletts.agi и используется для воспроизведения текста в виде звука. Содержание скрипта:
b. Второй называется speech-recog.agi и используется для распознавания речи и преобразования его в текст. Здесь переменная "key" должна содержать значение которое было сгенерировано на шаге 3.g).
4) Изменяем диалплан, например, на следующий:
Voice dialing example
exten => 1236,1,Answer()
exten => 1236,n,agi(googletts.agi,"Please say the number you want to dial.",en)
exten => 1236,n(record),agi(speech-recog.agi,en-US)
exten => 1236,n,GotoIf($["${confidence}" > "0.8"]?success:retry)
exten => 1236,n(success),goto(${utterance},1)
exten => 1236,n(retry),agi(googletts.agi,"Can you please repeat?",en)
exten => 1236,n,goto(record)
exten => _XXXX,1,Progress()
exten => _XXXX,n,Dial(SIP/${EXTEN},30)
exten => _XXXX,n,Set(CHANNEL(language)=ru)
exten => _XXXX,n, VoiceMail(${EXTEN}@default,u)
exten => _XXXX,n,Hangup()
Данный диалплан будет запрашивать какой добавочный номер вы хотите набрать, и если он сможет распознать текст с точностью более 0,8, то данный номер или слово будет набираться. Распознает и читает на английском языке, но также поддерживаются другие языки:
[['Afrikaans', ['af-ZA']],
['Bahasa Indonesia',['id-ID']],
['Bahasa Melayu', ['ms-MY']],
['Català', ['ca-ES']],
['Čeština', ['cs-CZ']],
['Deutsch', ['de-DE']],
['English', ['en-AU', 'Australia'],
['en-CA', 'Canada'],
['en-IN', 'India'],
['en-NZ', 'New Zealand'],
['en-ZA', 'South Africa'],
['en-GB', 'United Kingdom'],
['en-US', 'United States']],
['Español', ['es-AR', 'Argentina'],
['es-BO', 'Bolivia'],
['es-CL', 'Chile'],
['es-CO', 'Colombia'],
['es-CR', 'Costa Rica'],
['es-EC', 'Ecuador'],
['es-SV', 'El Salvador'],
['es-ES', 'España'],
['es-US', 'Estados Unidos'],
['es-GT', 'Guatemala'],
['es-HN', 'Honduras'],
['es-MX', 'México'],
['es-NI', 'Nicaragua'],
['es-PA', 'Panamá'],
['es-PY', 'Paraguay'],
['es-PE', 'Perú'],
['es-PR', 'Puerto Rico'],
['es-DO', 'República Dominicana'],
['es-UY', 'Uruguay'],
['es-VE', 'Venezuela']],
['Euskara', ['eu-ES']],
['Français', ['fr-FR']],
['Galego', ['gl-ES']],
['Hrvatski', ['hr_HR']],
['IsiZulu', ['zu-ZA']],
['Íslenska', ['is-IS']],
['Italiano', ['it-IT', 'Italia'],
['it-CH', 'Svizzera']],
['Magyar', ['hu-HU']],
['Nederlands', ['nl-NL']],
['Norsk bokmål', ['nb-NO']],
['Polski', ['pl-PL']],
['Português', ['pt-BR', 'Brasil'],
['pt-PT', 'Portugal']],
['Română', ['ro-RO']],
['Slovenčina', ['sk-SK']],
['Suomi', ['fi-FI']],
['Svenska', ['sv-SE']],
['Türkçe', ['tr-TR']],
['български', ['bg-BG']],
['Pусский', ['ru-RU']],
['Српски', ['sr-RS']],
['한국어', ['ko-KR']],
['中文', ['cmn-Hans-CN', '普通话 (中国大陆)'],
['cmn-Hans-HK', '普通话 (香港)'],
['cmn-Hant-TW', '中文 (台灣)'],
['yue-Hant-HK', '粵語 (香港)']],
['日本語', ['ja-JP']],
['Lingua latīna', ['la']]];