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

许可证

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

支持与反馈

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

相关推荐
旗讯数字18 小时前
旗讯OCR表格识别精准还原复杂表格,识别还原准确率95%+,还能结构化
人工智能·ocr
用户51914958484518 小时前
HTB Eureka靶机渗透实战 - Spring Boot堆转储与Bash算术注入漏洞利用
人工智能·aigc
mooooon L18 小时前
DAY 41 简单CNN-2025.10.5
人工智能·神经网络·cnn
Microvision维视智造18 小时前
智启未来·匠筑新篇:维视智造与西安工商学院共绘智能制造人才培养新蓝图
人工智能·制造
高洁0118 小时前
【无标题】大模型-扩散模型(Diffusion Model)原理讲解(3)
人工智能·python·神经网络·pygame
做运维的阿瑞18 小时前
AI Agent:从“超级玩具“到“核心生产力“,智能新纪元的深度解析
人工智能
老赵聊算法、大模型备案18 小时前
2025年6-8月中国大模型备案分析报告
大数据·人工智能·安全·语言模型·aigc
明月照山海-18 小时前
机器学习周报十六
人工智能·机器学习
Java樱木18 小时前
AI 编程 Trae 如何去 AI 味(以用户管理系统为例子)
人工智能
IT_陈寒18 小时前
Vite 5.0 性能优化实战:3 个关键配置让你的构建速度提升50%
前端·人工智能·后端