github非每天登录,如有问题,请联系 wangkaisine@gmail.com,空闲时间回复,谢谢!
这是我的第一个Github工程,特别感谢 Cotin网站 《构建简单的智能客服系统》(一)、 (二) 、(三) 对于构建过程的帮助,您在阅读本教程前,可以先行阅读这三篇文章,本教程基于此调整了构建顺序,给出更多的操作细节,错误处理以及其它构建描述。
主要目的
使用FreeSWITCH接受用户手机呼叫,通过UniMRCP Server集成讯飞开放平台(xfyun)插件将用户语音进行语音识别(ASR),并根据自定义业务逻辑调用语音合成(TTS),构建简单的端到端语音呼叫中心。
总体结构如下图所示:
构建步骤
第一步 安装编译FreeSWITCH
本次示例的FreeSWITCH在MacOS High Sierra 10.13.4系统版本中进行源码编译安装,未使用软件包安装,具体安装步骤可见 官网安装介绍 ,其他平台如Linux(Ubuntu、CentOS)应均能安装成功。
以下给出源码编译安装的步骤:
1.下载 FreeSWITCH源码:
1 |
|
2.安装依赖库
1 |
|
注:其他系统平台请自行确认依赖库内容,可能的搜索结果:Ubuntu/CentOS FreeSWITCH 安装依赖。 在ubuntu下:libtool not found。
3.编译安装
1 |
|
4.运行
1 |
|
即可启动应用。
注:安装过程中可能出现的问题 configure中的错误。
FreeSWITCH默认配置1000-1019(20个)用户,默认密码1234,您可以提前跳转到“第四步 测试与验证” 的验证步骤,登录并拨打5000,可以听到默认IVR的示例语音菜单指引。
第二步 配置编译UniMRCP Server
本次示例的UniMRCP Server在CentOS 7中进行源码编译安装,感谢由Github用户cotinyang提供的已经写好的集成讯飞SDK的UniMRCP Server源码。
1.下载 UniMRCP Server Plugin Demo 源码:
1 |
|
2.编译准备环境
1 |
|
注:1.过程中需要输入两次y,并确认;2.另外,我们为该Demo工程Fork了一个自己维护的工程,地址为https://github.com/wangkaisine/MRCP-Plugin-Demo 您也可以使用这个地址的源码。
3.编译安装unimrcp
1 |
|
即可在/usr/local/中看到安装好的unimrcp。
4.测试运行
1 |
|
可以使用client进行验证
1 |
|
输入help回车,给出了使用方法,输入run recog运行语音识别测试,run synth进行语音合成测试。
第三步 集成讯飞开放平台SDK
1.讯飞开发平台SDK下载
由于从讯飞开放平台下载的SDK包和用户以及用户创建的应用相关联,因此需要将third-party/xfyun中的文件和文件夹全部删除,重新下载解压属于自己的SDK,目录与源代码基本一致。
您需要注册并登录 讯飞开放平台 ,进入控制台页面,并创建应用;
在“我的应用”界面获得你的APPID,并为该应用“添加新服务”,选择需要的“语音听写”和”在线语音合成“服务(本示例需要);
点击右侧“SDK下载”,在跳转页面中确认“选择应用”已经选中了您创建的应用,“选择您需要的AI能力”选中上述两项服务,并点击“SDK下载”等待SDK生成与完成下载。
将下载的zip包,解压并替换MRCP-Plugin-Demo/unimrcp-1.5.0/plugins/third-party/xfyun/下的所有文件及文件夹。
注:创建应用页面中的应用平台选择“Linux”。
2.plugin编写与编译
本步骤将告诉您如何编写unimrcp的插件代码,即现在MRCP-Plugin-Demo/unimrcp-1.5.0/plugins文件夹下xfyun_recog、xfyun_xynth文件夹下的文件及其相关配置是如何得到的,如果您当前还不关注此细节,可以跳过本步骤至第四步。
实际上,上述MRCP-Plugin-Demo代码是在 Unimrcp官网 下载 Unimrcp 1.5.0 和 Unimrcp Deps 1.5.0 并在此基础上添加的plugin代码。
首先编辑configure.ac文件,会在后面的Makefile中使用到的宏定义。XFyun recognizer plugin的添加如下:
1 |
|
注:其中 ··· 是该文件中的其它默认配置,请找到对应位置填写。
对应地,XFyun synthesizer plugin的添加如下:
1 |
|
新增源码与目录
在 plugins 目录下,新建 xfyun-recog 目录,并在该目录下新建 src 目录,可以将 demo_recog_engine.c 拷贝到该目录下改名为 xfyun_recog_engine.c,将xfyun_recog_engine.c文件进行修改(已知一个修改的部分:将appid修改成你自己下载sdk的appid,不然会报错:QISRAudioWrite failed! error code:10407),xfyun-synth目录下对应创建并修改。
在xfyun-recog文件夹下新建Makefile.am文件,内容如下:
1 |
|
对应地,在fyun-synth文件夹下新建Makefile.am文件夹,内容如下:
1 |
|
修改plugins文件夹下Makefile.am文件,xfyun-recog添加内容如下:
1 |
|
对应地,xfyun-synth添加内容如下:
1 |
|
修改conf/unimrcpserver.xml文件,从默认启用demo engine改为启用我们的两个engine。
xfyun-recog修改如下:
1 |
|
对应地,xfyun-synth修改如下:
1 |
|
同时,如果您已经准备好将UniMRCP Server和FreeSWITCH对接,您应该在conf/unimrcpserver.xml中配置好server的ip地址,即当前unimrcp安装的子网访问地址。
重新编译安装unimrcp(第二步 3)。
当你启动时出现如下问题时:
- Failed to Load DSO: /usr/local/unimrcp/lib/libmsc.so: undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE
fix:-lstdc++
- ./unimrcpserver: error while loading shared libraries: libsofia-sip-ua.so.0: cannot open shared object file: No such file or directory
fix:
1 |
|
第四步 配置与验证
配置
配置FreeSWITCH
我们需要将处理用户语音呼入的FreeSWITCH与向xfyun engine发请求的unimrcp server两者连接起来。
1.配置unimrcp模块并自动加载;
1 |
|
2.设置profile文件与conf文件;
在/usr/local/freeswitch/conf/mrcp_profiles目录新建unimrcpserver-mrcp-v2.xml配置文件:
1 |
|
配置/usr/local/freeswitch/conf/autoload_configs/unimrcp.conf.xml文件:
1 |
|
注:1.unimrcpserver-mrcp-v2.xml中server-ip为unimrcpserver启动的主机ip;2.client-ip和rtp-ip为FreeSWITCH启动的主机,client-port仕FreeSWITCH作为客户端访问unimrcpserver的端口,手机作为客户端访问的FreeSWITCH端口默认为5060,两者不同;3.unimrcpserver-mrcp-v2.xml中的profile name应和unimrcp.conf.xml中的default-tts-profile与default-ars-profile的value一致(有些文档的分析中称mrcp_profiles中的xml文件名也必须和这两者一致,实际上是非必须的)。
Attenion: unimrcpserver 和 freeswitch 部署在同一个网段很重要,最好部署测试的时候在同一台物理机器上进行
3.配置IVR与脚本。
在/usr/local/freeswitch/conf/dialplan/default.xml里新增如下配置:
1 |
|
在/usr/local/freeswitch/scripts目录下新增names.lua脚本:
1 |
|
我们需要在/usr/local/freeswitch/grammar目录新增hello.gram语法文件,可以为空语法文件须满足语音识别语法规范1.0标准(简称 SRGS1.0),该语法文件 ASR 引擎在进行识别时可以使用。
1 |
|
注:lua脚本中,”play_and_detect_speech” 调用了 ASR 服务,”speak” 调用了 TTS 服务。配置启动中遇到问题。
验证
下载测试工具:Adore SIP Client
在App Store(其他手机系统请到对应应用市场)中搜索“Adore SIP Client”,并下载。
其中SIP IP是FreeSWITCH服务开启的主机IP与port(默认为5060),USER NAME如上所述可选1000-1019,PASSWORD默认为1234。点击”Login”(请确保手机连接的网络与FreeSWITCH在同一个子网内),并拨打5001进行语言测试验证(如果您是从第一步跳转过来的,请拨打5000)。
其他相关资料
FreeSWITCH主页:https://freeswitch.com/
Unimrcp主页:http://www.unimrcp.org/
Apache APR:https://apr.apache.org/
讯飞SDK包导入方式:https://doc.xfyun.cn/msc_linux/SDK%E5%8C%85%E5%AF%BC%E5%85%A5.html