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

FunASR:语音识别集成工具箱

       之前的工作主要是计算机视觉方向,大模型盛行下开始接触大语言模型和多模态模型,但是一直也没有机会接触语音识别方向的算法,比较好奇, 前两天刷到一个科普小视频提到FunASR这个开源工具,今天介绍一个语音识别领域的开源工具-FunASR。

GitHub

一、简介

       FunASR 是阿里巴巴达摩院开源的一款轻量级语音识别工具包,旨在为开发者提供高效、易用的语音处理解决方案。它集成了多种先进的语音识别技术和模型,支持语音识别(ASR)、语音端点检测(VAD)、标点恢复、语言模型、说话人验证、说话人分离和多人对话语音识别等功能;

二、功能实现

2.1 环境安装

2.1.1 依赖环境

# 依赖环境
python>=3.8
torch>=1.13
torchaudio

2.1.2 pip安装

pip3 install -U funasr
pip3 install -U modelscope huggingface huggingface_hub

2.2 功能实现

2.2.1 语音识别

  • 定义:将语音信号转换为文本的过程。
  • 目标:将人类语言的音频输入转化为可读的文本输出。
  • 应用场景:语音助手、字幕生成、会议记录等。
2.2.1.1 基于SenseVoice模型的语音识别
# 语音识别-SenseVoice
from funasr import AutoModel
from funasr.utils.postprocess_utils import rich_transcription_postprocess

model_dir = "iic/SenseVoiceSmall"

model = AutoModel(
    model=model_dir,
    vad_model="fsmn-vad",
    vad_kwargs={"max_single_segment_time": 30000},
    device="cuda:0",
)

# en
res = model.generate(
    input="./gy.m4a",
    cache={},
    language="auto",  # "zn", "en", "yue", "ja", "ko", "nospeech"
    use_itn=True,
    batch_size_s=60,
    merge_vad=True,  #
    merge_length_s=15,
)
text = rich_transcription_postprocess(res[0]["text"])
print(text)

参数: 

  • model_dir:模型名称,或本地磁盘中的模型路径;
  • vad_model:表示开启VAD,VAD的作用是将长音频切割成短音频,此时推理耗时包括了VAD与SenseVoice总耗时,为链路耗时,如果需要单独测试SenseVoice模型耗时,可以关闭VAD模型;
  • vad_kwargs:表示VAD模型配置,max_single_segment_time: 表示vad_model最大切割音频时长, 单位是毫秒ms;
  • use_itn:输出结果中是否包含标点与逆文本正则化;
  • batch_size_s: 表示采用动态batch,batch中总音频时长,单位为秒s;
  • merge_vad:是否将 vad 模型切割的短音频碎片合成,合并后长度为merge_length_s,单位为秒s;
  • ban_emo_unk:禁用emo_unk标签,禁用后所有的句子都会被赋与情感标签;

输出结果:

2.2.1.2  基于paraformer模型的语音识别
# 语音识别-paraformer
from funasr import AutoModel
# paraformer-zh is a multi-functional asr model
# use vad, punc, spk or not as you need
model = AutoModel(model="paraformer-zh",  vad_model="fsmn-vad", punc_model="ct-punc", 
                  # spk_model="cam++"
                  )
res = model.generate(input="./gy.m4a", 
            batch_size_s=300, 
            hotword='魔搭')
print(res)

输出结果:

       输出结果包含文件名、语音识别文本以及每个文本字符在音频中的时间跨度,单位毫秒;

 

