【Python语音识别系列】基于FunASR实现语音识别(案例+源码)

这是我的第393篇原创文章。

一、引言

今天给大家分享阿里达摩院语音识别领域开源的大杀器FunASR项目;它支持语音识别、端点检测、标点符合预测、多说话人分离等亮点功能,在中文语音识别方面比OpenAI开源的Whisper模型更小,更准

FunASR是一个基础的端到端语音识别工具包,旨在架起语音识别学术研究和工业应用之间的桥梁。它支持工业级语音识别模型的训练和微调,方便研究人员和开发者更便捷地进行语音识别模型的研究和生产,促进语音识别生态的发展。其目标是让语音识别变得更有趣(ASR for Fun)!FunASR 提供了语音识别 (ASR)、语音活动检测 (VAD)、标点恢复、语言模型、说话人识别、说话人分段以及多说话人 ASR 等多种功能。并提供方便的脚本和教程,支持预训练模型的推理和微调。

Github仓库:
https://github.com/modelscope/FunASR

二、实现过程

2.1 准备音频素材

使用edge-tts命令将一段文字转化为语音并生成.wav语音文件:

edge-tts --voice zh-CN-YunyangNeural --text "曾经有一份真诚的爱情放在我面前,我没有珍惜,等我失去的时候我才后悔莫及,人世间最痛苦的事莫过于此。如果上天能够给我一个再来一次的机会,我会对那个女孩子说三个字:我爱你。如果非要在这份爱上加上一个期限,我希望是……一万年" --write-media speaker2.wav

结果:

speaker2,数据杂坛,20秒

语音文件加载读取:

speaker2_wav = "speaker2.wav"
waveform, sample_rate = torchaudio.load(speaker2_wav)
Audio(waveform, rate=sample_rate, autoplay=True)

2.2利用paraformer-zh-语音文字识别

代码:

model = AutoModel(model="paraformer-zh")
res = model.generate(input=speaker2_wav)
print("识别出的结果:", res[0]['text'])

model = AutoModel(model="paraformer-zh")这句代码会在线下载模型,默认路径是C:\User\quwen\.cache\modelscope\hub

模型文件如下:

结果:

2.3 利用fsmn_vad_zh来-语音结束点识别

代码:

model=AutoModel(model="fsmn-vad")
res=model.generate(input=speaker2_wav)
print(res)

model = AutoModel(model="fsmn-vad")这句代码会在线下载模型,默认路径是C:\User\quwen\.cache\modelscope\hub

模型文件如下:

2.4 利用ct-punc-对语音识别文本进行标点符号预测

代码:

model = AutoModel(model="ct-punc")
res = model.generate(input="曾 经 有 一 份 真 诚 的 爱 情 放 在 我 面 前 我 没 有 珍 惜 等 我 失 去 的 时 候 我 才 后 悔 莫 及 人 世 间 最 痛 苦 的 是 莫 过 于 此 如 果 上 天 能 够 给 我 一 个 再 来 一 次 的 机 会 我 会 对 那 个 女 孩 子 说 三 个 字 我 爱 你 如 果 非 要 在 这 份 爱 上 加 上 一 个 期 限 我 希 望 是 一 万 年")
print(res)

model = AutoModel(model="ct-punc")这句代码会在线下载模型,默认路径是C:\User\quwen\.cache\modelscope\hub

模型文件如下:

2.5 利用cam++对语音中说话人身份识别

代码:

model = AutoModel(model="cam++")
res = model.generate(input=speaker2_wav)
print(res)

model = AutoModel(model="cam++")这句代码会在线下载模型,默认路径是C:\User\quwen\.cache\modelscope\hub

模型文件如下:

2.6 对多说话人进行语音识别

代码:

speaker1_wav = ("E:\data\\a2.wav")
waveform, sample_rate = torchaudio.load(speaker1_wav)
Audio(waveform, rate=sample_rate, autoplay=True)


