mod_funasr
基于 FunASR 的 FreeSWITCH 语音识别模块
概述
mod_funasr
是一个为 FreeSWITCH 开发的语音识别模块,集成了阿里巴巴的 FunASR(Fun Automatic Speech Recognition)语音识别服务。该模块通过 WebSocket 连接实现实时语音识别功能,支持语音转文本以及相关的语音事件处理。
模块信息
- 版本: 1.0
- 作者: pzh
- 创建时间: 2025/05/14
- 接口名称 :
funasr
目录结构
mod_funasr/
├── mod_funasr.cpp # 核心实现文件
├── funasr.conf.xml # 配置文件
├── Makefile.am # 构建配置
└── README.md # 说明文档
主要功能
🎯 语音识别接口
- 完整实现 FreeSWITCH ASR 接口标准
- 支持实时语音流识别
- 支持暂停/恢复识别功能
- 支持语法加载/卸载操作
🌐 WebSocket 连接
- 通过 WebSocket 连接 FunASR 服务端
- 支持音频数据实时传输
- 支持双向消息通信
- 自动连接管理和错误处理
🎵 音频处理
- 支持 PCM 格式音频流
- 音频块大小:1920 字节 (960*2)
- 支持 8kHz 和 16kHz 采样率
- 内置音频缓存机制
📡 事件系统
支持以下 ASR 事件类型:
asr::say_stop
- 语音停止事件asr::break_say
- 语音中断事件asr::silence_say
- 静音事件asr::detected
- 语音检测事件asr::detected_timeout
- 检测超时事件asr::stop
- 停止事件asr::digits
- 数字检测事件
配置说明
配置文件 funasr.conf.xml
xml
<configuration name="funasr.conf" description="funasr Configuration">
<settings>
<param name="url" value="wss://www.funasr.com:10096/"/>
<param name="mode" value="2pass"/>
</settings>
</configuration>
配置参数
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
url |
string | wss://www.funasr.com:10096/ |
FunASR WebSocket 服务地址 |
mode |
string | 2pass |
识别模式(支持2pass等模式) |
依赖要求
系统依赖
- FreeSWITCH 开发环境
- C++11 兼容编译器
- pthread 线程库
第三方库
- libks2: WebSocket 和 JSON 处理库
- licensecc: 许可证管理库(静态链接)
编译条件
- 必须满足
HAVE_KS
编译条件 - 需要 libks 库支持
编译安装
1. 准备环境
确保已安装所需依赖库:
bash
# 安装 libks 开发库
# 安装 licensecc 库
2. 编译选项
makefile
# 编译标志
CPPFLAGS: -O2 -fdata-sections -ffunction-sections
LDFLAGS: -Wl,--gc-sections -Wl,--strip-all -lpthread -lks2
# 包含路径
/usr/src/libks/src/include
/usr/src/licensecc/install/include
3. 编译安装
bash
# 在 FreeSWITCH 源码目录中
make mod_funasr
make install
使用方法
1. 模块加载
在 FreeSWITCH 配置中添加:
xml
<load module="mod_funasr"/>
2. 接口调用
在拨号计划中使用
xml
<action application="detect_speech" data="funasr default default"/>
<action application="playback" data="prompt.wav"/>
在脚本中使用
javascript
// JavaScript 示例
session.execute("detect_speech", "funasr");
session.streamFile("prompt.wav");
3. ASR 接口方法
方法名 | 功能描述 |
---|---|
asr_open |
打开 ASR 会话 |
asr_close |
关闭 ASR 会话 |
asr_feed |
输入音频数据 |
asr_pause |
暂停识别 |
asr_resume |
恢复识别 |
asr_start_input_timers |
启动输入定时器 |
WebSocket 请求格式
启动请求
json
{
"mode": "2pass",
"chunk_size": [5, 10, 5],
"chunk_interval": 10,
"wav_name": "asr",
"wav_format": "pcm",
"itn": true,
"is_speaking": true
}
停止请求
json
{
"is_speaking": false
}
技术特性
多线程架构
- 主线程处理 FreeSWITCH 接口调用
- 独立线程处理 WebSocket 消息接收
- 线程安全的状态管理
状态管理
使用位标志管理模块状态:
FLAG_PAUSE
: 暂停标志FLAG_CONTINUE_SAY
: 继续播放标志FLAG_CONTINUE_BREAK_SAY
: 继续中断播放标志FLAG_FIRE_BREAK_SAY
: 触发中断播放标志FLAG_CONTINUE_SILENCE_SAY
: 继续静音播放标志
许可证管理
集成 licensecc 许可证管理系统,确保模块合法使用。
日志调试
模块提供详细的日志输出,包括:
- 连接状态信息
- 音频数据传输状态
- 识别结果信息
- 错误和异常信息
使用 FreeSWITCH 日志系统,可通过修改日志级别控制输出详细程度。
注意事项
- 网络连接: 确保服务器能访问 FunASR 服务地址
- 音频格式: 仅支持 PCM 格式,采样率 8kHz/16kHz
- 许可证: 模块启动时会验证许可证,确保许可证文件正确配置
- 资源管理: 模块会自动管理 WebSocket 连接和音频缓存
- 线程安全: 多线程环境下注意状态同步
故障排除
常见问题
-
连接失败
- 检查网络连接
- 验证服务器地址配置
- 确认防火墙设置
-
编译错误
- 检查依赖库是否正确安装
- 确认编译环境配置
- 验证头文件路径
-
运行时错误
- 检查许可证配置
- 查看 FreeSWITCH 日志
- 验证模块加载状态
许可证
本模块受许可证保护,使用前请确保获得合法许可。
支持与反馈
如有问题或建议,请联系开发团队。