2.2.2 语音端点检测 (VAD,Voice Activity Detection

  • 定义:检测语音信号中的有效语音片段,去除静音或背景噪声。
  • 目标:确定语音开始和结束的时间点。
  • 应用场景:优化语音识别性能、降低计算资源消耗。
 2.2.2.1 基于fsmn-vad模型的语音端点检测
# 语音端点检测-fsmn-vad
from funasr import AutoModel

model = AutoModel(model="fsmn-vad")

# wav_file = f"{model.model_path}/example/vad_example.wav"
wav_file = './gy.m4a'
res = model.generate(input=wav_file)
print(res)

输出结果:

       输出结果包含文件名和连续有效语音时间跨度时间戳,单位毫秒;

2.2.3 标点恢复 

  • 定义:在语音识别生成的文本中添加正确的标点符号。
  • 目标:提高文本的可读性和语义完整性。
  • 应用场景:自动生成带标点的会议记录、实时字幕。
2.2.3.1 基于ct-punc模型的标点补全
# 标点恢复-ct-punc
from funasr import AutoModel

model = AutoModel(model="ct-punc")

res = model.generate(input="势如破竹 三国末年 晋武帝司马炎夺取魏国政权后 准备出兵攻打吴国 可当时朝廷中许多大臣都认为吴国占据着长江天险 水军非常强大 应该等到有了足够的准备后再攻打吴国 可是大将杜禹却认为现在正是消灭吴国最好的时机 不能给他喘息的机会 于是 晋武帝向自己最信任的大臣张华征求了意见 张华听了 连忙说 理应尽快攻打吴果 以免留下后患 晋武帝闻言立即下令道 好 那便封杜誉为征南大将军 即刻攻打吴国 杜豫的军队十分勇勇猛 连续攻下吴国的江陵湘江直逼吴国国都建邺 晋武帝大月准备下令让杜豫从小路向吴国国都建业进发 可有些朝臣认为 如今长江水势大涨 恐怕会影响作战 不如先收兵等冬天再战 但是杜玉坚决反对退兵 他说 现在我们的军队势如破竹 斗志阵望 取得了一个又一个的胜利 只要一鼓作气就能攻破建业 果然正如杜豫所言 没过多久便攻占了建 业灭掉了吴国 帮助晋武帝完成了统一中原的大业")
print(res)

输出结果:

2.2.4 说话人验证(声纹识别)

  • 定义:验证某段语音是否属于特定说话人。
  • 目标:确认身份。
  • 应用场景:语音解锁、身份认证。
2.2.4.1 基于CAM++模型的声纹识别
# 说话人确认-CAM++
from modelscope.pipelines import pipeline
sv_pipeline = pipeline(
    task='speaker-verification',
    model='damo/speech_campplus_sv_zh-cn_16k-common',
    model_revision='v1.0.0'
)
speaker1_a_wav = 'https://modelscope.cn/api/v1/models/damo/speech_campplus_sv_zh-cn_16k-common/repo?Revision=master&FilePath=examples/speaker1_a_cn_16k.wav'
speaker1_b_wav = 'https://modelscope.cn/api/v1/models/damo/speech_campplus_sv_zh-cn_16k-common/repo?Revision=master&FilePath=examples/speaker1_b_cn_16k.wav'
speaker2_a_wav = 'https://modelscope.cn/api/v1/models/damo/speech_campplus_sv_zh-cn_16k-common/repo?Revision=master&FilePath=examples/speaker2_a_cn_16k.wav'

# 相同说话人语音
result = sv_pipeline([speaker1_a_wav, speaker1_b_wav])
print(result)

输出结果:

       输出结果包含相似度和识别结果;

三、总结

任务名称主要目标应用场景技术特点
ASR将语音转为文本字幕生成、语音助手声学模型+语言模型
VAD检测语音活动语音信号预处理时间域或频域特征分析
标点恢复添加标点符号自动化文本生成上下文语义理解
说话人验证确认语音归属身份认证声学特征提取+相似度比较

       FunASR工具箱包含了很多处理语音数据的深度学习模型集合,这里只是简单的呈现了部分功能,先Mark住,有需要的朋友也可以做更加深入的探索。 

相关文章:

  • [数据结构]顺序表详解
  • 使用LlamaIndex查询 MongoDB 数据库,并获取 OSS (对象存储服务) 上的 PDF 文件,最终用Langchain搭建应用
  • C语言之typedef
  • voltage/temperature derate指什么?
  • NCRE全国计算机等级考试二级Java-50道选择题【带解析】
  • RepVGGBlock实现
  • 解决MySQL错误:You can‘t specify target table ‘xxx‘ for update in FROM clause
  • SpringBoot速成(16)项目部署P30
  • 【YOLOv8】损失函数
  • 11.编写前端内容|vscode链接Linux|html|css|js(C++)
  • Spring中事务的传播行为方式
  • DeepSeek掀起推理服务器新风暴,AI应用迎来变革转折点?
  • FreeSwitch的mod_translate模块详细,附带场景案例及代码示例
  • EasyExcel实现excel导入(模版上传)
  • 【pytest】编写自动化测试用例命名规范README
  • 考研操作系统------锁(仅仅作为王道哔站课程讲义作用)
  • 第二章:16.6 回归树
  • RadASM环境,win32汇编入门教程之七
  • JVM类加载过程详解:从字节码到内存的蜕变之旅
  • 基于Flask的第七次人口普查数据分析系统的设计与实现
  • 最高人民法院原副院长唐德华逝世,享年89岁
  • 商务部:中方将适时发布中美经贸磋商相关消息
  • 普京确定俄乌谈判俄方代表团名单
  • 中国科学院院士、我国航天液体火箭技术专家朱森元逝世
  • 陕西省安康市汉阴县县长陈永乐已任汉阴县委书记
  • 以军向也门3个港口的居民发布撤离令