GitHub не входит в систему каждый день. Если у вас есть какие -либо вопросы, пожалуйста, свяжитесь с [email protected] и ответьте в свободное время. Спасибо!
Это мой первый проект GitHub. Я хотел бы поблагодарить веб -сайт Cotin «Создание простой интеллектуальной системы обслуживания клиентов» (i), (ii) и (ii) за помощь процесса строительства. Перед прочтением этого учебника вы можете сначала прочитать эти три статьи. Этот учебник корректирует порядок строительства на основе этого и дает больше информации об эксплуатации, обработке ошибок и других описаниями строительства.
Используйте FreeSwitch, чтобы принять пользовательские звонки с мобильными телефонами, используйте плагин iflytek Open Platform (XFYUN), чтобы интегрировать подключаемость iflytek Open Platform (XFYUN) для выполнения распознавания голоса (ASR) и вызовов синтеза голоса (TTS) на основе пользовательского бизнес-логика, чтобы создать простой конечный центр голоса.

FreesWitch в этом примере составлен и установлен в системной версии MacOS High Sierra 10.13.4. Он не установлен с использованием программных пакетов. Для конкретных этапов установки см. Внедрение официального веб -сайта. Другие платформы, такие как Linux (Ubuntu, Centos), должны быть успешно установлены.
Ниже приведены шаги для компиляции и установки исходного кода:
1. Загрузите исходный код FreeSwitch:
cd /usr/local/src
git clone -b v1.6 https://freeswitch.org/stash/scm/fs/freeswitch.git freeswitch2. Установите библиотеку зависимостей
brew install autoconf
brew install automake
brew install libtool
brew install pkg-config
brew install speexdsp
brew install speex
brew install libldns-dev
brew install OpenSSL
brew install pcre
brew install pkgconfig sqlite3
brew install lua
brew install opus
brew install libsndfileПримечание. Для других системных платформ сами подтвердите контент библиотеки зависимостей. Возможные результаты поиска: Ubuntu/Centos Freeswitch зависимости установки. Под Ubuntu: libtool не найден.
3. Скомпилируйте и установите
cd freeswitch/
# 先执行 bootstrap.sh,生成configure文件
./bootstrap.sh
./configure --prefix=/usr/local/freeswitch
make
make install
make cd-sounds-install
make cd-moh-install4. бежать
cd /usr/local/freeswitch/bin
./freeswitchВы можете начать приложение.
Примечание: проблемы, которые могут возникнуть во время установки. Ошибки в конфигурации.
FreesWitch настроен с пользователями 1000-1019 (20) по умолчанию, с паролем по умолчанию 1234. Вы можете перейти на этап проверки «Шаг 4-тест и проверка» заранее, войти в систему и набрать 5000, и вы можете услышать руководство по голосовому меню для по умолчанию IVR.
Сервер UNIMRCP в этом примере составлен и установлен в CentOS 7. Благодаря исходному коду SUMRCP -сервера, который был записан для интеграции IFLYTEK SDK, предоставленного пользователем GitHub Cotinoang.
1. Загрузите демо -код плагина unimrcp -сервера Демо -код:
cd /opt
git clone https://github.com/cotinyang/MRCP-Plugin-Demo.git MRCP-Plugin-Demo2. Среда подготовки компиляции
cd MRCP-Plugin-Demo/unimrcp-deps-1.5.0
# # 编译可能出现错误, 注释掉:107 ~ 109, getopt的set,其中存在不识别的option
# # 编译生成apr, apr-util, target path: ./libs
./build-dep-libs.shПримечание: 1. Вам нужно дважды ввести Y во время процесса и подтвердить его; 2. Кроме того, мы разделили проект, который мы поддерживаем для этого демонстрационного проекта, причем адрес-https://github.com/wangkaisine/mrcp-plugin-demo, вы также можете использовать исходный код этого адреса.
3. Скомпилируйте и установите UNIMRCP
cd unimrcp-1.5.0
./bootstrap
# # 如果不能自动检测apr,apr-util,请在configure中增加 option:--with-apr=/path/apr --with-apr-util=/path/apr-util/
# # apr, apr-util由./build-dep-libs.sh 生成
./configure
make
make installВы можете увидеть установленное UNIMRCP в/usr/local/.
4. Тестовый запуск
cd /usr/local/unimrcp/bin
./unimrcpserver -o 3Вы можете использовать клиент для проверки
cd /usr/local/unimrcp/bin
./unimrcpclient
> help
usage:
- run [app_name] [profile_name] (run demo application)
app_name is one of ' synth ' , ' recog ' , ' bypass ' , ' discover '
profile_name is one of ' uni2 ' , ' uni1 ' , ...
examples:
run synth
run recog
run synth uni1
run recog uni1
- loglevel [level] (set loglevel, one of 0,1...7)
- quit, exitВведите помощь, чтобы ввести, дать метод использования, введите Run Recog, чтобы запустить тест на распознавание речи и запустить синтезатор для проведения теста на синтез речи.
1. Iflytek Development Platform SDK скачать
Поскольку пакет SDK, загруженный с Open Platform Iflytek, связан с пользователями и приложениями, созданными пользователями, необходимо удалить все файлы и папки в сторонних/Xfyun, а также повторную загрузку и распад ваш собственный SDK. Каталог и исходный код в основном одинаковы.
Вам необходимо зарегистрироваться и войти на платформу Iflytek Open, введите страницу консоли и создать приложение;
Получите свой Appid в интерфейсе My Apps и «добавьте новую службу» для приложения, выберите необходимые услуги «голосовой диктовки» и «синтез голоса онлайн» (требуется в этом примере);
Нажмите «Скачать SDK» справа и подтвердите на странице Jump, что «Select App» выбрало созданное вами приложение », выберите возможности AI, которые вам нужны», выберите приведенные вышеупомянутые сервисы и нажмите «Скачать SDK», чтобы дождаться создания и завершения SDK.
Разируйте и замените все файлы и папки в соответствии с MRCP-Plugin-Demo/unimrcp-1.5.0/Plugins/Threiday/Xfyun/.
Примечание. Выберите «Linux», чтобы создать платформу приложения на странице приложения.
2. Плагин написание и перевод
Этот шаг расскажет вам, как написать плагин-код для UNIMRCP, то есть как получить файлы и связанные с ними конфигурации папок XFYUN_RECOG и XFYUN_XYNTH в папках MRCP-PLUGIN-DEMO/UNIMRCP-1.5.0/плагинов. Если вы сейчас не обращаете внимания на эту деталь, вы можете пропустить этот шаг к шагу 4.
Фактически, приведенный выше код MRCP-Plugin-Demo является кодом плагина, который загружает UNIMRCP 1.5.0 и UNIMRCP DEPS 1.5.0 на официальном веб-сайте UNIMRCP и добавляет на этой основе.
Сначала отредактируйте файл configure.ac и определение макроса, используемое в Makefile в следующем. Плагин xfyun распознавателя добавлен следующим образом:
dnl XFyun recognizer plugin.
UNI_PLUGIN_ENABLED(xfyunrecog)
AM_CONDITIONAL([XFYUNRECOG_PLUGIN],[test " ${enable_xfyunrecog_plugin} " = " yes " ])
...
plugins/xfyun-recog/Makefile
...
echo XFyun recognizer plugin....... : $enable_xfyunrecog_pluginПримечание. Среди них ··· Другие конфигурации по умолчанию в этом файле. Пожалуйста, найдите соответствующее место для заполнения.
Соответственно, добавление плагина Xfyun Synthesizer заключается в следующем:
dnl XFyun synthesizer plugin.
UNI_PLUGIN_ENABLED(xfyunsynth)
AM_CONDITIONAL([XFYUNSYNTH_PLUGIN],[test " ${enable_xfyunsynth_plugin} " = " yes " ])
···
plugins/xfyun-synth/Makefile
···
echo XFyun synthesizer plugin...... : $enable_xfyunsynth_pluginДобавлен исходный код и каталог
В каталоге плагинов создайте новый каталог Xfyun-Recog и создайте новый каталог SRC в этом каталоге. Вы можете скопировать DEMO_RECOG_ENGINE.C в этом каталоге и изменить его на XFYUN_RECOG_ENGINE.C и изменить файл xfyun_recog_engine.c (модифицированная часть известна: изменить аппети Справочник Xfyun-Synth.
Создайте новый файл makefile.am в папке Xfyun-Recog, со следующим содержимым:
AM_CPPFLAGS = $( UNIMRCP_PLUGIN_INCLUDES )
plugin_LTLIBRARIES = xfyunrecog.la
xfyunrecog_la_SOURCES = src/xfyun_recog_engine.c
xfyunrecog_la_LDFLAGS = $( UNIMRCP_PLUGIN_OPTS )
-L $( top_srcdir ) /plugins/third-party/xfyun/libs/x64
-lmsc -ldl -lpthread -lrt -lstdc++
xfyunrecog_ladir = $( libdir )
xfyunrecog_la_DATA = $( top_srcdir ) /plugins/third-party/xfyun/libs/x64/libmsc.so
include $( top_srcdir ) /build/rules/uniplugin.am
UNIMRCP_PLUGIN_INCLUDES += -I $( top_srcdir ) /plugins/third-party/xfyun/includeСоответственно, создайте новую папку makefile.am под папкой Fyun-Synth, со следующим содержанием:
AM_CPPFLAGS = $( UNIMRCP_PLUGIN_INCLUDES )
plugin_LTLIBRARIES = xfyunsynth.la
xfyunsynth_la_SOURCES = src/xfyun_synth_engine.c
xfyunsynth_la_LDFLAGS = $( UNIMRCP_PLUGIN_OPTS )
-L $( top_srcdir ) /plugins/third-party/xfyun/libs/x64
-lmsc -ldl -lpthread -lrt
xfyunsynth_ladir = $( libdir )
include $( top_srcdir ) /build/rules/uniplugin.am
UNIMRCP_PLUGIN_INCLUDES += -I $( top_srcdir ) /plugins/third-party/xfyun/includeИзмените файл makefile.am в папке плагинов и добавьте содержимое Xfyun-Recog следующим образом:
if XFYUNRECOG_PLUGIN
SUBDIRS += xfyun-recog
endifСоответственно, содержимое, добавленное в Xfyun-Synth, выглядит следующим образом:
if XFYUNRECOG_PLUGIN
SUBDIRS += xfyun-synth
endifИзмените файл conf/unimrcpserver.xml и изменить с включения демонстрационного двигателя по умолчанию, чтобы включить наши два двигателя.
xfyun-recog изменен следующим образом:
< engine id = " Demo-Recog-1 " name = " demorecog " enable = " false " />
< engine id = " XFyun-Recog-1 " name = " xfyunrecog " enable = " true " />Соответственно, Xfyun-Synth изменяется следующим образом:
< engine id = " Demo-Synth-1 " name = " demorecog " enable = " false " />
< engine id = " XFyun-Synth-1 " name = " xfyunsynth " enable = " true " />В то же время, если вы готовы подключить сервер UNIMRCP и FreeSwitch, вам следует настроить IP -адрес сервера в conf/unimrcpserver.xml, то есть адрес доступа подсети текущей установки UNIMRCP.
Перекомпилируйте и установите UNIMRCP (Шаг 2 3).
Когда вы начинаете следующую проблему:
- Не удалось загрузить dso:/usr/local/unimrcp/lib/libmsc.so: не определенный символ: _ztvn10__cxabiv117__class_type_infoe
Исправление: -lstdc ++
- ./unimrcpserver: ошибка при загрузке общих библиотек: Libsofia-sip-ua.so.0: невозможно открыть файл общего объекта: нет такого файла или каталога
исправить:
在etc/ld.so.conf 内容增加: /usr/local/lib
ldconfig 将ld.so.conf读入cacheНастройте FreesWitch
Нам нужно подключить как FreesWitch, который обрабатывает голосовые вызовы пользователей, так и сервер UNIMRCP, который отправляет запросы в xfyun Engine.
1. Настройте модуль UNIMRCP и загрузите его автоматически;
# 编辑/usr/local/src/freeswitch/modules.conf文件,找到要安装的模块,去掉前面的注释符号#
cd /usr/local/src/freeswitch
vim modules.conf
# asr_tts/mod_unimrcp
asr_tts/mod_unimrcp
# 执行make mod_xxx-install命令,这样就编译相应模块,并把编译后的动态库安装的/usr/local/freeswitch/mod目录下
make mod_unimrcp-install
# 编辑/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml,去掉注释符号,如果没有发现对应模块,则添加
< load module= " mod_unimrcp " / >2. Установите файл профиля и файл conf;
Создайте новый файл конфигурации unimrcpserver-mrcp-v2.xml в каталоге/usr/local/freeswitch/conf/mrcp_profiles:
< include >
<!-- UniMRCP Server MRCPv2 -->
<!-- 后面我们使用该配置文件,均使用 name 作为唯一标识,而不是文件名 -->
< profile name = " unimrcpserver-mrcp2 " version = " 2 " >
<!-- MRCP 服务器地址 -->
< param name = " server-ip " value = " 192.168.1.23 " />
<!-- MRCP SIP 端口号 -->
< param name = " server-port " value = " 8060 " />
< param name = " resource-location " value = " " />
<!-- FreeSWITCH IP、端口以及 SIP 传输方式 -->
< param name = " client-ip " value = " 192.168.1.24 " />
< param name = " client-port " value = " 5069 " />
< param name = " sip-transport " value = " udp " />
< param name = " speechsynth " value = " speechsynthesizer " />
< param name = " speechrecog " value = " speechrecognizer " />
<!-- param name="rtp-ext-ip" value="auto"/ -->
< param name = " rtp-ip " value = " 192.168.1.24 " />
< param name = " rtp-port-min " value = " 4000 " />
< param name = " rtp-port-max " value = " 5000 " />
< param name = " codecs " value = " PCMU PCMA L16/96/8000 " />
<!-- Add any default MRCP params for SPEAK requests here -->
< synthparams >
</ synthparams >
<!-- Add any default MRCP params for RECOGNIZE requests here -->
< recogparams >
<!-- param name="start-input-timers" value="false"/ -->
</ recogparams >
</ profile >
</ include >Настройте/USR/Local/freeswitch/conf/autoload_configs/unimrcp.conf.xml Файл:
< configuration name = " unimrcp.conf " description = " UniMRCP Client " >
< settings >
<!-- UniMRCP profile to use for TTS -->
< param name = " default-tts-profile " value = " unimrcpserver-mrcp2 " />
<!-- UniMRCP profile to use for ASR -->
< param name = " default-asr-profile " value = " unimrcpserver-mrcp2 " />
<!-- UniMRCP logging level to appear in freeswitch.log. Options are:
EMERGENCY|ALERT|CRITICAL|ERROR|WARNING|NOTICE|INFO|DEBUG -->
< param name = " log-level " value = " DEBUG " />
<!-- Enable events for profile creation, open, and close -->
< param name = " enable-profile-events " value = " false " />
< param name = " max-connection-count " value = " 100 " />
< param name = " offer-new-connection " value = " 1 " />
< param name = " request-timeout " value = " 3000 " />
</ settings >
< profiles >
< X-PRE-PROCESS cmd = " include " data = " ../mrcp_profiles/*.xml " />
</ profiles >
</ configuration >Примечание: 1. Сервер-IP в Unimrcpserver-MRCP-V2.xml-это IP-IP-хост, запущенный Unimrcpserver; 2. Клиентские и IP и RTP-IP-это хосты, созданные Freeswitch, а порт клиента-порт Freeswitch, доступный к мобильному телефону, поскольку клиент по умолчанию составляет 5060, что отличается от двух; 3. Имя профиля в unimrcpserver-mrcp-v2.xml должно быть таким же, как и по умолчанию-TTS-профиль в unimrcp.conf.xml и профиле по умолчанию (в некоторых документах, что на самом деле не является несущественным).
Затухание: важно развернуть Unimrcpserver и Freeswitch в том же сегменте сети. Лучше всего выполнить тест на той же физической машине при его развертывании.
3. Настройте IVR и сценарии.
Добавьте следующую конфигурацию в /ср /локал/freeswitch/conf/dialplan/default.xml:
< extension name = " unimrcp " >
< condition field = " destination_number " expression = " ^5001$ " >
< action application = " answer " />
< action application = " lua " data = " names.lua " />
</ condition >
</ extension >Добавить сценарий имен.
session : answer ()
-- freeswitch.consoleLog("INFO", "Called extension is '".. argv[1]"'n")
welcome = " ivr/ivr-welcome_to_freeswitch.wav "
menu = " ivr/ivr-this_ivr_will_let_you_test_features.wav "
--
grammar = " hello "
no_input_timeout = 80000
recognition_timeout = 80000
confidence_threshold = 0.2
--
session : streamFile ( welcome )
-- freeswitch.consoleLog("INFO", "Prompt file is n")
tryagain = 1
while ( tryagain == 1 ) do
--
session : execute ( " play_and_detect_speech " , menu .. " detect:unimrcp {start-input-timers=false,no-input-timeout= " .. no_input_timeout .. " ,recognition-timeout= " .. recognition_timeout .. " } " .. grammar )
xml = session : getVariable ( ' detect_speech_result ' )
--
if ( xml == nil ) then
freeswitch . consoleLog ( " CRIT " , " Result is 'nil' n " )
tryagain = 0
else
freeswitch . consoleLog ( " CRIT " , " Result is ' " .. xml .. " ' n " )
tryagain = 0
end
end
--
-- put logic to forward call here
--
session : sleep ( 250 )
session : set_tts_params ( " unimrcp " , " xiaofang " );
session : speak ( "今天天气不错啊" );
session : hangup ()Нам нужно добавить файл синтаксиса hello.gram в каталог/usr/local/freeswitch/grammar. Это может быть пусто. Он должен соответствовать спецификации синтаксиса распознавания речи 1.0 Стандарт (на короткие сроки как SRGS1.0). Этот синтаксис -файл ASR -двигатель может использоваться при его распознавании.
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< grammar version = " 1.0 " xml : lang = " zh-cn " root = " Menu " tag-format = " semantics/1.0 "
xmlns=http://www.w3.org/2001/06/grammar
xmlns:sapi= " http://schemas.microsoft.com/Speech/2002/06/SRGSExtensions " ><!- 这些都是必不可少的-->
< rule id = " city " scope = " public " >
< one-of > <!-- 匹配其中一个短语-->
< item >北京</ item >
< item >上海</ item >
</ one-of >
</ rule >
< rule id = " cross " scope = " public " >
< one-of >
< item >到</ item >
< item >至</ item >
< item >飞往</ item >
</ one-of >
</ rule >
< rule id = " Menu " scope = " public " >
< item >
< ruleref uri = " #date " /> <!--指定关联的其他规则的节点-->
< tag >out.date = reles.latest();</ tag >
</ item >
< item repeat = " 0-1 " >从</ item > <!--显示1次或0次-->
< item >
< ruleref uri = " #city " />
< tag >out.city = rulels.latest();</ tag >
</ item >
< item >
< ruleref uri = " #cross " />
< tag >out.cross = rulels.latest();</ tag >
</ item >
< item >
< ruleref uri = " #city " />
< tag >out.city = rulels.latest();</ tag >
</ item >
</ rule >
</ grammar >ПРИМЕЧАНИЕ. В сценарии LUA «play_and_detect_speech» вызывает службу ASR, а «говорить» вызывает службу TTS. Я столкнулся с проблемами во время запуска конфигурации.
Загрузите тестовый инструмент: обожайте клиент SIP
Поиск «Adore SIP Client» в App Store (для других систем мобильных телефонов, пожалуйста, перейдите на соответствующий рынок приложений) и загрузите его.

Среди них SIP IP-это IP-IP-хост и порт, включенный Freeswitch Service (по умолчанию 5060), имя пользователя может быть выбрано как 1000-1019, как указано выше, а пароль по умолчанию-1234. Нажмите «Вход» (пожалуйста, убедитесь, что сеть, подключенная к телефону, находится в той же подсети, что и FreesWitch), и наберите 5001 для проверки языкового теста (если вы прыгнули с первого шага, пожалуйста, наберите 5000).
Главная страница Freeswitch: https://freeswitch.com/
Unimrcp домашняя страница: http://www.unimrcp.org/
Apache Apr: https://apr.apache.org/
Iflytek SDK Метод импорта пакета: https://doc.xfyun.cn/msc_linux/sdk%E5%8C%85%E5%F%BC%E5%85%A5.html