当前位置: 首页 > news >正文

FunASR搭建语音识别服务和VAD检测

搭建ASR语音识别服务(含VAD检测)教程

在本文中,我将为大家详细介绍如何搭建一套基于FunASR的ASR(语音识别)服务,并集成VAD(语音活动检测)。该服务使用阿里达摩院的模型,并支持SSL连接、2pass模式以及语音热词处理。我们将一步步讲解如何启动服务、调整VAD参数,以及使用Python客户端请求识别。

1. 环境准备

首先,确保你的服务器已经安装好docker。

你还需要从阿里云上下载相关的语音识别模型、VAD模型、标点符号模型等。这些模型是由达摩院发布的,具体的模型目录稍后会在启动命令中给出。
官方教程:
https://github.chat.carlife.host/modelscope/FunASR/blob/main/runtime/docs/SDK_advanced_guide_online_zh.md

2. 启动ASR服务

镜像启动
通过下述命令拉取并启动FunASR软件包的docker镜像:

sudo docker pull \registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.10
mkdir -p ./funasr-runtime-resources/models
sudo docker run -p 10096:10095 -it --privileged=true \-v $PWD/funasr-runtime-resources/models:/workspace/models \registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.10

首先进入工作目录:

cd /workspace/FunASR/runtime

在启动服务时,我们有两种选择:启用SSL不启用SSL

2.1 不启用SSL

如果你不需要SSL,可以将certfile设置为0,但注意此时客户端只能通过ws协议请求,而不能使用wss。启动命令如下:

nohup bash run_server_2pass.sh \--model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-onnx \--online-model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online-onnx \--vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \--punc-dir damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx \--lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \--itn-dir thuduj12/fst_itn_zh \--certfile 0 \--keyfile ../../../ssl_key/server.key \--hotword ../../hotwords.txt > log.txt 2>&1 &
2.2 启用SSL

若希望启用SSL保护通信,可以提供SSL证书和密钥。启动命令如下:

nohup bash run_server_2pass.sh \--model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-onnx \--online-model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online-onnx \--vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \--punc-dir damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx \--lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \--itn-dir thuduj12/fst_itn_zh \--certfile ../../../ssl_key/server.crt \--keyfile ../../../ssl_key/server.key \--hotword ../../hotwords.txt > log.txt 2>&1 &

3. Python请求示例

启动服务后,可以通过Python客户端发送请求。以下是使用funasr_wss_client.py的示例代码:

如果开启了https

python funasr_wss_client.py --host "xx.xx.xx.xx" --port 10096 --mode 2pass

如果没开启https

python funasr_wss_client.py --host "xx.xx.xx.xx" --port 10096 --mode 2pass --ssl 0

这里需要确保你的客户端主机和端口设置正确,并且使用的是2pass模式。

4. 调整VAD参数

1. 查找VAD模型的配置文件

FunASR中的VAD模型为FSMN-VAD,参数配置类为VADXOptions,可以在以下路径中找到:

/workspace/FunASR/runtime/python/onnxruntime/funasr_onnx/utils/e2e_vad.py

其中,VADXOptions类定义了多个VAD参数。以下是一些常见参数的定义:

class VADXOptions:sample_rate: int = 16000detect_mode: int = VadDetectMode.kVadMutipleUtteranceDetectMode.valuesnr_mode: int = 0max_end_silence_time: int = 800max_start_silence_time: int = 3000do_start_point_detection: bool = Truedo_end_point_detection: bool = Truewindow_size_ms: int = 200sil_to_speech_time_thres: int = 150speech_to_sil_time_thres: int = 150speech_2_noise_ratio: float = 1.0do_extend: int = 1lookback_time_start_point: int = 200lookahead_time_end_point: int = 100max_single_segment_time: int = 60000

这些参数控制了VAD的静音检测、语音与噪音之间的比率等。具体参数意义如下:

  • max_single_segment_time:单段音频的最大时长,默认60000毫秒(1分钟)。
  • max_end_silence_time:检测到结束静音的最大时长,默认800毫秒。
  • max_start_silence_time:检测到开始静音的最大时长,默认3000毫秒。
  • sil_to_speech_time_thres:从静音到语音的时间阈值,默认150毫秒。
  • speech_to_sil_time_thres:从语音到静音的时间阈值,默认150毫秒。
