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

许可证

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

支持与反馈

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

相关推荐
智慧地球(AI·Earth)2 小时前
给AI配一台手机+电脑?智谱AutoGLM上线!
人工智能·智能手机·电脑
Godspeed Zhao2 小时前
自动驾驶中的传感器技术46——Radar(7)
人工智能·机器学习·自动驾驶
limengshi1383922 小时前
机器学习面试:请介绍几种常用的学习率衰减方式
人工智能·学习·机器学习
AKAMAI3 小时前
Sport Network 凭借 Akamai 实现卓越成就
人工智能·云原生·云计算
周末程序猿3 小时前
机器学习|大模型为什么会出现"幻觉"?
人工智能
JoannaJuanCV3 小时前
大语言模型基石:Transformer
人工智能·语言模型·transformer
飞哥数智坊3 小时前
Qoder vs CodeBuddy,刚起步就收费,值吗?
人工智能·ai编程
强盛小灵通专卖员3 小时前
闪电科创,深度学习辅导
人工智能·sci·小论文·大论文·延毕
通街市密人有3 小时前
IDF: Iterative Dynamic Filtering Networks for Generalizable Image Denoising
人工智能·深度学习·计算机视觉