FreeSWITCH FunASR语音识别模块

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 日志系统,可通过修改日志级别控制输出详细程度。

注意事项

  1. 网络连接: 确保服务器能访问 FunASR 服务地址
  2. 音频格式: 仅支持 PCM 格式,采样率 8kHz/16kHz
  3. 许可证: 模块启动时会验证许可证,确保许可证文件正确配置
  4. 资源管理: 模块会自动管理 WebSocket 连接和音频缓存
  5. 线程安全: 多线程环境下注意状态同步

故障排除

常见问题

  1. 连接失败

    • 检查网络连接
    • 验证服务器地址配置
    • 确认防火墙设置
  2. 编译错误

    • 检查依赖库是否正确安装
    • 确认编译环境配置
    • 验证头文件路径
  3. 运行时错误

    • 检查许可证配置
    • 查看 FreeSWITCH 日志
    • 验证模块加载状态

许可证

本模块受许可证保护,使用前请确保获得合法许可。

支持与反馈

如有问题或建议,请联系开发团队。

相关推荐
没事别瞎琢磨5 小时前
七、敏感路径预检——Protected Paths
人工智能·node.js
啦啦啦_99995 小时前
4. Transformer_4_输出部分
人工智能·深度学习·transformer
用户600071819105 小时前
【翻译】构建 Claude Code 的经验:我们如何使用 Skills
人工智能
没事别瞎琢磨5 小时前
五、进程执行——spawn、超时与进程树清理
人工智能·node.js
没事别瞎琢磨5 小时前
四、命令风险分级与审批策略
人工智能·node.js
阿乔外贸日记6 小时前
埃塞俄比亚出口全流程注意事项
大数据·人工智能·智能手机·云计算·汽车
程序员cxuan6 小时前
Agents.md 是什么
人工智能·后端·程序员
人工小情绪6 小时前
Windows 安装 Codex 桌面版,并用 CC Switch 管理配置
人工智能·windows·codex·cc switch
godspeed_lucip6 小时前
LLM和Agent——专题6:Multi Agent 入门(5)
人工智能·python
网安情报局6 小时前
告别排队与高延迟:直连GPT全系列,解锁低门槛、高稳定的AI生产力
人工智能·gpt·api·ai大模型