广告 《大道至简,给所有人看的编程课》 🔥

《FreeSWITCH案例大全》

1.11 FreeSWITCH对接MRCP服务(以阿里云SDM为例)

wandoubaba / 2023-02-21

在阿里云的的智能语音服务中,除了提供常规的ASR、TTS等能力外,也有完整的MRCP服务(阿里名称:SDM),不但可以对接私有化的智能语音能力,同时还可以对接公有云的ASR和TTS。

1.11.1 网络规划

配置项 配置值
IP 192.168.0.10
SIP端口 7010(TCP&UDP)
MRCP端口 1544、1554(TCP)
RTP端口 10000-20000(UDP)
配置项 配置值
IP 192.168.0.60
SIP端口 5060(TCP&UDP)
RTP端口(与MRCP通信) 40000-50000(UDP)

1.11.2 部署SDM

目前阿里云并没有开放SDM服务,通过阿里云智能语音服务的客户经理可以得以《SDM(MRCP-SERVER)公共镜像使用》文档,按照文档部署,使用docker比较容易完成。

1.11.3 安装mod_unimrcp模块

详见为FreeSWITCH安装mod_unimrcp模块

1.11.4 配置mod_unimrcp

在FreeSWITCH的安装目录修改conf/autoload_configs/modules.conf.xml文件:

<!-- 添加一行 -->
<load module="mod_unimrcp"/>

在FreeSWITCH的安装目录下创建conf/mrcp_profiles/aliyun-mrcpserver.xml文件:

<include>
  <profile name="aliyun-mrcpserver" version="2">
    <param name="client-ip" value="$${local_ip_v4}"/>
    <param name="client-port" value="5060"/>
    <param name="server-ip" value="192.168.0.10"/>
    <param name="server-port" value="7010"/>
    <param name="resource-location" value=""/>
    <param name="sip-transport" value="tcp"/>
    <param name="sdp-origin" value="Freeswitch"/>
    <param name="rtp-ip" value="$${local_ip_v4}"/>
    <param name="rtp-port-min" value="40000"/>
    <param name="rtp-port-max" value="50000"/>
    <param name="speechsynth" value="speechsynthesizer"/>
    <param name="speechrecog" value="speechrecognizer"/>
    <param name="codecs" value="PCMU PCMA L16/96/8000"/>
  </profile>
</include>

创建或修改conf/autoload_configs/unimrcp.conf.xml文件:

<configuration name="unimrcp.conf" description="UniMRCP Client">
  <settings>
    <!-- UniMRCP profile to use for TTS -->
    <!-- value对应aliyun-mrcpserver.xml中profile的name -->
    <param name="default-tts-profile" value="aliyun-mrcpserver"/>
    <!-- UniMRCP profile to use for ASR -->
    <!-- value对应aliyun-mrcpserver.xml中profile的name -->
    <param name="default-asr-profile" value="aliyun-mrcpserver"/>
    <!-- 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>

grammar目录下创建alimrcp.gram文件:

#JSGF V1.0;
/** JSGF Grammar for example */
grammar example;
public <results> = [];

修改unimrcp配置后需要重启FreeSWITCH服务。

1.11.5 通过dialplan测试

在FreeSWITCH安装目录里创建conf/dialplan/default/mrcp.xml文件:

<include>
  <!-- 一个简单实现echo的脚本,用于测试lua模块是否好用 -->
  <extension name="to_asr">
    <condition field="destination_number" expression="^(001)$">
      <action application="detect_speech" data="unimrcp:aliyun-mrcpserver alimrcp default"/>
      <action application="echo"/>
    </condition>
  </extension>
</include>

在fs_cli中执行reloadxml,然后盯着控制台,用分机呼叫001,接通后说一句话,应该会在控制台看到识别结果,类似:

<?xml version="1.0" encoding="utf-8"?>
<result>
  <interpretation grammar="session:default" confidence="1">
    <instance>
      <result>中午吃什么?</result>
      <beginTime>730</beginTime>
      <endTime>2220</endTime>
      <taskId>511ba061b8a54d7b93e0f5675534febd</taskId>
      <waveformUri>5d27104393eb4dbe-1.wav</waveformUri>
    </instance>
    <input mode="speech">中午吃什么?</input>
  </interpretation>
</result>

恭喜,到这里,你的FreeSWITCH已经可以“听”和“说”了。



本书版权所有 © 杜金房及各位贡献者 2016-2023,仅供在线阅读,谢绝一切形式转载。 本书还在写作中,持续更新。 如果你也想写上几句,欢迎加入我们。 | 返回首页 |