Freeswitch MRCP中间件- 阿里云TTS、ASR对接

    最近用业余时间完成了MRCP中间件与阿里云TTS、ASR的对接,对MRCP中间件不熟悉的可以参考之前的一篇文章

https://blog.csdn.net/yugan7061/article/details/88953593 介绍了MRCP中间件的JAVA实现。第一个选择对接阿里的TTS、ASR原因是最早接触的也是阿里,还有文档比较详细,所以先准备用阿里做一个标准。


TTS对接

    TTS的对接分为两种方式,因为阿里的TTS只能通过sdk的方式来调用,没有公网URL的方式调用。如果有URL的方式交换机是可以直接调用的。

   1、URL调用方式,这种方式不需要通过MRCP中间件中转,直接交换机调用URL的方式,这种实现方式需要调用阿里的TTS SDK 做一个HTTP 代理,由于阿里提供的SDK 是生成语音文件的方式,在文件写入的时候直接写到HTTP流中即可;这样通过HTTP传文本就能够获取合成的TTS语音流,在交换机中做一定的缓存,就能减少调用;

  2、通过mrcp的方式,这种方式还是先生成语音文件,然后将语音文件转化为RTP流,然后通过MRCP消息控制,实现TTS的播放,为什么要先生成语音文件,主要还是因为JMF的文件获取方式还是文件流,实时流无法实现;

这两种方式的实现比较,个人感觉第一种更优,因为交互更少,逻辑更简单,而且交互响应更快,不用等所有流结束,但是需要一个代理服务;第二种方式就是标准的MRCP对接简单,标准对于不支持直接访问url来播音的交换机是可以直接用的。


ASR对接

       阿里提供的ASR接口主要有两种方式,一种是一句话识别,一种是实时语音流识别,第一种方式需要根据语音文件来识别,这种需要把每次MRCP交互的语音流保存成文件,然后调用识别接口,这个在MRCP中间件中有一个问题,就是一次交互你可能无法判断是不是语音流结束,所以这种方式不适合MRCP对接;第二种实时语音流识别,是根据发送的实时流,不停的返回结果,比较符合MRCP的交互模式,所以采用了第二种,两种方式的云端计费方式也不一样,第一种是按次计费,第二种是按时间计费,总体感觉两种成本是差不多的。

     通过实时流对接我们需要将接收到RTP流转化车PCM流发送给阿里ASR服务端,然后将收到的结果转化为MRCP消息返回给交换机,目前做到的就是直文翻译,对于IVR应用,有时候还需要支持语音识别语法,如SRGS,这个目前还是没有实现的。


做了一个简单的IVR交互流程,从实时性和识别效果来说,基本上和我们之前对接nuance差不多,对于一般性的企业应用应该具备商用的标准。

 

你可能感兴趣的:(软交换)