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 日志
    • 验证模块加载状态

许可证

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

支持与反馈

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

相关推荐
物联网软硬件开发-轨物科技3 小时前
【轨物方案】新能源的下半场:构筑光伏场站全生命周期智慧运维新范式
大数据·人工智能·物联网
2501_936146043 小时前
【目标检测】钙钛矿晶体YOLO11-GhostDynamicConv模型改进与实现_1
人工智能·目标检测·计算机视觉
Deepoch3 小时前
Deepoc具身模型:电厂巡检机械狗的智能核心
人工智能·科技·机器狗·具身模型·deepoc·机械狗·巡检机械狗
好奇龙猫8 小时前
【人工智能学习-AI入试相关题目练习-第七次】
人工智能·学习
Mao.O10 小时前
开源项目“AI思维圆桌”的介绍和对于当前AI编程的思考
人工智能
jake don10 小时前
AI 深度学习路线
人工智能·深度学习
信创天地11 小时前
信创场景软件兼容性测试实战:适配国产软硬件生态,破解运行故障难题
人工智能·开源·dubbo·运维开发·risc-v
幻云201011 小时前
Python深度学习:从筑基到登仙
前端·javascript·vue.js·人工智能·python
无风听海11 小时前
CBOW 模型中的输出层
人工智能·机器学习
汇智信科11 小时前
智慧矿山和工业大数据解决方案“智能设备管理系统”
大数据·人工智能·工业大数据·智能矿山·汇智信科·智能设备管理系统