news 2026/7/18 21:09:12

【学习心得】基于FunASR推理的SenseVoiceSmall模型来实现语音识别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【学习心得】基于FunASR推理的SenseVoiceSmall模型来实现语音识别

一、介绍一下SenseVoiceSmall

1、什么是SenseVoiceSmall

SenseVoice是多语言音频理解模型,支持语音识别、语种识别、语音情感识别、声学事件检测、逆文本正则化等能力,采用工业级数十万小时的标注音频进行模型训练,保证了模型的通用识别效果。模型可以被应用于中文、粤语、英语、日语、韩语音频识别,并输出带有情感和事件的富文本转写结果。

2、怎么下载模型权重

SenseVoice 魔搭社区https://www.modelscope.cn/models/iic/SenseVoiceSmall/summary

pip install modelscope modelscope download --model iic/SenseVoiceSmall --local_dir ./SenseVoiceSmall

二、介绍一下FunASR推理框架

1、什么是FunASR

FunASR 是由阿里巴巴达摩院推出的一个开源端到端语音识别工具包,致力于在学术研究与工业应用之间架起桥梁。它支持语音识别(ASR)、语音活动检测(VAD)、标点恢复、语言模型、说话人验证、说话人分离、多说话人语音识别等多种功能,并提供丰富的预训练模型和便捷的部署方式,非常适合研究者和开发者使用。

2、使用音频文件来进行语音识别

# 导入FunASR的自动模型类 from funasr import AutoModel # 导入后处理工具,用于美化转写结果 from funasr.utils.postprocess_utils import rich_transcription_postprocess # 指定预训练模型路径 model_dir = "/root/workspace/models/SenseVoiceSamll" # 初始化AutoModel实例,加载SenseVoice模型及相关配置 model = AutoModel( model=model_dir, # 模型路径 trust_remote_code=True, # 允许加载远程代码 remote_code="/root/workspace/SenseVoice/model.py", # 远程模型定义文件 vad_model="fsmn-vad", # 使用FSMN-VAD进行语音活动检测 vad_kwargs={"max_single_segment_time": 30000}, # VAD最大分段时长30秒 device="cuda:0", # 使用第一块GPU ) # 对指定音频文件进行语音识别(示例为中文音频) res = model.generate( input=f"{model.model_path}/example/zh.mp3", # 输入音频文件路径 cache={}, # 初始缓存为空 language="auto", # 自动检测语言,也可手动指定"zh","en","yue","ja","ko","nospeech" use_itn=True, # 启用逆文本规范化(ITN) batch_size_s=60, # 每批处理60秒音频 merge_vad=True, # 合并VAD分段结果 merge_length_s=15, # 合并后每段最长15秒 ) # 使用rich_transcription_postprocess美化转写文本 text = rich_transcription_postprocess(res[0]["text"]) # 打印最终转写结果 print(text)

3、使用麦克风收音实时语音识别

你要先安装souddevice库

pip install sounddevice

如果你在Linux系统下,sounddevice 依赖系统级的 PortAudio 动态库( libportaudio.so )可以执行下面的代码来解决:

# 解决方法一:使用 Conda 安装 PortAudio: conda install -c conda-forge portaudio # 解决方法二:使用系统包管理器安装 sudo apt-get update && sudo apt-get install -y portaudio19-dev libportaudio2 # 最后重新安装一下 Python 包 pip install -U sounddevice

然后下面我给出了一个示例代码:

