---
comments: true
---
# 多语种语音识别产线使用教程
## 1. 多语种语音识别产线介绍
语音识别是一种先进的工具,它能够将人类口述的多种语言自动转换为相应的文本或命令。该技术还在智能客服、语音助手、会议记录等多个领域发挥着重要作用。多语种语音识别则可以支持自动进行语种检索,支持多种不同语言的语音的识别。
> 推理耗时仅包含模型推理耗时,不包含前后处理耗时。
多语种语音识别模型(可选):
| 模型 |
模型下载链接 |
训练数据 |
模型存储大小(MB) |
词错率 |
介绍 |
| whisper_large |
whisper_large |
680kh |
5800 |
2.7 (Librispeech) |
Whisper 是 OpenAI 开发的多语言自动语音识别模型,具备高精度和鲁棒性。它采用端到端架构,能处理嘈杂环境音频,适用于语音助理、实时字幕等多种应用。 |
| whisper_medium |
whisper_medium |
680kh |
2900 |
- |
| whisper_small |
whisper_small |
680kh |
923 |
- |
| whisper_base |
whisper_base |
680kh |
277 |
- |
| whisper_small |
whisper_tiny |
680kh |
145 |
- |
## 2. 快速开始
PaddleX 支持在本地使用命令行或 Python 体验多语种语音识别产线的效果。
在本地使用多语种语音识别产线前,请确保您已经按照[PaddleX本地安装教程](../../../installation/installation.md)完成了 PaddleX 的 wheel 包安装。如果您希望选择性安装依赖,请参考安装教程中的相关说明。该产线对应的依赖分组为 `speech`。
### 2.1 本地体验
#### 2.1.1 命令行方式体验
一行命令即可快速体验文档图像预处理产线效果,使用 [示例语音](https://paddlespeech.bj.bcebos.com/PaddleAudio/zh.wav),并将 `--input` 替换为本地路径,进行预测
```bash
paddlex --pipeline multilingual_speech_recognition \
--input zh.wav \
--save_path ./output \
--device gpu:0
```
相关的参数说明可以参考[2.1.2 Python脚本方式集成](#212-python脚本方式集成)中的参数说明。
运行后,会将结果打印到终端上,结果如下:
```plaintext
{'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脚本方式集成](#212-python脚本方式集成)中的结果解释。
#### 2.1.2 Python脚本方式集成
上述命令行是为了快速体验查看效果,一般来说,在项目中,往往需要通过代码集成,您可以通过几行代码即可完成产线的快速推理,推理代码如下:
```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 |
use_hpip |
是否启用高性能推理插件。如果为 None,则使用配置文件或 config 中的配置。目前暂不支持。 |
bool | None |
无 |
None |
hpi_config |
高性能推理配置。目前暂不支持。 |
dict | None |
无 |
None |
(2)调用 multilingual_speech_recognition 产线对象的 `predict()` 方法进行推理预测。该方法将返回一个 `generator`。以下是 `predict()` 方法的参数及其说明:
| 参数 |
参数说明 |
参数类型 |
可选项 |
默认值 |
input |
待预测数据 |
str |
- 文件路径,如语音文件的本地路径:
/root/data/audio.wav
- URL链接,如语音文件的网络URL:示例
|
None |
(3)对预测结果进行处理,每个样本的预测结果均为对应的Result对象,且支持打印、保存为图片、保存为`json`文件的操作:
| 方法 |
方法说明 |
参数 |
参数类型 |
参数说明 |
默认值 |
print() |
打印结果到终端 |
format_json |
bool |
是否对输出内容进行使用 JSON 缩进格式化 |
True |
indent |
int |
指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_json 为 True 时有效 |
4 |
ensure_ascii |
bool |
控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_json为True时有效 |
False |
save_to_json() |
将结果保存为json格式的文件 |
save_path |
str |
保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致 |
无 |
indent |
int |
指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_json 为 True 时有效 |
4 |
ensure_ascii |
bool |
控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_json为True时有效 |
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` ,则只需执行:
```python
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脚本方式](#222-python脚本方式集成)中的示例代码。
此外,PaddleX 也提供了其他三种部署方式,详细说明如下:
🚀 高性能推理:在实际生产环境中,许多应用对部署策略的性能指标(尤其是响应速度)有着较严苛的标准,以确保系统的高效运行与用户体验的流畅性。为此,PaddleX 提供高性能推理插件,旨在对模型推理及前后处理进行深度性能优化,实现端到端流程的显著提速,详细的高性能推理流程请参考[PaddleX高性能推理指南](../../../pipeline_deploy/high_performance_inference.md)。
☁️ 服务化部署:服务化部署是实际生产环境中常见的一种部署形式。通过将推理功能封装为服务,客户端可以通过网络请求来访问这些服务,以获取推理结果。PaddleX 支持多种产线服务化部署方案,详细的产线服务化部署流程请参考[PaddleX服务化部署指南](../../../pipeline_deploy/serving.md)。
以下是基础服务化部署的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 |
错误说明。 |
服务提供的主要操作如下:
对音频进行多语种语音识别。
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 base64
import requests
API_URL = "http://localhost:8080/multilingual-speech-recognition" # 服务URL
audio_path = "./zh.wav"
with open(audio_path, "rb") as file:
audio_bytes = file.read()
audio_data = base64.b64encode(audio_bytes).decode("ascii")
payload = {"audio": audio_data}
response = requests.post(API_URL, json=payload)
assert response.status_code == 200
result = response.json()["result"]
print(result)
📱 端侧部署:端侧部署是一种将计算和数据处理功能放在用户设备本身上的方式,设备可以直接处理数据,而不需要依赖远程的服务器。PaddleX 支持将模型部署在 Android 等端侧设备上,详细的端侧部署流程请参考[PaddleX端侧部署指南](../../../pipeline_deploy/on_device_deployment.md)。
您可以根据需要选择合适的方式部署模型产线,进而进行后续的 AI 应用集成。