2. 修改VAD配置

VAD模型的实际配置是从模型目录中的config.yaml文件读取的。可以在以下路径找到config.yaml文件:

/workspace/models/damo/speech_fsmn_vad_zh-cn-16k-common-onnx/config.yaml

config.yaml文件中的model_conf字段包含了VAD模型的详细配置:

model: FsmnVADStreaming
model_conf:sample_rate: 16000detect_mode: 1snr_mode: 0max_end_silence_time: 800max_start_silence_time: 3000do_start_point_detection: Truedo_end_point_detection: Truewindow_size_ms: 200sil_to_speech_time_thres: 150speech_to_sil_time_thres: 150speech_2_noise_ratio: 1.0do_extend: 1lookback_time_start_point: 200lookahead_time_end_point: 100max_single_segment_time: 60000
3. 修改参数示例

假设你想减少静音端点的检测时间,可以将max_end_silence_time的默认值从800毫秒改为600毫秒。只需编辑config.yaml文件,将以下行:

max_end_silence_time: 800

改为:

max_end_silence_time: 600

这样,你的VAD模型将在600毫秒后检测到结束静音,适用于需要更快速响应的语音识别场景。

结论

通过调整FunASR的VAD参数,你可以根据具体需求定制VAD的检测灵敏度和时长。在本教程中,我们通过修改config.yaml文件,调整了VAD的max_end_silence_time参数。希望本教程对你有所帮助,如果有任何问题,欢迎留言讨论!

相关文章:

FunASR搭建语音识别服务和VAD检测

搭建ASR语音识别服务(含VAD检测)教程 在本文中,我将为大家详细介绍如何搭建一套基于FunASR的ASR(语音识别)服务,并集成VAD(语音活动检测)。该服务使用阿里达摩院的模型,…...

设计一个支持多线程写入的并发日志记录系统:C++实战指南

设计一个支持多线程写入的并发日志记录系统:C实战指南 在现代软件开发中,日志记录是一个至关重要的功能,它帮助开发者调试、监控和维护系统。然而,在多线程环境中,日志记录系统需要处理多个线程同时写入日志的问题&am…...

使用LSTM(长短期记忆网络)模型预测股票价格的实例分析

一:LSTM与RNN的区别 LSTM(Long Short-Term Memory)是一种特殊的循环神经网络(RNN)架构。LSTM是为了解决传统RNN在处理长序列数据时遇到的梯度消失或梯度爆炸问题而设计的。 在传统的RNN中,信息通过隐藏状…...

开源的 Windows 12 网页体验版!精美的 UI 设计、丰富流畅的动画

大家周二好呀!博主今天给小伙伴们分享一款炫酷的 Windows 12 体验版,网页效果拉满,非常值得我们去尝试! 如果你对未来的Windows操作系统充满期待,那么这款开源的Windows 12 网页体验版绝对不容错过!这不仅…...

chapter14-集合——(List)——day18

目录 518-Set接口方法 518-Set接口方法...

Frida 脚本抓取 HttpURLConnection 请求和响应

引入 Java 类: 引入 okhttp3.OkHttpClient、okhttp3.OkHttpClient$Builder、okhttp3.Interceptor、okhttp3.ResponseBody 等类。 创建自定义拦截器: 通过 Java.registerClass 创建自定义拦截器 MyInterceptor。拦截器中重写 intercept 方法&#xff0…...

Java实现建造者模式和源码中的应用

Java实现建造者模式(Builder Pattern) 文章目录 Java实现建造者模式(Builder Pattern)案例:汉堡制作建造者模式的核心角色代码实现:汉堡制作 🍔内部类实现:Step 1:产品类…...

Windows安装docker

Windows有两种虚拟号技术,WLS和Hyper-V,因为我的win10是家庭版,所以只能采用WLS来安装docker。 在Windows 10家庭版中,由于默认不包含Hyper-V功能,因此容器功能也不可用。即使启用了Hyper-V,由于Docker De…...

