☰
PaddleSpeech 命令行工具实战指南:一行命令调用语音分类、识别、翻译与合成能力
2026/9/25 2:26:54 网站建设 项目流程
  • 人工智能
  • 语音
  • 音频
  • 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.

项目地址:https://gitcode.com/paddlepaddle/PaddleSpeech
点击查看免费下载

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
whisperWhisper 语音转写/翻译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 version

VersionCommand会打印当前包版本号与 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.wav

CLSExecutor(见 paddlespeech/cli/cls/infer.py)支持的常用参数如下:

参数默认值说明
--input无待分类的音频文件路径
--modelpanns_cnn14分类模型类型,从预训练模型清单中自动生成候选
--configNone自定义 yaml 配置,缺省时使用模型自带配置
--ckpt_pathNone自定义模型权重文件路径
--label_fileNone类别标签文件路径
--topk1返回得分最高的 k 个类别
--devicepaddle.get_device()推理设备(cpu/gpu 等)
-d/--job_dump_resultFalse将批量任务结果保存到文件
-v/--verboseFalse开启详细日志

从源码看,预处理阶段会读取配置中的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.wav

VectorExecutor(见 paddlespeech/cli/vector/infer.py)的常用参数:

参数默认值说明
--modelecapatdnn_voxceleb12声纹模型类型
--taskspk任务类型:spk提取嵌入向量,score计算相似度
--input无音频文件路径;score任务需传两个路径
--sample_rate16000模型采样率(当前仅支持 16000)
--config/--ckpt_pathNone自定义配置与权重路径
--yes/-yFalse直接接受采样率/声道转换请求,跳过交互确认
--devicepaddle.get_device()推理设备
-d/--job_dump_resultFalse批量结果落盘
-v/--verboseFalse详细日志

底层流程上,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.wav

ASRExecutor(见 paddlespeech/cli/asr/infer.py)支持的参数最为丰富:

参数默认值说明
--input无待识别音频文件
--modelconformer_u2pp_online_wenetspeech模型类型,如conformer_wenetspeech、transformer_librispeech、deepspeech2系列
--langzh模型语言:zh、en或zh_en(中英混合,需配合--codeswitch true)
--codeswitchFalse是否启用中英混合语码切换
--sample_rate16000模型采样率,可选8000或16000
--configNone自定义 yaml 配置
--decode_methodattention_rescoring解码方式:ctc_greedy_search、ctc_prefix_beam_search、attention、attention_rescoring(仅 transformer/conformer 系列模型支持)
--num_decoding_left_chunks-1在线模型解码时左侧可见 chunk 数
--ckpt_pathNone自定义模型权重路径
--yes/-yFalse自动接受采样率/声道转换
--rtfFalse打印实时率(Real-Time Factor)
--devicepaddle.get_device()推理设备
-d/--job_dump_resultFalse批量结果落盘
-v/--verboseFalse详细日志

几个关键实现细节:

  • 音频格式与采样率检查:_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.wav

STExecutor(见 paddlespeech/cli/st/infer.py)的参数:

参数默认值说明
--input无待翻译的音频文件
--modelfat_st_ted翻译模型类型
--src_langen源语言
--tgt_langzh目标语言
--sample_rate16000模型采样率
--config/--ckpt_pathNone自定义配置与权重
--devicepaddle.get_device()推理设备
-d/--job_dump_resultFalse批量结果落盘
-v/--verboseFalse详细日志

从源码看,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.wav

TTSExecutor(见 paddlespeech/cli/tts/infer.py)采用「文本前端 + 声学模型(AM)+ 声码器(Vocoder)」三段式架构,参数分三组:

声学模型相关

参数默认值说明
--amfastspeech2_csmsc声学模型,可选speedyspeech_csmsc、fastspeech2_csmsc、fastspeech2_ljspeech、fastspeech2_aishell3、fastspeech2_vctk、tacotron2_csmsc等
--am_config/--am_ckpt/--am_statNone自定义声学模型配置、权重与统计量文件
--phones_dict/--tones_dict/--speaker_dictNone音素、声调、说话人 id 词表
--spk_id0多说话人模型使用的说话人 id

声码器相关

参数默认值说明
--vochifigan_csmsc声码器,可选pwgan_*、mb_melgan_csmsc、hifigan_*、wavernn_csmsc等
--voc_config/--voc_ckpt/--voc_statNone自定义声码器配置、权重与统计量

其他

参数默认值说明
--langzh语言:zh、en或mix
--outputoutput.wav输出音频文件名
--devicepaddle.get_device()推理设备
--cpu_threads2ONNX 推理时的 CPU 线程数
--use_onnxFalse是否使用 ONNX Runtime 加速推理
--fs24000使用自定义 ONNX 模型时的采样率
-d/--job_dump_resultFalse批量结果落盘
-v/--verboseFalse详细日志

推理时,文本先经前端处理为音素序列(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_fast

TextExecutor(见 paddlespeech/cli/text/infer.py)的参数:

参数默认值说明
--input无待处理的文本
--taskpunc文本任务类型(当前仅支持punc)
--modelernie_linear_p7_wudao标点恢复模型,ernie_linear_p3_wudao_fast为快速版
--langzh语言:zh或en
--config/--ckpt_path/--punc_vocabNone自定义配置、权重与标点词表
--devicepaddle.get_device()推理设备
-d/--job_dump_resultFalse批量结果落盘
-v/--verboseFalse详细日志

从源码看,新旧两代模型走不同的初始化分支:老模型(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),因此支持三种输入方式:

  1. 单条输入:--input直接给文件或文本,如上文所有示例。
  2. 标准输入(stdin):不传--input时,从管道逐行读取输入,每行格式为id 内容(两列)或仅内容(单列),适合与cat、find等命令联动。
  3. 作业文件:--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.

项目地址:https://gitcode.com/paddlepaddle/PaddleSpeech
点击查看免费下载

相关推荐

上一篇:Wolvic XR 浏览器使用教程
下一篇:MatrixOne 开源项目安装与使用教程

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询