配置Freeswitch(mod_unimrcp)与百度Mrcp Server实现实时语音识别(ASR)

Song • 1941 次浏览 • 0 个回复 • 2018年09月13日

前面我们已经搭建好了百度Mrcp Server服务器,接下来我们将Freeswitchunimrcp 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-profiledefault-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编写的脚本,实现了ttsasr无缝链接,并且支持了一个简单的对话交流,还没有分享出来,先占位;希望大家给星哦!

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即可看到如下识别结果:

配置Freeswitch(mod_unimrcp)与百度Mrcp Server实现实时语音识别(ASR)

四、如何拨打外网交流

使用如下代码即可,你可以通过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中文网
原文出处: https://ptorch.com/news/207.html
问题交流群 :168117787
提交评论
要回复文章请先登录注册
用户评论
  • 没有评论
Pytorch是什么?关于Pytorch! pytorch使用pytorch-kaldi实现ASR语音识别