参考:
语音识别系列︱用python进行音频解析(一)
语音识别系列︱paddlehub的开源语音识别模型测试(二)
上一篇paddlehub是一些预训练模型,paddlespeech也有,所以本篇就是更新paddlespeech里面的模型。
参考:PaddleSpeech 一键预测,快速上手Speech开发任务
PaddleSpeech 是 all-in-one 的语音算法工具箱,包含多种领先国际水平的语音算法与预训练模型。你可以从中选择各种语音处理工具以及预训练模型,支持语音识别,语音合成,声音分类,声纹识别,标点恢复,语音翻译等多种功能,PaddleSpeech Server模块可帮助用户快速在服务器上部署语音服务。
相关依赖:
gcc >= 4.8.5
paddlepaddle >= 2.3.1
python >= 3.7
linux(推荐), mac, windows
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
pip install pytest-runner
pip install paddlespeech
文档链接:语音识别
第一个语音识别的示例:
>>> from paddlespeech.cli.asr.infer import ASRExecutor
>>> asr = ASRExecutor()
>>> result = asr(audio_file="zh.wav")
>>> print(result)
我认为跑步最重要的就是给我带来了身体健康
以为安装了paddlespeech,就直接可以用了;
但是有一些案例会报错,所以,最好就是直接git github的,再调用:
git clone https://github.com/PaddlePaddle/PaddleSpeech.git
cd PaddleSpeech
参数:
input
(必须输入):用于识别的音频文件。model
:ASR 任务的模型,默认值:conformer_wenetspeech
。lang
:模型语言,默认值:zh
。sample_rate
:音频采样率,默认值:16000
。config
:ASR 任务的参数文件,若不设置则使用预训练模型中的默认配置,默认值:None
。ckpt_path
:模型参数文件,若不设置则下载预训练模型使用,默认值:None
。yes
;不需要设置额外的参数,一旦设置了该参数,说明你默认同意程序的所有请求,其中包括自动转换输入音频的采样率。默认值:False
。device
:执行预测的设备,默认值:当前系统下 paddlepaddle 的默认 device。verbose
: 如果使用,显示 logger 信息。预训练模型包括:
模型 | 语言 | 采样率 |
---|---|---|
conformer_wenetspeech | zh | 16k |
conformer_online_multicn | zh | 16k |
conformer_aishell | zh | 16k |
conformer_online_aishell | zh | 16k |
transformer_librispeech | en | 16k |
deepspeech2online_wenetspeech | zh | 16k |
deepspeech2offline_aishell | zh | 16k |
deepspeech2online_aishell | zh | 16k |
deepspeech2offline_librispeech | en | 16k |
另外官方有一个demo,是使用预训练模型的jupyter : 使用 Transformer 进行语音识别tutorial_transformer.ipynb
感觉跟以上的不同,可能后续会试一下
可以看:punctuation_restoration/README_cn.md
>>> from paddlespeech.cli.text.infer import TextExecutor
>>> text_punc = TextExecutor()
>>> result = text_punc(text="今天的天气真不错啊你下午有空吗我想约你一起去吃饭")
今天的天气真不错啊!你下午有空吗?我想约你一起去吃饭。
案例2:
import paddle
from paddlespeech.cli.text import TextExecutor
text_executor = TextExecutor()
result = text_executor(
text='今天的天气真不错啊你下午有空吗我想约你一起去吃饭',
task='punc',
model='ernie_linear_p7_wudao',
lang='zh',
config=None,
ckpt_path=None,
punc_vocab=None,
device=paddle.get_device())
print('Text Result: \n{}'.format(result))
参数:
input
(必须输入):原始文本。task
:子任务,默认值:punc
。model
:文本模型类型,默认值:ernie_linear_p7_wudao
。lang
:模型语言, 默认值:zh
。config
:文本任务的配置文件,若不设置则使用预训练模型中的默认配置,默认值:None
。ckpt_path
:模型参数文件, 若不设置则下载预训练模型使用,默认值:None
。punc_vocab
:标点恢复任务的标点词表文件,默认值:None
。device
:执行预测的设备,默认值:当前系统下 paddlepaddle 的默认 device。两个预训练模型,以下是 PaddleSpeech 提供的可以被命令行和 python API 使用的预训练模型列表:
模型 | 语言 | 标点类型数 |
---|---|---|
ernie_linear_p3_wudao | zh | 3(,。?) |
ernie_linear_p7_wudao | zh | 7(,。!?、:;) |
是把语音识别 + 标点恢复同时使用。
参考:视频字幕生成
import paddle
from paddlespeech.cli.asr import ASRExecutor
from paddlespeech.cli.text import TextExecutor
asr_executor = ASRExecutor()
text_executor = TextExecutor()
text = asr_executor(
audio_file='input.wav',
device=paddle.get_device())
result = text_executor(
text=text,
task='punc',
model='ernie_linear_p3_wudao',
device=paddle.get_device())
print('Text Result: \n{}'.format(result))
输出:
Text Result:
当我说我可以把三十年的经验变成一个准确的算法,他们说不可能。当我说我们十个人就能实现对十九个城市变电站七乘二十四小时的实时监管,他们说不可能。
不是本文重点,但是这个分类有点意思,就记录一下
识别声音:cls_tutorial.ipynb
声音分类根据用途还可以继续细分:
相较于 CV 领域的 ImageNet 数据集,谷歌在 2017 年开放了一个大规模的音频数据集 AudioSet[4],它是目前最大的用于音频分类任务的数据集。该数据集包含了 632 类的音频类别以及 2084320 条人工标记的每段 10 秒长度的声音剪辑片段(包括 527 个标签),数据总时长为 5,800 小时。
音频样本可分为 5 个主要类别:
笔者随便用同一个视频,不同的模型跑了一下:
paddlehub里面最好的是u2_conformer_wenetspeech
模型:
#u2_conformer_wenetspeech
强调他的粉质用细腻还有定妆或有的效果因为西得脸昂的水花西子那分花西子做事情是我真的很任务中国人的冬光彩妆红包们不是是机涂香粉核压了水者想打开我们包装得出以前是白色粉丝或者再走要让珍珠粉丝蜜粉还加了上瘾的感就是很丝滑的还经下了菊花山水花粉过璃花精华以及白几百点白树的植物量的成分好去上午少微好的分刚开始用的话爱下了它但是这么多鼻子都够了运输过程都不要整全部飞出来了它有个白色白色的一层不然后就把拿起来不要把那个网给我撕掉了
paddlespeech的模型,应该同时有好几个,但是不知道为什么调用起来输出都是一样的
而且deepspeech2offline_aishell
会报错AttributeError: 'BiTransformerDecoder' object has no attribute 'init_decoder'
笔者就没有细究了。
# 模型:conformer_online_multicn 输出结果:
想调它的粉质又细腻还有定妆或有的效所所以记得两岸的水花西子地粉是水花西子做事情是我真的很任中国人的中装彩妆服锅方面不其是及图香粉和压了进水暖肉下打开我们的包装走出以前是白色粉丝或者带色让是珍珠粉丝密粉还加了上脸的感觉是很丝滑的拍金上了水花山水花粉茉莉花精华以及白集白脸白素的植物量成分保是上午稍微好的垃西色本取分刚开始有的话爱成它那是水子这么多不纸的就够了运输过程都标准植部堆出来了它有个白色的白色的A层布然后就把拿起来不要把那个网给我撕掉了
paddlehub的结果:
punc_texts = model.add_puncs([text])
print(punc_texts)
>>> ['想调它的粉质,又细腻,还有定妆,或有的效所,所以记得两岸的水花西子,地粉,是水花西子,做事情是,我真的很任,中国人的,中装,彩妆,服,锅方面,不其是,及,图,香粉,和压了进水,暖肉下,打开我们的包装,走出,以前是白色粉丝,或者带色,让是珍珠粉丝,密粉,还加了上脸的,感觉,是很丝滑的,拍金,上了水花山,水花粉,茉莉花精华,以及白集,白脸,白素的植物量,成,分,保是上午稍微好的,垃西,色,本取分,刚开始有的话,爱成它,那是水子,这么多不纸的就够了,运输过程都标准,植部堆出来了,它有个白色的,白色的a层布,然后就把拿起来,不要把那个网给我撕掉了。']
paddlespeech的结果:
# 模型1:ernie_linear_p7_wudao
result = text_executor(
text=text,
task='punc',
model='ernie_linear_p7_wudao',
device=paddle.get_device())
print('Text Result: \n{}'.format(result))
>>> 想调它的粉质又细腻,还有定妆或有的效所,所以记得两岸的水花西子地粉是水花西子做事情是我真的很任中国人的中装彩妆服锅方面不其是及图香粉和压了进水暖肉下打开我们的包装,走出以前是白色粉丝或者带色让是珍珠粉丝密粉还加了,上脸的感觉是很丝滑的拍金上了水花山水花粉,茉莉花精华以及白集白脸白素的植物量成分保是上午稍微好的垃西色本取分刚开始有的话爱成它那是水子这么多不纸的就够了,运输过程都标准植部堆出来了它有个白色的白色的a层布,然后就把拿起来不要把那个网给我撕掉了。
# 模型2:
result = text_executor(
text=text,
task='punc',
model='ernie_linear_p3_wudao',
device=paddle.get_device())
print('Text Result: \n{}'.format(result))
>>> 想调它的粉质又细腻,还有定妆或有的效所,所以记得两岸的水花西子地粉是水花西子做事情是我真的很任中国人的中装彩妆服锅方面不其是及图香粉和压了进水暖肉下打开我们的包装,走出以前是白色粉丝或者带色让是珍珠粉丝密粉还加了,上脸的感觉是很丝滑的拍金上了水花山水花粉,茉莉花精华以及白集白脸白素的植物量成分保是上午稍微好的垃西色本取分刚开始有的话爱成它那是水子这么多不纸的就够了,运输过程都标准植部堆出来了它有个白色的白色的a层布,然后就把拿起来不要把那个网给我撕掉了。
从已知的预训练模型调用来看,paddlehub > paddlespeech,但是整体效果都不是特别理想。
可能:
punc_vocab
+ 重训练会更好些PaddleSpeech 一键预测,快速上手Speech开发任务