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 方法࿰…...
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信使 方式一(收发消息) 方式二(收发消息) 方式三(请求消息…...
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 − …...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
