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

许可证

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

支持与反馈

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

相关推荐
冰西瓜6009 小时前
从项目入手机器学习——鸢尾花分类
人工智能·机器学习·分类·数据挖掘
爱思德学术9 小时前
中国计算机学会(CCF)推荐学术会议-C(人工智能):IJCNN 2026
人工智能·神经网络·机器学习
偶信科技9 小时前
国产极细拖曳线列阵:16mm“水下之耳”如何撬动智慧海洋新蓝海?
人工智能·科技·偶信科技·海洋设备·极细拖曳线列阵
Java后端的Ai之路10 小时前
【神经网络基础】-神经网络学习全过程(大白话版)
人工智能·深度学习·神经网络·学习
庚昀◟10 小时前
用AI来“造AI”!Nexent部署本地智能体的沉浸式体验
人工智能·ai·nlp·持续部署
喜欢吃豆10 小时前
OpenAI Realtime API 深度技术架构与实现指南——如何实现AI实时通话
人工智能·语言模型·架构·大模型
数据分析能量站10 小时前
AI如何重塑个人生产力、组织架构和经济模式
人工智能
wscats11 小时前
Markdown 编辑器技术调研
前端·人工智能·markdown
AI科技星11 小时前
张祥前统一场论宇宙大统一方程的求导验证
服务器·人工智能·科技·线性代数·算法·生活
GIS数据转换器11 小时前
基于知识图谱的个性化旅游规划平台
人工智能·3d·无人机·知识图谱·旅游