跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 工具系统 > 数据分析 > FreeSwitch采用mrcp协议对接科大讯飞asr和tts以及对话系统

FreeSwitch采用mrcp协议对接科大讯飞asr和tts以及对话系统

时间:2024-04-19 21:15:25 来源:网络cs 作者:亙句 栏目:数据分析 阅读:

标签: 系统  对话  协议  采用 

最近由于有开发智能语音机器人的需求,需要使用语音识别(ASR)和文本语音转换(TTS)技术,老板指定使用科大讯飞的原子能力来提供这两项技术的支持。在语音侧,我们使用开源的软交换系统FreeSwitch来对接科大的接口。在与科大讯飞的技术支撑沟通后,确认ASR和TTS的对接采用mrcp协议,幸好FreeSwitch是支持这个协议的,下面就把整个对接的过程记录下。

首先我们得搞清楚这个mrcp协议的大体交互流程,主要是如下图。

mrcp一般是由客户端发起invite请求与服务器协商语音编码和mrcp通道信息,然后进行基于mrcp协议的asr信息和tts信息的交互,最后进行rtp语音流交互并返回识别信息直到挂机为止。

 FreeSwitch内部有一个mod_unimrcp的模块专门用来处理对接mrcp服务器,它的配置文件在conf/autoload_config/unimrcp.conf.xml中,主要的配置如下:

<configuration name="unimrcp.conf" description="UniMRCP Client">  <settings>    <!-- UniMRCP profile to use for TTS -->    <param name="default-tts-profile" value="kdxf-mrcp2"/>    <!-- UniMRCP profile to use for ASR -->    <param name="default-asr-profile" value="kdxf-mrcp2"/>    <!-- 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="true"/>    <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>

这其中最主要的是default-tts-profile和default-asr-profile的配置,它对应了ASR和TTS的配置文件,这个配置文件一般在conf/mrcp_profiles/下面,我们来看一下相关的配置:

<include>  <!-- 科大讯飞 Speech Server 5.0 MRCPv2 -->  <profile name="bjzk-mrcp2" version="2">    <param name="client-ip" value="172.28.105.14"/>    <param name="client-port" value="5191"/>    <param name="server-ip" value="172.28.105.13"/>    <param name="server-port" value="7010"/>    <!--param name="force-destination" value="1"/-->    <param name="sip-transport" value="udp"/>    <!--param name="ua-name" value="FreeSWITCH"/-->    <!--param name="sdp-origin" value="FreeSWITCH"/-->    <!--<param name="rtp-ext-ip" value="172.28.105.15"/>-->    <param name="rtp-ip" value="172.28.105.14"/>    <param name="rtp-port-min" value="4000"/>    <param name="rtp-port-max" value="5000"/>    <!-- enable/disable rtcp support -->    <param name="rtcp" value="1"/>    <!-- rtcp bye policies (rtcp must be enabled first)             0 - disable rtcp bye             1 - send rtcp bye at the end of session             2 - send rtcp bye also at the end of each talkspurt (input)    -->    <param name="rtcp-bye" value="2"/>    <!-- rtcp transmission interval in msec (set 0 to disable) -->    <param name="rtcp-tx-interval" value="5000"/>    <!-- period (timeout) to check for new rtcp messages in msec (set 0 to disable) -->    <param name="rtcp-rx-resolution" value="1000"/>    <!--param name="playout-delay" value="50"/-->    <!--param name="max-playout-delay" value="200"/-->    <!--param name="ptime" value="20"/-->    <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和server-port就是科大讯飞mrcp服务器的地址和端口。

在配置好后,我们就可以启动FreeSwitch进行应用了,我们可以在dialplan或者esl中调用App函数play_and_detect_speech来进行放音并识别的操作,典型的命令如下:

<extension name="play_and_detect_speech example">  <condition field="destination_number" expression="^(1888)$">    <action application="set" data="tts_engine=unimrcp"/>    <action application="set" data="tts_voice=donna"/>    <action application="play_and_detect_speech" data="say:please say yes or no. please say no or yes. please say something! detect:unimrcp {start-input-timers=false,no-input-timeout=5000,recognition-timeout=5000}builtin:grammar/boolean?language=en-US;y=1;n=2"/>     <action application="log" data="CRIT ${detect_speech_result}"/>  </condition></extension>

最终我们可以通过获取SWITCH_EVENT_DETECTED_SPEECH的事件信息得到ASR的文本。

以上是关于语音原子能力引擎的对接,至于智能机器人的对话系统,科大讯飞提供了DCM系统,它是通过http restful接口来交互的,这块比较简单,就不再赘述了。大家有什么问题的话欢迎私信沟通。

本文链接:https://www.kjpai.cn/news/2024-04-19/160490.html,文章来源:网络cs,作者:亙句,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论