SprinBoot+Vue校园车辆管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…...

【C语言进阶】C语言动态内存管理:深入理解malloc、calloc与realloc

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言自定义类型 🌹🌹期待您的关注 🌹🌹 ❀C语言动态内存管理 &#…...

Java+控制台 图书管理系统

Java控制台 图书管理系统 一、系统介绍二、功能展示1.用户登陆2.普通用户:图书查询、图书借阅、图书归还 、图书列表3.管理员:图书整理、图书添加、图书删除 四、其它1.其他系统实现 一、系统介绍 系统实现了普通用户:图书查询、图书借阅、图书归还 、图…...

gi清除无用缓存

使用 git pull --rebase 的确会对 Git 仓库的大小产生影响,主要是因为每次重新基于最新的代码进行 rebase,Git 会保存历史提交的变动。即使你的实际代码量不多,Git 依然需要存储所有这些历史变更记录,因此可能会导致仓库的大小逐渐…...

云PLM系统对企业影响有哪些?解析云PLM系统的作用

随着企业数字化转型的加速,云PLM产品生命周期管理系统逐渐成为企业提升竞争力、优化资源配置、加速产品上市的重要工具。云PLM系统通过云计算技术,不仅解决了传统PLM系统面临的高昂部署成本、复杂维护、数据共享效率低等问题,还为企业带来了更…...

四、查找算法

文章目录 一、查找算法介绍二、线性查找算法2.1 顺序查找2.2 二分查找(折半查找)2.3 插值查找2.4 斐波拉契(黄金分割法)查找算法 三、树表的查找3.1 二叉排序树3.1.1 引入3.1.2 基本介绍3.1.3 二叉树的遍历3.1.4 二叉树的删除 3.2…...

果蔬识别系统性能优化之路(三)

目录 前情提要遗留问题 解决方案优化查询速度优化ivf初始化的速度 下一步 前情提要 果蔬识别系统性能优化之路(二) 遗留问题 优化同步速度,目前大约30秒,不是一个生产速度 这次来解决遗留问题 通过console,发现两个…...

时序预测|基于小龙虾优化高斯过程GPR数据回归预测Matlab程序COA-GPR 多特征输入单输出 附赠基础GPR

时序预测|基于小龙虾优化高斯过程GPR数据回归预测Matlab程序COA-GPR 多特征输入单输出 附赠基础GPR 文章目录 一、基本原理二、实验结果三、核心代码四、代码获取五、总结 时序预测|基于小龙虾优化高斯过程GPR数据回归预测Matlab程序COA-GPR 多特征输入单输出 附赠基础GPR 一、…...

C#进阶-快速了解IOC控制反转及相关框架的使用

目录 一、了解IOC 1、概念 2、生命周期 二、IOC服务示例 1、定义服务接口 2、实现服务 三、扩展-CommunityToolkit.Mvvm工具包 Messenger信使 方式一(收发消息) 方式二(收发消息) 方式三(请求消息&#xf…...

C++内存布局

文章目录 C内存布局1.文字介绍2.图片介绍3.代码介绍 C内存布局 1.文字介绍 1.内核态空间 2.用户态空间 (1)栈区:存储局部变量和函数调用的相关信息,栈的特点是自动分配和释放,由操作系统管理。栈由高地址向低地址生长,通常为0x…...

【Linux 19】线程概念

文章目录 🌈 一、线程的概念⭐ 1. 线程是什么⭐ 2. 线程的优点⭐ 3. 线程的缺点⭐ 4. 线程的异常⭐ 5. 线程的用途 🌈 二、进程和线程⭐ 1. 进程和线程的区别⭐ 2. 进程的多线程共享⭐ 3. 进程和线程的关系⭐ 3. 进程和线程的关系 🌈 一、线程…...

[区间dp]添加括号

题目描述 有一个 n n n 个元素的数组 a a a。不改变序列中每个元素在序列中的位置,把它们相加,并用括号记每次加法所得的和,称为中间和。现在要添上 n − 1 n - 1 n−1 对括号,加法运算依括号顺序进行,得到 n − …...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

Java编程之桥接模式

定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...