跳转至

多语种语音识别产线使用教程

1. 多语种语音识别产线介绍

语音识别是一种先进的工具,它能够将人类口述的多种语言自动转换为相应的文本或命令。该技术还在智能客服、语音助手、会议记录等多个领域发挥着重要作用。多语种语音识别则可以支持自动进行语种检索,支持多种不同语言的语音的识别。

多语种语音识别模型(可选):

模型 模型下载链接 训练数据 模型大小 词错率 介绍
whisper_large whisper_large 680kh 5.8G 2.7 (Librispeech) Whisper 是 OpenAI 开发的多语言自动语音识别模型,具备高精度和鲁棒性。它采用端到端架构,能处理嘈杂环境音频,适用于语音助理、实时字幕等多种应用。
whisper_medium whisper_medium 680kh 2.9G -
whisper_small whisper_small 680kh 923M -
whisper_base whisper_base 680kh 277M -
whisper_small whisper_tiny 680kh 145M -

2. 快速开始

PaddleX 支持在本地使用命令行或 Python 体验多语种语音识别产线的效果。

在本地使用多语种语音识别产线前,请确保您已经按照PaddleX本地安装教程完成了 PaddleX 的 wheel 包安装。

2.1 本地体验

2.1.1 命令行方式体验

一行命令即可快速体验文档图像预处理产线效果,使用 示例语音,并将 --input 替换为本地路径,进行预测

paddlex --pipeline multilingual_speech_recognition \
        --input zh.wav \
        --save_path ./output \
        --device gpu:0

相关的参数说明可以参考2.1.2 Python脚本方式集成中的参数说明。

运行后,会将结果打印到终端上,结果如下:

{'input_path': 'zh.wav', 'result': {'text': '我认为跑步最重要的就是给我带来了身体健康', 'segments': [{'id': 0, 'seek': 0, 'start': 0.0, 'end': 2.0, 'text': '我认为跑步最重要的就是', 'tokens': [50364, 1654, 7422, 97, 13992, 32585, 31429, 8661, 24928, 1546, 5620, 50464, 50464, 49076, 4845, 99, 34912, 19847, 29485, 44201, 6346, 115, 50564], 'temperature': 0, 'avg_logprob': -0.22779104113578796, 'compression_ratio': 0.28169014084507044, 'no_speech_prob': 0.026114309206604958}, {'id': 1, 'seek': 200, 'start': 2.0, 'end': 31.0, 'text': '给我带来了身体健康', 'tokens': [50364, 49076, 4845, 99, 34912, 19847, 29485, 44201, 6346, 115, 51814], 'temperature': 0, 'avg_logprob': -0.21976988017559052, 'compression_ratio': 0.23684210526315788, 'no_speech_prob': 0.009023111313581467}], 'language': 'zh'}}

运行结果参数说明可以参考2.1.2 Python脚本方式集成中的结果解释。

2.1.2 Python脚本方式集成

上述命令行是为了快速体验查看效果,一般来说,在项目中,往往需要通过代码集成,您可以通过几行代码即可完成产线的快速推理,推理代码如下:

from paddlex import create_pipeline

pipeline = create_pipeline(pipeline="multilingual_speech_recognition")
output = pipeline.predict(input="zh.wav")

for res in output:
    res.print()
    res.save_to_json(save_path="./output/")

在上述 Python 脚本中,执行了如下几个步骤:

(1)通过 create_pipeline() 实例化 multilingual_speech_recognition 产线对象:具体参数说明如下:

参数 参数说明 参数类型 默认值
pipeline 产线名称或是产线配置文件路径。如为产线名称,则必须为 PaddleX 所支持的产线。 str None
device 产线推理设备。支持指定GPU具体卡号,如“gpu:0”,其他硬件具体卡号,如“npu:0”,CPU如“cpu”。 str gpu:0

(2)调用 multilingual_speech_recognition 产线对象的 predict() 方法进行推理预测。该方法将返回一个 generator。以下是 predict() 方法的参数及其说明:

参数 参数说明 参数类型 可选项 默认值
input 待预测数据 str
  • 文件路径,如语音文件的本地路径:/root/data/audio.wav
  • URL链接,如语音文件的网络URL:示例
None
device 产线推理设备 str|None
  • CPU:如 cpu 表示使用 CPU 进行推理;
  • GPU:如 gpu:0 表示使用第 1 块 GPU 进行推理;
  • NPU:如 npu:0 表示使用第 1 块 NPU 进行推理;
  • XPU:如 xpu:0 表示使用第 1 块 XPU 进行推理;
  • MLU:如 mlu:0 表示使用第 1 块 MLU 进行推理;
  • DCU:如 dcu:0 表示使用第 1 块 DCU 进行推理;
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化时,会优先使用本地的 GPU 0号设备,如果没有,则使用 CPU 设备;
None

(3)对预测结果进行处理,每个样本的预测结果均为对应的Result对象,且支持打印、保存为图片、保存为json文件的操作:

