- 人工智能
- 语音
- 音频
- NLP
- 媒体生成
【免费下载链接】PaddleSpeech
Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.
PaddleSpeech 的paddlespeech.cli模块提供了一套开箱即用的命令行工具,它封装了声音分类、声纹识别、语音识别、语音翻译、语音合成和文本标点恢复等语音场景的预训练模型,用户只需一行命令即可完成模型下载、加载与推理。本文以 paddlespeech/cli/README.md 为骨架,结合各任务 Executor 的源码实现,系统讲解每条命令的参数含义、底层调用链与批量运行技巧,帮助你快速把 PaddleSpeech 的模型能力接入自己的工程流程。
命令入口与注册机制
paddlespeech可执行命令通过setup.py中的console_scripts注册到 Python 环境(见 setup.py):
entry_points={ 'console_scripts': [ 'paddlespeech=paddlespeech.cli.entry:_execute', 'paddlespeech_server=paddlespeech.server.entry:server_execute', 'paddlespeech_client=paddlespeech.server.entry:client_execute', ] }也就是说,安装 PaddleSpeech 后,终端里的paddlespeech命令最终会进入 paddlespeech/cli/entry.py 的_execute()函数。该函数维护了一棵嵌套命令树,逐级匹配paddlespeech、asr、cls等子命令,找到对应的 Executor 后调用其execute(argv)方法,并根据返回值映射为进程退出码(True为 0 成功,False为 1 失败)。
所有子命令的注册与描述集中定义在 paddlespeech/cli/base_commands.py,共注册了 9 个任务:
| 子命令 | 描述 | 对应 Executor 文件 |
|---|---|---|
asr | 语音转文本推理 | paddlespeech/cli/asr/infer.py |
cls | 音频分类推理 | paddlespeech/cli/cls/infer.py |
st | 语音翻译推理 | paddlespeech/cli/st/infer.py |
text | 文本后处理(标点恢复) | paddlespeech/cli/text/infer.py |
tts | 文本转语音推理 | paddlespeech/cli/tts/infer.py |
vector | 说话人嵌入向量推理 | paddlespeech/cli/vector/infer.py |
kws | 关键词唤醒推理 | paddlespeech/cli/kws/infer.py |
ssl | 自监督预训练模型推理 | paddlespeech/cli/ssl/infer.py |
whisper | Whisper 语音转写/翻译 | paddlespeech/cli/whisper/infer.py |
每个任务 Executor 都继承自 paddlespeech/cli/executor.py 中的抽象基类BaseExecutor,统一实现_init_from_path(加载模型与配置)、preprocess(特征提取)、infer(模型前向)、postprocess(结果还原)和execute(命令行入口)五个阶段,因此所有子命令的使用方式高度一致。
查看帮助与可用模型
运行下面命令可以列出全部可用子命令及其用途:
paddlespeech help其实现位于 paddlespeech/cli/base_commands.py 的HelpCommand,会遍历命令树打印Usage: paddlespeech <command> <options>及每个命令的描述。
此外还可以查看包版本:
paddlespeech versionVersionCommand会打印当前包版本号与 git commit id(见 paddlespeech/cli/base_commands.py)。
如果想知道某个任务支持哪些预训练模型,可以使用stats子命令,它要求显式指定--task:
paddlespeech stats --task asr该命令通过 paddlespeech/cli/base_commands.py 的StatsCommand读取对应任务的预训练模型清单,并按"模型-尺寸-语码切换-多语言-语言-采样率"等格式规则排版成表格(不同任务的命名格式见 model_name_format 定义)。
声音分类(Audio Classification)
声音分类用于判断一段音频属于哪一类声音事件(如环境音、乐器、人声等)。最简用法:
paddlespeech cls --input input.wavCLSExecutor(见 paddlespeech/cli/cls/infer.py)支持的常用参数如下:
| 参数 | 默认值 | 说明 |
|---|---|---|
--input | 无 | 待分类的音频文件路径 |
--model | panns_cnn14 | 分类模型类型,从预训练模型清单中自动生成候选 |
--config | None | 自定义 yaml 配置,缺省时使用模型自带配置 |
--ckpt_path | None | 自定义模型权重文件路径 |
--label_file | None | 类别标签文件路径 |
--topk | 1 | 返回得分最高的 k 个类别 |
--device | paddle.get_device() | 推理设备(cpu/gpu 等) |
-d/--job_dump_result | False | 将批量任务结果保存到文件 |
-v/--verbose | False | 开启详细日志 |
从源码看,预处理阶段会读取配置中的sample_rate、n_fft、hop_length、n_mels等特征参数,用LogMelSpectrogram提取对数梅尔谱(paddlespeech/cli/cls/infer.py);后处理阶段则对模型输出的 logits 排序,取出 top-k 的「标签 + 得分」(paddlespeech/cli/cls/infer.py)。例如想查看得分最高的 3 个类别:
paddlespeech cls --input input.wav --topk 3声纹识别(Speaker Verification)
声纹识别用于判断两段语音是否来自同一个说话人。PaddleSpeech 提供了spk(提取说话人嵌入向量)和score(计算两段语音的相似度得分)两种任务:
# 提取说话人嵌入向量 paddlespeech vector --task spk --input input_16k.wav # 计算两段语音的相似度得分(输入为两个 wav 路径,以空格分隔) paddlespeech vector --task score --input enroll.wav test.wavVectorExecutor(见 paddlespeech/cli/vector/infer.py)的常用参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--model | ecapatdnn_voxceleb12 | 声纹模型类型 |
--task | spk | 任务类型:spk提取嵌入向量,score计算相似度 |
--input | 无 | 音频文件路径;score任务需传两个路径 |
--sample_rate | 16000 | 模型采样率(当前仅支持 16000) |
--config/--ckpt_path | None | 自定义配置与权重路径 |
--yes/-y | False | 直接接受采样率/声道转换请求,跳过交互确认 |
--device | paddle.get_device() | 推理设备 |
-d/--job_dump_result | False | 批量结果落盘 |
-v/--verbose | False | 详细日志 |
底层流程上,spk任务对音频做 fbank 特征提取并做均值归一化后,送入ecapatdnn等骨干网络得到说话人嵌入向量(paddlespeech/cli/vector/infer.py);score任务则对两段音频分别提取嵌入向量,再用paddle.nn.CosineSimilarity计算余弦相似度作为得分(paddlespeech/cli/vector/infer.py)。得分越接近 1,说明两段语音越可能来自同一说话人。
语音识别(Automatic Speech Recognition)
语音识别是 PaddleSpeech 最核心的能力之一,将音频转写为文字:
paddlespeech asr --lang zh --input input_16k.wavASRExecutor(见 paddlespeech/cli/asr/infer.py)支持的参数最为丰富:
| 参数 | 默认值 | 说明 |
|---|---|---|
--input | 无 | 待识别音频文件 |
--model | conformer_u2pp_online_wenetspeech | 模型类型,如conformer_wenetspeech、transformer_librispeech、deepspeech2系列 |
--lang | zh | 模型语言:zh、en或zh_en(中英混合,需配合--codeswitch true) |
--codeswitch | False | 是否启用中英混合语码切换 |
--sample_rate | 16000 | 模型采样率,可选8000或16000 |
--config | None | 自定义 yaml 配置 |
--decode_method | attention_rescoring | 解码方式:ctc_greedy_search、ctc_prefix_beam_search、attention、attention_rescoring(仅 transformer/conformer 系列模型支持) |
--num_decoding_left_chunks | -1 | 在线模型解码时左侧可见 chunk 数 |
--ckpt_path | None | 自定义模型权重路径 |
--yes/-y | False | 自动接受采样率/声道转换 |
--rtf | False | 打印实时率(Real-Time Factor) |
--device | paddle.get_device() | 推理设备 |
-d/--job_dump_result | False | 批量结果落盘 |
-v/--verbose | False | 详细日志 |
几个关键实现细节:
- 音频格式与采样率检查:
_check()会用 soundfile 读取音频,若时长超过模型允许的最大长度(默认约 50 秒)或采样率与模型不匹配,会给出提示;采样率不匹配时默认交互式询问是否重采样,可用-y跳过交互(paddlespeech/cli/asr/infer.py)。源码还提示可以用 sox 预处理音频:sox input_audio.xx --rate 16k --bits 16 --channels 1 output_audio.wav。 - 特征与解码:预处理阶段按配置做 fbank 特征提取(paddlespeech/cli/asr/infer.py);解码阶段根据模型类型分发,conformer/transformer 模型支持 beam search 与 attention rescoring 等多种解码方法(paddlespeech/cli/asr/infer.py)。
- RTF 统计:加上
--rtf后,工具会统计解码耗时与音频时长的比值并打印(见 paddlespeech/cli/executor.py 的show_rtf)。
例如用英文 LibriSpeech 模型识别英文音频,并打印实时率:
paddlespeech asr --lang en --model transformer_librispeech --input input_16k.wav --rtf语音翻译(Speech Translation,英-中)
语音翻译直接把英文语音翻译成中文文本(当前暂不支持 Windows 系统,因为其依赖 Kaldi 工具链的 fbank/pitch 特征提取):
paddlespeech st --input input_16k.wavSTExecutor(见 paddlespeech/cli/st/infer.py)的参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--input | 无 | 待翻译的音频文件 |
--model | fat_st_ted | 翻译模型类型 |
--src_lang | en | 源语言 |
--tgt_lang | zh | 目标语言 |
--sample_rate | 16000 | 模型采样率 |
--config/--ckpt_path | None | 自定义配置与权重 |
--device | paddle.get_device() | 推理设备 |
-d/--job_dump_result | False | 批量结果落盘 |
-v/--verbose | False | 详细日志 |
从源码看,fat_st_ted模型的特征提取依赖 Kaldi 工具(compute-fbank-feats、compute-kaldi-pitch-feats等),初始化时会自动下载并解压 kaldi_bins,并注入LD_LIBRARY_PATH和PATH(paddlespeech/cli/st/infer.py),这正是其暂不支持 Windows 的原因。
语音合成(Text-to-Speech)
语音合成将文本转换为语音波形文件:
paddlespeech tts --input "你好,欢迎使用百度飞桨深度学习框架!" --output output.wavTTSExecutor(见 paddlespeech/cli/tts/infer.py)采用「文本前端 + 声学模型(AM)+ 声码器(Vocoder)」三段式架构,参数分三组:
声学模型相关
| 参数 | 默认值 | 说明 |
|---|---|---|
--am | fastspeech2_csmsc | 声学模型,可选speedyspeech_csmsc、fastspeech2_csmsc、fastspeech2_ljspeech、fastspeech2_aishell3、fastspeech2_vctk、tacotron2_csmsc等 |
--am_config/--am_ckpt/--am_stat | None | 自定义声学模型配置、权重与统计量文件 |
--phones_dict/--tones_dict/--speaker_dict | None | 音素、声调、说话人 id 词表 |
--spk_id | 0 | 多说话人模型使用的说话人 id |
声码器相关
| 参数 | 默认值 | 说明 |
|---|---|---|
--voc | hifigan_csmsc | 声码器,可选pwgan_*、mb_melgan_csmsc、hifigan_*、wavernn_csmsc等 |
--voc_config/--voc_ckpt/--voc_stat | None | 自定义声码器配置、权重与统计量 |
其他
| 参数 | 默认值 | 说明 |
|---|---|---|
--lang | zh | 语言:zh、en或mix |
--output | output.wav | 输出音频文件名 |
--device | paddle.get_device() | 推理设备 |
--cpu_threads | 2 | ONNX 推理时的 CPU 线程数 |
--use_onnx | False | 是否使用 ONNX Runtime 加速推理 |
--fs | 24000 | 使用自定义 ONNX 模型时的采样率 |
-d/--job_dump_result | False | 批量结果落盘 |
-v/--verbose | False | 详细日志 |
推理时,文本先经前端处理为音素序列(SpeedySpeech 还额外使用声调),再经声学模型生成梅尔谱,最后由声码器还原为波形(paddlespeech/cli/tts/infer.py)。多说话人模型通过--spk_id切换音色,例如使用 AISHELL-3 上的 FastSpeech2:
paddlespeech tts --am fastspeech2_aishell3 --spk_id 0 --input "你好,欢迎使用百度飞桨深度学习框架!" --output output.wav若希望用 ONNX Runtime 做 CPU 推理,可指定--use_onnx true(是否支持取决于所选模型是否在 ONNX_SUPPORT_SET 中)。
文本后处理:标点恢复
语音识别产出的文本通常没有标点,标点恢复任务为其补全标点符号:
# 标准标点恢复模型 paddlespeech text --task punc --input 今天的天气真不错啊你下午有空吗我想约你一起去吃饭 # 更快的标点恢复模型 paddlespeech text --task punc --input 今天的天气真不错啊你下午有空吗我想约你一起去吃饭 --model ernie_linear_p3_wudao_fastTextExecutor(见 paddlespeech/cli/text/infer.py)的参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--input | 无 | 待处理的文本 |
--task | punc | 文本任务类型(当前仅支持punc) |
--model | ernie_linear_p7_wudao | 标点恢复模型,ernie_linear_p3_wudao_fast为快速版 |
--lang | zh | 语言:zh或en |
--config/--ckpt_path/--punc_vocab | None | 自定义配置、权重与标点词表 |
--device | paddle.get_device() | 推理设备 |
-d/--job_dump_result | False | 批量结果落盘 |
-v/--verbose | False | 详细日志 |
从源码看,新旧两代模型走不同的初始化分支:老模型(ernie_linear_p7_wudao、ernie_linear_p3_wudao)使用 ERNIE-1.0 的 tokenizer,新模型则使用ernie-3.0-mini-zh快速 tokenizer(paddlespeech/cli/text/infer.py、paddlespeech/cli/text/infer.py)。预处理时会先清洗文本(转小写、去除标点外的特殊字符),再逐 token 预测标点类别,后处理时按预测结果把标点符号插回原文(paddlespeech/cli/text/infer.py)。
进阶用法:批量输入与结果落盘
所有 Executor 都继承BaseExecutor的输入源解析逻辑(paddlespeech/cli/executor.py),因此支持三种输入方式:
- 单条输入:
--input直接给文件或文本,如上文所有示例。 - 标准输入(stdin):不传
--input时,从管道逐行读取输入,每行格式为id 内容(两列)或仅内容(单列),适合与cat、find等命令联动。 - 作业文件:
--input指向.job/.txt/.scp后缀文件时,逐行解析为key value的批量任务(paddlespeech/cli/executor.py)。
批量执行时,结果按id 结果逐行打印到标准输出;若加上-d/--job_dump_result,会把结果写入输入文件路径.done文件(paddlespeech/cli/executor.py)。例如准备一个texts.job文件:
1 今天的天气真不错啊你下午有空吗我想约你一起去吃饭 2 飞桨深度学习框架让语音技术开发更加简单然后批量恢复标点并落盘:
paddlespeech text --task punc --input texts.job -d结果将打印到标准输出,并同时保存到texts.job.done。这一机制对 ASR、CLS、Vector、TTS 等任务同样适用(TTS 多输入时输出文件会自动追加_id后缀,见 paddlespeech/cli/tts/infer.py)。
注意事项小结
- 采样率与格式:ASR 模型通常要求 16k/8k 采样率、16 bit 单声道 wav;输入不匹配时可使用
-y自动重采样,或先用 sox 预处理。 - 时长上限:ASR 默认限制单条音频约 50 秒以内,超长音频建议先切分。
- 平台限制:语音翻译
st依赖 Kaldi 工具链,暂不支持 Windows。 - 设备选择:所有任务均可用
--device cpu或--device gpu:0等指定推理设备,默认跟随 Paddle 当前环境。 - 模型自动下载:首次运行某任务时,工具会自动下载对应的预训练模型与配置文件并缓存到本地(通过 paddlespeech/cli/utils.py 的下载解压逻辑),之后重复执行将直接复用缓存。
通过以上命令,你可以在一行命令内完成从声音分类、说话人确认、语音转写、跨语言翻译、语音合成到标点恢复的完整语音处理链路;如果要在代码中调用同样的能力,各 Executor 的__call__方法也提供了与命令行等价的 Python API,可参考各任务文件中的__call__实现进一步集成。
- 人工智能
- 语音
- 音频
- NLP
- 媒体生成
【免费下载链接】PaddleSpeech
Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.
相关推荐
终极指南:如何用Awesome-CV免费制作专业级求职简历
终极指南:如何用Awesome CV免费制作专业级求职简历 还在为简历设计发愁吗?🤔 想要一份既专业又美观的简历,却不想花时间学习复杂的排版软件?Awesom
人工智能语音音频MelonLoader启动选项终极指南:35个参数深度解析与实战应用
MelonLoader启动选项终极指南:35个参数深度解析与实战应用 你是否曾经为Unity游戏模组加载器的配置而烦恼?是否想要更精细地控制MelonLoade
人工智能语音音频NLP媒体生成PaddleSpeech 集成 OpenAI Whisper 实战:命令行与 Python API 实现多语言语音识别与语音翻译
PaddleSpeech 集成 OpenAI Whisper 实战:命令行与 Python API 实现多语言语音识别与语音翻译 Whisper 是 OpenA
人工智能语音音频NLP媒体生成
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考