funasr_model = AutoModel(model="C:\\Users\quwen\.cache\modelscope\hub\iic/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch",                        
vad_model="C:\\Users\quwen\.cache\modelscope\hub\iic/speech_fsmn_vad_zh-cn-16k-common-pytorch",                        
punc_model="C:\\Users\quwen\.cache\modelscope\hub\iic\punc_ct-transformer_cn-en-common-vocab471067-large",                        
spk_model="C:\\Users\quwen\.cache\modelscope\hub\iic/speech_campplus_sv_zh-cn_16k-common", )


res = funasr_model.generate(input=speaker1_wav, batch_size_s=300)
print(res)
print(type(res))


conv = ''
sentence_info = res[0]['sentence_info']
for sentence in sentence_info:    
    conv = conv + f"spk {sentence['spk']} : {sentence['text']}\n"
print(conv)

结果:

2.7 热词功能

代码:

speaker1_wav = ("E:\data\\a2.wav")
waveform, sample_rate = torchaudio.load(speaker1_wav)
Audio(waveform, rate=sample_rate, autoplay=True)
funasr_model = AutoModel(model="C:\\Users\quwen\.cache\modelscope\hub\iic/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch",                        
vad_model="C:\\Users\quwen\.cache\modelscope\hub\iic/speech_fsmn_vad_zh-cn-16k-common-pytorch",                        
punc_model="C:\\Users\quwen\.cache\modelscope\hub\iic\punc_ct-transformer_cn-en-common-vocab471067-large",                        
spk_model="C:\\Users\quwen\.cache\modelscope\hub\iic/speech_campplus_sv_zh-cn_16k-common", )
res = funasr_model.generate(input=speaker1_wav, 
                            batch_size_s=300,
                            hotword='苏珊银行')
print(res)
print(type(res))
conv = ''
sentence_info = res[0]['sentence_info']
for sentence in sentence_info:    
    conv = conv + f"spk {sentence['spk']} : {sentence['text']}\n"
print(conv)

结果:

作者简介: 读研期间发表6篇SCI数据算法相关论文,目前在某研究院从事数据算法相关研究工作,结合自身科研实践经历持续分享关于Python、数据分析、特征工程、机器学习、深度学习、人工智能系列基础知识与案例。关注gzh:数据杂坛,获取数据和源码学习更多内容。

原文链接:

【Python语音识别系列】基于FunASR框架实现语音识别(案例+源码)

相关文章

Python数据分析(四)

现在上手一个数据分析实际案例: 从数据结果集本身入手,使用通用性检查分析数据+业务规则校验是否有异常,最终形成分析报告,若有问题及时做出人工干预 背景:数据最终到应用层面,会经过很多前面很多节点处理...

今天我学习了Python数据统计分析教程,把笔记分享出来

一、环境搭建1. 安装 Python :从官网下载适合你操作系统的版本并安装,建议勾选 “Add Python to PATH” 选项。2. 安装相关库 :常用的有 NumPy(数值计算)、Panda...

Python数据分析(三)

续接Python分析,本篇主要是关于python中一些高阶函数的应用以下是针对你提到的几个高级知识点(数据合并、apply、iterrows、agg、map)的详细解释和案例,帮助你系统学习和理解这些...

Python 数据分析必学的 10 个核心库:从基础操作到高阶建模全攻略

在Python数据分析领域,掌握核心工具库能让你效率倍增。本文精选10个高实用性库,结合代码示例详解从数据处理到机器学习的全流程操作,助你快速进阶数据分析高手。一、Pandas:结构化数据处理的全能选...

工业数据分析工具的力量:用Python释放数据的潜能

阅读文章前辛苦您点下“关注”,方便讨论和分享,为了回馈您的支持,我将每日更新优质内容。如需转载请附上本文源链接!工业数据是现代制造业和工程领域的重要资源。从设备的实时运行指标到生产线的整体效率数据,工...

Python数据分析实战:以数据分析岗为例,探索行业与薪资关联性

金三银四,数据分析师成为众多行业竞相追逐的热门岗位,想知道如何在这个领域精准发力、脱颖而出吗?今天,我将以 BOSS 直聘上的数据为样本,借助 Python 强大的数据分析能力,深度剖析各个行业与薪资...