当前位置:   article > 正文

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

freeswitch 科大讯飞

最近由于有开发智能语音机器人的需求,需要使用语音识别(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中,主要的配置如下:

  1. <configuration name="unimrcp.conf" description="UniMRCP Client">
  2. <settings>
  3. <!-- UniMRCP profile to use for TTS -->
  4. <param name="default-tts-profile" value="kdxf-mrcp2"/>
  5. <!-- UniMRCP profile to use for ASR -->
  6. <param name="default-asr-profile" value="kdxf-mrcp2"/>
  7. <!-- UniMRCP logging level to appear in freeswitch.log. Options are:
  8. EMERGENCY|ALERT|CRITICAL|ERROR|WARNING|NOTICE|INFO|DEBUG -->
  9. <param name="log-level" value="DEBUG"/>
  10. <!-- Enable events for profile creation, open, and close -->
  11. <param name="enable-profile-events" value="true"/>
  12. <param name="max-connection-count" value="100"/>
  13. <param name="offer-new-connection" value="1"/>
  14. <param name="request-timeout" value="3000"/>
  15. </settings>
  16. <profiles>
  17. <X-PRE-PROCESS cmd="include" data="../mrcp_profiles/*.xml"/>
  18. </profiles>
  19. </configuration>

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

  1. <include>
  2. <!-- 科大讯飞 Speech Server 5.0 MRCPv2 -->
  3. <profile name="bjzk-mrcp2" version="2">
  4. <param name="client-ip" value="172.28.105.14"/>
  5. <param name="client-port" value="5191"/>
  6. <param name="server-ip" value="172.28.105.13"/>
  7. <param name="server-port" value="7010"/>
  8. <!--param name="force-destination" value="1"/-->
  9. <param name="sip-transport" value="udp"/>
  10. <!--param name="ua-name" value="FreeSWITCH"/-->
  11. <!--param name="sdp-origin" value="FreeSWITCH"/-->
  12. <!--<param name="rtp-ext-ip" value="172.28.105.15"/>-->
  13. <param name="rtp-ip" value="172.28.105.14"/>
  14. <param name="rtp-port-min" value="4000"/>
  15. <param name="rtp-port-max" value="5000"/>
  16. <!-- enable/disable rtcp support -->
  17. <param name="rtcp" value="1"/>
  18. <!-- rtcp bye policies (rtcp must be enabled first)
  19. 0 - disable rtcp bye
  20. 1 - send rtcp bye at the end of session
  21. 2 - send rtcp bye also at the end of each talkspurt (input)
  22. -->
  23. <param name="rtcp-bye" value="2"/>
  24. <!-- rtcp transmission interval in msec (set 0 to disable) -->
  25. <param name="rtcp-tx-interval" value="5000"/>
  26. <!-- period (timeout) to check for new rtcp messages in msec (set 0 to disable) -->
  27. <param name="rtcp-rx-resolution" value="1000"/>
  28. <!--param name="playout-delay" value="50"/-->
  29. <!--param name="max-playout-delay" value="200"/-->
  30. <!--param name="ptime" value="20"/-->
  31. <param name="codecs" value="PCMU PCMA L16/96/8000"/>
  32. <!-- Add any default MRCP params for SPEAK requests here -->
  33. <synthparams>
  34. </synthparams>
  35. <!-- Add any default MRCP params for RECOGNIZE requests here -->
  36. <recogparams>
  37. <!--param name="start-input-timers" value="false"/-->
  38. </recogparams>
  39. </profile>
  40. </include>

这其中server-ip和server-port就是科大讯飞mrcp服务器的地址和端口。

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

  1. <extension name="play_and_detect_speech example">
  2. <condition field="destination_number" expression="^(1888)$">
  3. <action application="set" data="tts_engine=unimrcp"/>
  4. <action application="set" data="tts_voice=donna"/>
  5. <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"/>
  6. <action application="log" data="CRIT ${detect_speech_result}"/>
  7. </condition>
  8. </extension>

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/221112
推荐阅读
相关标签
  

闽ICP备14008679号