方法 方法说明 参数 参数类型 参数说明 默认值
print() 打印结果到终端 format_json bool 是否对输出内容进行使用 JSON 缩进格式化 True
indent int 指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_jsonTrue 时有效 4
ensure_ascii bool 控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_jsonTrue时有效 False
save_to_json() 将结果保存为json格式的文件 save_path str 保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致
indent int 指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_jsonTrue 时有效 4
ensure_ascii bool 控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_jsonTrue时有效 False
  • 调用print() 方法会将结果打印到终端,打印到终端的内容解释如下:

    • input_path: 输入音频存放路径
    • result: 识别结果
      • text: 语音识别结果文本
      • segments: 带时间戳的结果文本
        • id: ID
        • seek: 语音片段指针
        • start: 片段开始时间
        • end: 片段结束时间
        • text: 片段识别文本
        • tokens: 片段文本的 token id
        • temperature: 变速比例
        • avg_logprob: 平均 log 概率
        • compression_ratio: 压缩比
        • no_speech_prob: 非语音概率
      • language: 识别语种
  • 调用save_to_json() 方法会将上述内容保存到指定的save_path中,如果指定为目录,则保存的路径为save_path/{your_audio_basename}.json,如果指定为文件,则直接保存到该文件中。由于json文件不支持保存numpy数组,因此会将其中的numpy.array类型转换为列表形式。

  • 此外,也支持通过属性获取带结果的可视化图像和预测结果,具体如下:

属性 属性说明
json 获取预测的 json 格式的结果
  • json 属性获取的预测结果为dict类型的数据,相关内容与调用 save_to_json() 方法保存的内容一致。

此外,您可以获取 multilingual_speech_recognition 产线配置文件,并加载配置文件进行预测。可执行如下命令将结果保存在 my_path 中:

paddlex --get_pipeline_config multilingual_speech_recognition --save_path ./my_path

若您获取了配置文件,即可对 multilingual_speech_recognition 产线各项配置进行自定义,只需要修改 create_pipeline 方法中的 pipeline 参数值为产线配置文件路径即可。示例如下:

例如,若您的配置文件保存在 ./my_path/multilingual_speech_recognition.yaml ,则只需执行:

from paddlex import create_pipeline
pipeline = create_pipeline(pipeline="./my_path/multilingual_speech_recognition.yaml")
output = pipeline.predict(input="zh.wav")
for res in output:
    res.print()
    res.save_to_json("./output/")

注: 配置文件中的参数为产线初始化参数,如果希望更改 multilingual_speech_recognition 产线初始化参数,可以直接修改配置文件中的参数,并加载配置文件进行预测。同时,CLI 预测也支持传入配置文件,--pipeline 指定配置文件的路径即可。

3. 开发集成/部署

如果产线可以达到您对产线推理速度和精度的要求,您可以直接进行开发集成/部署。

若您需要将产线直接应用在您的Python项目中,可以参考 2.2.2 Python脚本方式中的示例代码。

此外,PaddleX 也提供了其他三种部署方式,详细说明如下:

🚀 高性能推理:在实际生产环境中,许多应用对部署策略的性能指标(尤其是响应速度)有着较严苛的标准,以确保系统的高效运行与用户体验的流畅性。为此,PaddleX 提供高性能推理插件,旨在对模型推理及前后处理进行深度性能优化,实现端到端流程的显著提速,详细的高性能推理流程请参考PaddleX高性能推理指南

☁️ 服务化部署:服务化部署是实际生产环境中常见的一种部署形式。通过将推理功能封装为服务,客户端可以通过网络请求来访问这些服务,以获取推理结果。PaddleX 支持多种产线服务化部署方案,详细的产线服务化部署流程请参考PaddleX服务化部署指南

以下是基础服务化部署的API参考与多语言服务调用示例:

API参考

对于服务提供的主要操作:

  • HTTP请求方法为POST。
  • 请求体和响应体均为JSON数据(JSON对象)。
  • 当请求处理成功时,响应状态码为200,响应体的属性如下:
名称 类型 含义
logId string 请求的UUID。
errorCode integer 错误码。固定为0
errorMsg string 错误说明。固定为"Success"
result object 操作结果。
  • 当请求处理未成功时,响应体的属性如下:
名称 类型 含义
logId string 请求的UUID。
errorCode integer 错误码。与响应状态码相同。
errorMsg string 错误说明。

服务提供的主要操作如下:

  • infer

对音频进行多语种语音识别。

POST /multilingual-speech-recognition

  • 请求体的属性如下:
名称 类型 含义 是否必填
audio string 服务器可访问的音频文件的URL或路径。
  • 请求处理成功时,响应体的result具有如下属性:
名称 类型 含义
text string 语音识别结果文本。
segments array 带时间戳的结果文本。
language string 识别语种。

segments中的每个元素为一个object,具有如下属性:

名称 类型 含义
id integer 语音片段ID。
seek integer 语音片段指针。
start number 语音片段开始时间。
end number 语音片段结束时间。
text string 语音片段识别文本。
tokens array 语音片段的token id。
temperature number 变速比例
avgLogProb number 平均log概率。
compressionRatio number 压缩比。
noSpeechProb number 非语音概率。
多语言调用服务示例
Python

import requests

API_URL = "http://localhost:8080/multilingual-speech-recognition" # 服务URL
audio_path = "./zh.wav"

payload = {"audio": audio_path}

# 调用API
response = requests.post(API_URL, json=payload)

# 处理接口返回数据
assert response.status_code == 200
result = response.json()["result"]
print(result)


📱 端侧部署:端侧部署是一种将计算和数据处理功能放在用户设备本身上的方式,设备可以直接处理数据,而不需要依赖远程的服务器。PaddleX 支持将模型部署在 Android 等端侧设备上,详细的端侧部署流程请参考PaddleX端侧部署指南。 您可以根据需要选择合适的方式部署模型产线,进而进行后续的 AI 应用集成。

评论