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

前面我们已经搭建好了百度Mrcp Server服务器,接下来我们将Freeswitchunimrcp server两者连接起来,配置百度unimrcp server的文章大家去这里看一下:搭建百度Mrcp Server与Freeswitch的mod_unimrcp对接实现智能客服

一、配置freeswitch的mod_unimrcp模块:

1、安装mod_unimrcp模块

  1.  
    cd /项目源码地址/frerswitch
  2.  
    vim modules.conf
  3.  
     
  4.  
    # 取消掉asr_tts/mod_unimrcp的注释
  5.  
    asr_tts/mod_unimrcp
  6.  
     
  7.  
    # 安装mod_unimrcp模块
  8.  
    make mod_unimrcp-install
  9.  
     
  10.  
    # 编辑/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml,添加或者去掉注释mod_unimrcp,让模块启动默认加载
  11.  
    vim /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
  12.  
     
  13.  
    <load module="mod_unimrcp"/>

2、设置profile文件与conf文件;

mrcp_profiles目录下新建unimrcpserver-mrcp-v2.xml配置文件:

vim /usr/local/freeswitch/conf/mrcp_profiles/unimrcpserver-mrcp-v2.xml

然后输入以下内容:

  1.  
    <include>
  2.  
    <!-- UniMRCP Server MRCPv2 -->
  3.  
    <!-- 后面我们使用该配置文件,均使用 name 作为唯一标识,而不是文件名 -->
  4.  
    <profile name="unimrcpserver-mrcp2" version="2">
  5.  
    <!-- MRCP 服务器地址和SIP端口号 -->
  6.  
    <param name="server-ip" value="192.168.16.4"/>
  7.  
    <param name="server-port" value="8060"/>
  8.  
    <param name="resource-location" value=""/>
  9.  
     
  10.  
    <!-- FreeSWITCH IP、端口以及 SIP 传输方式 -->
  11.  
    <param name="client-ip" value="192.168.16.4" />
  12.  
    <param name="client-port" value="5069"/>
  13.  
    <param name="sip-transport" value="udp"/>
  14.  
     
  15.  
    <param name="speechsynth" value="speechsynthesizer"/>
  16.  
    <param name="speechrecog" value="speechrecognizer"/>
  17.  
    <!--param name="rtp-ext-ip" value="auto"/-->
  18.  
    <param name="rtp-ip" value="192.168.16.4"/>
  19.  
    <param name="rtp-port-min" value="4000"/>
  20.  
    <param name="rtp-port-max" value="5000"/>
  21.  
    <param name="codecs" value="PCMU PCMA L16/96/8000"/>
  22.  
     
  23.  
    <!-- Add any default MRCP params for SPEAK requests here -->
  24.  
    <synthparams>
  25.  
    </synthparams>
  26.  
     
  27.  
    <!-- Add any default MRCP params for RECOGNIZE requests here -->
  28.  
    <recogparams>
  29.  
    <!--param name="start-input-timers" value="false"/-->
  30.  
    </recogparams>
  31.  
    </profile>
  32.  
    </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

  1.  
    <!-- UniMRCP profile to use for TTS -->
  2.  
    <param name="default-tts-profile" value="unimrcpserver-mrcp2"/>
  3.  
    <!-- UniMRCP profile to use for ASR -->
  4.  
    <param name="default-asr-profile" value="unimrcpserver-mrcp2"/>

三、设置拨号计划

/usr/local/freeswitch/conf/dialplan/default.xml文件中创建拨号计划:

  1.  
    <extension name="unimrcp">
  2.  
    <condition field="destination_number" expression="^5001$">
  3.  
    <action application="answer"/>
  4.  
    <action application="lua" data="baidu.lua"/>
  5.  
    </condition>
  6.  
    </extension>

/usr/local/freeswitch/scripts目录下新增baidu.lua脚本:

注意
其实楼主使用的是python编写的脚本,实现了ttsasr无缝链接,并且支持了一个简单的对话交流,还没有分享出来,先占位;希望大家给星哦!

  1.  
    session:answer()
  2.  
     
  3.  
    --freeswitch.consoleLog("INFO", "Called extension is '".. argv[1]"'\n")
  4.  
    welcome = "ivr/ivr-welcome_to_freeswitch.wav"
  5.  
    --
  6.  
    grammar = "hello"
  7.  
    no_input_timeout = 80000
  8.  
    recognition_timeout = 80000
  9.  
    --
  10.  
     
  11.  
    tryagain = 1
  12.  
    while (tryagain == 1) do
  13.  
    --
  14.  
    session:execute("play_and_detect_speech",welcome .. "detect:unimrcp {start-input-timers=false,no-input-timeout=" .. no_input_timeout .. ",recognition-timeout=" .. recognition_timeout .. "}" .. grammar)
  15.  
    xml = session:getVariable('detect_speech_result')
  16.  
    --
  17.  
    if (xml == nil) then
  18.  
    freeswitch.consoleLog("CRIT","Result is 'nil'\n")
  19.  
    tryagain = 0
  20.  
    else
  21.  
    freeswitch.consoleLog("CRIT","Result is '" .. xml .. "'\n")
  22.  
    tryagain = 0
  23.  
    end
  24.  
    end
  25.  
    --
  26.  
    -- put logic to forward call here
  27.  
    --
  28.  
    session:sleep(250)
  29.  
    session:hangup()

我们需要在/usr/local/freeswitch/grammar目录新增hello.gram语法文件,可以为空语法文件须满足语音识别语法规范1.0标准(简称 SRGS1.0),该语法文件ASR引擎在进行识别时可以使用。

  1.  
    <?xml version="1.0" encoding="utf-8" ?>
  2.  
    <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">
  3.  
     
  4.  
    </grammar>

接下来用我们的软电话注册freeswitch,然后拨打5001即可看到如下识别结果:

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

四、如何拨打外网交流

使用如下代码即可,你可以通过ESL链接:

  1.  
    originate user/1005 &lua(baidu.lua)
  2.  
     
  3.  
    # 拨打远程,需要转码和忽略前期声音
  4.  
    originate {ignore_early_media=true,absolute_codec_string=PCMA}sofia/gateway/sip线路/电话 &lua(baidu.lua)
  5.  
posted @ 2023-02-08 09:42  阿风小子  阅读(1175)  评论(0编辑  收藏  举报