FreeSWITCH 语音识别 阿里云ASR 2.0接口 接口实现

FreeSWITCH 语音识别 阿里云ASR2.0

随着阿里云语音识别接口升级到智能语音交互2.0版接口,特开发了一个freeswitch模块,通过在freeswitch中加载语音识别模块,将通话的话音实时对接到阿里云ASR服务器,并接收语音识别接口,最后把识别结果通过ESL输出。有问题欢迎交流。

编译:

请先下载阿里云ASR2.0版 sdk。然后再NlsSdkCpp2.0/demo目录下进行编译,否则会出现找不到库的情况。

安装

  mod_asr.so 复制到到 FreeSWITCH mod 目录。 cp mod_asr.so /usr/local/freeswitch/mod/。
  librealTimeUnity.so FreeSWITCH lib 目录,或者系统lib目录。cp librealTimeUnity.so /usr/local/freeswitch/lib/
  libopus.so FreeSWITCH lib 目录,或者系统lib目录。cp libopus.so.0 /usr/local/freeswitch/lib/
  /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml 加入 <load module="mod_asr"/>

重启FreeSWITCH,或者fs_cli 里面执行 reload mod_asr

使用

申请阿里云的Access Key ID 和 Secret ,并根据您的需求如普通话识别或者粤语方言识别等来创建一个项目,然后获得项目AppKey,设置单声道或者双声道,配置静音间隔,识别服务器路径 等参数,将参数都申请并配置好即可通过这些参数加载mod_asr模块。

fs_cli 执行 originate user/1001 ‘start_asr:o7wh40soDVt146Bp IctccQ0wlpdVHjNLfwqFX4uQqqR1t LTAI4FhfQehv8tsiBRHUwoZ aleg 800 wss://nls-gateway.cn-shanghai.aliyuncs.com/ws/v1,park’ inline,分机接起来开始说话,就可以看到识别结果输出了。 输出结果的日志等级是 notify console loglevel 5
dialplan中使用 测试的时候如果不执行其他APP,park超时会自动挂断,可以加入修改park超时时间。

开发

fs_cli 测试方式 ,执行 /event custom asr 订阅事件。
识别结果会通过esl输出(需要订阅 custom asr 事件)(阿里云返回的原始json数据)例子如下:

Event-Subclass: asr
Event-Name: CUSTOM
Core-UUID: b3d2bbb5-3b51-404e-b3f1-f1756d16f611
FreeSWITCH-Hostname: izm5e4vks3kjsyngl2iz9iz
FreeSWITCH-Switchname: izm5e4vks3kjsyngl2iz9iz
FreeSWITCH-IPv4: 172.31.64.60
FreeSWITCH-IPv6: %3A%3A1
Event-Date-Local: 2020-02-03%2014%3A52%3A56
Event-Date-GMT: Mon,%2003%20Feb%202020%2006%3A52%3A56%20GMT
Event-Date-Timestamp: 1580712776404160
Event-Calling-File: mod_asr.cpp
Event-Calling-Function: onSentenceEnd
Event-Calling-Line-Number: 268
Event-Sequence: 1182
Result: %
ASR-Response: %7B%22header%22%3A%7B%22namespace%22%3A%22SpeechTranscriber%22,%22name%22%3A%22SentenceEnd%22,%22status%22%3A20000000,%22message_id%22%3A%222ab7f171487845e79dd126e63402bc27%22,%22task_id%22%3A%2275948cecf49c42ee851d8ac8a7098e96%22,%22status_text%22%3A%22Gateway%3ASUCCESS%3ASuccess.%22%7D,%22payload%22%3A%7B%22index%22%3A2,%22time%22%3A8000,%22begin_time%22%3A6370,%22result%22%3A%22%
Channel: sofia/internal/1001%40223.104.236.17%3A9762
UUID: a78d4423-f937-497c-a0f4-bef1295aaecd
Answered: true
ASRLeg: aleg

ASR-Response:asr返回结果。
Channel:当前通道。主要使用这2个通道变量。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Java应用程序与FreeSWITCH集成,您可以使用FreeSWITCH提供的ESL(Event Socket Library)库。ESL是一种通过TCP/IP套接字与FreeSWITCH交互的库,它使您能够发送命令和接收事件。您可以使用Java Socket编程API与ESL进行通信。 以下是一个简单的Java代码示例,演示如何连接到FreeSWITCH ESLeventsocket,并发送一个命令: ```java import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; public class FreeSwitchIntegration { public static void main(String[] args) throws UnknownHostException, IOException { // 创建一个Socket连接 Socket socket = new Socket("localhost", 8021); // 发送authenticate命令进行鉴权 String authString = "auth ClueCon\n\n"; socket.getOutputStream().write(authString.getBytes()); // 读取响应 byte[] response = new byte[1024]; socket.getInputStream().read(response); // 发送一个show命令 String commandString = "api show channels\n\n"; socket.getOutputStream().write(commandString.getBytes()); // 读取响应 response = new byte[1024]; socket.getInputStream().read(response); System.out.println(new String(response)); // 关闭Socket连接 socket.close(); } } ``` 在这个例子中,我们首先创建一个Socket连接到FreeSWITCH的ESL端口(默认为8021)。然后我们发送一个authenticate命令进行鉴权。在获得响应后,我们发送一个show命令并读取响应。最后,我们关闭Socket连接。 您可以使用类似的方法与FreeSWITCH进行交互,发送命令并处理事件。请注意,此代码示例仅用于演示目的,实际情况下您需要进行更多的错误处理和异常处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值