前面我们已经搭建好了百度Mrcp Server
服务器,接下来我们将Freeswitch
与unimrcp server
两者连接起来,配置百度unimrcp server
的文章大家去这里看一下:搭建百度Mrcp Server与Freeswitch的mod_unimrcp对接实现智能客服
一、配置freeswitch的mod_unimrcp模块:
1、安装mod_unimrcp模块
cd /项目源码地址/frerswitch
vim modules.conf
# 取消掉asr_tts/mod_unimrcp的注释
asr_tts/mod_unimrcp
# 安装mod_unimrcp模块
make mod_unimrcp-install
# 编辑/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml,添加或者去掉注释mod_unimrcp,让模块启动默认加载
vim /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
<load module="mod_unimrcp"/>
2、设置profile文件与conf文件;
在mrcp_profiles
目录下新建unimrcpserver-mrcp-v2.xml
配置文件:
vim /usr/local/freeswitch/conf/mrcp_profiles/unimrcpserver-mrcp-v2.xml
然后输入以下内容:
<include>
<!-- UniMRCP Server MRCPv2 -->
<!-- 后面我们使用该配置文件,均使用 name 作为唯一标识,而不是文件名 -->
<profile name="unimrcpserver-mrcp2" version="2">
<!-- MRCP 服务器地址和SIP端口号 -->
<param name="server-ip" value="192.168.16.4"/>
<param name="server-port" value="8060"/>
<param name="resource-location" value=""/>
<!-- FreeSWITCH IP、端口以及 SIP 传输方式 -->
<param name="client-ip" value="192.168.16.4" />
<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.16.4"/>
<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>
注意,server-ip
为你上一篇文章你部署的搭建百度Mrcp Server与Freeswitch的mod_unimrcp对接实现智能客服的IP
地址,你可以使用ifconfig
查看内网IP地址。
接下来修改unimrcp
默认使用的ASR
驱动,可以使用vim /usr/local/freeswitch/conf/autoload_configs/unimrcp.conf.xml
编辑修改default-tts-profile
和default-asr-profile
为我们新创建的unimrcpserver-mrcp2
:
<!-- 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"/>
三、设置拨号计划
在/usr/local/freeswitch/conf/dialplan/default.xml
文件中创建拨号计划:
<extension name="unimrcp">
<condition field="destination_number" expression="^5001$">
<action application="answer"/>
<action application="lua" data="baidu.lua"/>
</condition>
</extension>
在/usr/local/freeswitch/scripts
目录下新增baidu.lua
脚本:
注意
其实楼主使用的是python
编写的脚本,实现了tts
和asr
无缝链接,并且支持了一个简单的对话交流,还没有分享出来,先占位;希望大家给星哦!
session:answer()
--freeswitch.consoleLog("INFO", "Called extension is '".. argv[1]"'\n")
welcome = "ivr/ivr-welcome_to_freeswitch.wav"
--
grammar = "hello"
no_input_timeout = 80000
recognition_timeout = 80000
--
tryagain = 1
while (tryagain == 1) do
--
session:execute("play_and_detect_speech",welcome .. "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:hangup()
我们需要在/usr/local/freeswitch/grammar
目录新增hello.gram
语法文件,可以为空语法文件须满足语音识别语法规范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">
</grammar>
接下来用我们的软电话注册freeswitch
,然后拨打5001
即可看到如下识别结果:
四、如何拨打外网交流
使用如下代码即可,你可以通过ESL
链接:
originate user/1005 &lua(baidu.lua)
# 拨打远程,需要转码和忽略前期声音
originate {ignore_early_media=true,absolute_codec_string=PCMA}sofia/gateway/sip线路/电话 &lua(baidu.lua)
原创文章,转载请注明 :配置Freeswitch(mod_unimrcp)与百度Mrcp Server实现实时语音识别(ASR) - pytorch中文网