wandoubaba / 2023-02-21
在阿里云的的智能语音服务中,除了提供常规的ASR、TTS等能力外,也有完整的MRCP服务(阿里名称:SDM),不但可以对接私有化的智能语音能力,同时还可以对接公有云的ASR和TTS。
配置项 | 配置值 |
---|---|
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) |
目前阿里云并没有开放SDM服务,通过阿里云智能语音服务的客户经理可以得以《SDM(MRCP-SERVER)公共镜像使用》文档,按照文档部署,使用docker比较容易完成。
在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
文件:
.0;
#JSGF V1/** JSGF Grammar for example */
;
grammar examplepublic <results> = [];
修改unimrcp配置后需要重启FreeSWITCH服务。
在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已经可以“听”和“说”了。