☰
FreeSWITCH FunASR语音识别模块
2026/9/30 1:49:18 网站建设 项目流程

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

<configurationname="funasr.conf"description="funasr Configuration"><settings><paramname="url"value="wss://www.funasr.com:10096/"/><paramname="mode"value="2pass"/></settings></configuration>

配置参数

参数类型默认值说明
urlstringwss://www.funasr.com:10096/FunASR WebSocket 服务地址
modestring2pass识别模式(支持2pass等模式)

依赖要求

系统依赖

  • FreeSWITCH 开发环境
  • C++11 兼容编译器
  • pthread 线程库

第三方库

  • libks2: WebSocket 和 JSON 处理库
  • licensecc: 许可证管理库(静态链接)

编译条件

  • 必须满足HAVE_KS编译条件
  • 需要 libks 库支持

编译安装

1. 准备环境

确保已安装所需依赖库:

# 安装 libks 开发库# 安装 licensecc 库

2. 编译选项

# 编译标志 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. 编译安装

# 在 FreeSWITCH 源码目录中makemod_funasrmakeinstall

使用方法

1. 模块加载

在 FreeSWITCH 配置中添加:

<loadmodule="mod_funasr"/>

2. 接口调用

在拨号计划中使用
<actionapplication="detect_speech"data="funasr default default"/><actionapplication="playback"data="prompt.wav"/>
在脚本中使用
// 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 请求格式

启动请求

{"mode":"2pass","chunk_size":[5,10,5],"chunk_interval":10,"wav_name":"asr","wav_format":"pcm","itn":true,"is_speaking":true}

停止请求

{"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 外呼的链路和落地要点讲清楚了。这个开源模块的完整源码我已开源,可以在下面的仓库获取:

  • GitHub:https://github.com/pzhu1015/sales
  • Gitee(国内访问更快):https://gitee.com/pzhu1015/sales

如果你正在做或打算做智能外呼 / 呼叫中心,除了这个模块,还有 FreeSWITCH 部署、ASR/TTS 对接、Kamailio 负载、录音上云等相关方案,欢迎到仓库交流和看更多实现。

欢迎技术交流,一起把 AI 外呼做好。


本文为技术经验分享,欢迎收藏转发。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询