# 导入音频输入库 import sounddevice as sd # 导入数值计算库 import numpy as np # 导入深度学习框架 import torch # 从 funasr 库导入自动语音识别模型 from funasr import AutoModel # 初始化 SenseVoice 模型,指定模型路径、VAD 模型及参数,并启用 CUDA model = AutoModel( model="/root/workspace/models/SenseVoiceSamll", # 模型权重路径 trust_remote_code=True, # 允许加载远程代码 remote_code="/root/workspace/SenseVoice/model.py", # 远程模型定义文件 vad_model="fsmn-vad", # 语音活动检测模型 vad_kwargs={"max_single_segment_time": 30000}, # VAD 单段最大时长 30 秒 device="cuda:0", # 使用第一块 GPU ) # 初始化缓存字典,用于模型推理时保存中间状态 state = {} # 定义采样率 16 kHz sr = 16000 # 定义每次处理的块时长为 2 秒 block_s = 2 # 计算每块对应的采样点数 block_size = sr * block_s # 定义音频输入回调函数,每次采集到一块数据时自动调用 def callback(indata, frames, time_info, status): # 提取单声道音频数据并复制一份,避免只读问题 audio = indata[:, 0].copy() # 将 numpy 数组转换为 PyTorch 张量,并转为 float32 类型 t = torch.from_numpy(audio).float() # 使用模型进行语音识别推理 res = model.generate( input=[t], # 输入音频张量 cache=state, # 传入缓存状态 language="auto", # 自动检测语言 use_itn=True, # 启用文本正则化 batch_size_s=block_s, # 每批处理时长 merge_vad=True, # 合并 VAD 分段 merge_length_s=5, # 合并最大长度 5 秒 ) # 提取识别结果中的文本 text = res[0]["text"] # 打印识别到的文本 print(text) # 创建音频输入流,指定采样率、通道数、数据类型、块大小及回调函数 with sd.InputStream(samplerate=sr, channels=1, dtype="float32", blocksize=block_size, callback=callback): # 让程序持续运行 60 秒,期间持续监听麦克风输入 sd.sleep(60_000)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 9:32:53

17、RAID、LVM与设备模块管理全解析

RAID、LVM与设备模块管理全解析 1. LVM 概述 LVM(Logical Volume Manager)即逻辑卷管理器,它允许将不同的硬盘组合成一个逻辑存储池,为系统提供更灵活的存储管理。在 LVM 结构中,存在物理卷(Physical Volumes)、逻辑组(Logical Groups,也叫卷组 Volume Groups)和逻…

作者头像 李华
网站建设 2026/7/18 1:14:45

TweakPNG终极使用指南:快速掌握PNG元数据编辑的完整教程

TweakPNG终极使用指南:快速掌握PNG元数据编辑的完整教程 【免费下载链接】tweakpng A low-level PNG image file manipulation utility for Windows 项目地址: https://gitcode.com/gh_mirrors/tw/tweakpng PNG文件就像数字世界的DNA,每个文件都包…

作者头像 李华
网站建设 2026/7/18 9:42:47

15、Kubernetes网络通信全解析

Kubernetes网络通信全解析 1. Pod间通信 1.1 同一节点内的Pod通信 在Kubernetes中,Pod的IP地址可被其他Pod访问,无论它们位于哪个节点,这满足了第二个要求。同一节点内的Pod间通信默认通过网桥进行。假设存在两个拥有各自网络命名空间的Pod,当Pod 1要与Pod 2通信时,数据…

作者头像 李华
网站建设 2026/7/17 0:48:53

26、在 AWS 上部署 Kubernetes:网络与实例配置指南

在 AWS 上部署 Kubernetes:网络与实例配置指南 1. 公有云的优势与 AWS 组件概述 公有云以其简单、快速的特点,展现出了极高的灵活性和便利性,无论是短期使用还是长期部署,都能满足不同的需求。AWS 提供了一系列用于配置网络和存储的组件,深入了解这些组件,有助于我们理…

作者头像 李华
网站建设 2026/7/18 16:27:13

30、在GCP和Azure上使用Kubernetes的指南

在GCP和Azure上使用Kubernetes的指南 1. GKE多区域集群 GKE支持多区域集群,允许在同一区域的多个区域中启动Kubernetes节点。之前的示例中,Kubernetes节点仅在 asia-northeast1-a 区域配置,现在我们重新配置一个包含 asia-northeast1-a 、 asia-northeast1-b 和 as…

作者头像 李华
网站建设 2026/7/18 19:57:05

5、深入了解你的 Linux 系统

深入了解你的 Linux 系统 1. 识别硬件 当系统出现问题时,可能是硬件问题、软件问题或两者兼而有之。以 Ubuntu 笔记本无法连接 Wi-Fi 网络为例,若网络本身没问题(比如路由器未关闭),就需要找出问题所在: - 若为软件问题,可能是软件配置不当,或者未安装正确的无线软件…

作者头像 李华