aud22_38.yaml 13.4 KB
Newer Older
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
1
- en: Device ASR with Emformer RNN-T
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
2
  id: totrans-0
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
3 4 5
  prefs:
  - PREF_H1
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
6
  zh: 使用Emformer RNN-T的设备ASR
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
7
- en: 原文:[https://pytorch.org/audio/stable/tutorials/device_asr.html](https://pytorch.org/audio/stable/tutorials/device_asr.html)
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
8
  id: totrans-1
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
9 10 11
  prefs:
  - PREF_BQ
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
12
  zh: 原文:[https://pytorch.org/audio/stable/tutorials/device_asr.html](https://pytorch.org/audio/stable/tutorials/device_asr.html)
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
13
- en: Note
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
14
  id: totrans-2
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
15 16
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
17
  zh: 注意
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
18 19
- en: Click [here](#sphx-glr-download-tutorials-device-asr-py) to download the full
    example code
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
20
  id: totrans-3
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
21 22
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
23
  zh: 点击[这里](#sphx-glr-download-tutorials-device-asr-py)下载完整示例代码
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
24
- en: '**Author**: [Moto Hira](mailto:moto%40meta.com), [Jeff Hwang](mailto:jeffhwang%40meta.com).'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
25
  id: totrans-4
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
26 27
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
28
  zh: '**作者**:[Moto Hira](mailto:moto%40meta.com), [Jeff Hwang](mailto:jeffhwang%40meta.com)。'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
29 30
- en: This tutorial shows how to use Emformer RNN-T and streaming API to perform speech
    recognition on a streaming device input, i.e. microphone on laptop.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
31
  id: totrans-5
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
32 33
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
34
  zh: 本教程展示了如何使用Emformer RNN-T和流式API在流式设备输入上执行语音识别,即笔记本电脑上的麦克风。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
35
- en: Note
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
36
  id: totrans-6
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
37 38
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
39
  zh: 注意
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
40 41
- en: This tutorial requires FFmpeg libraries. Please refer to [FFmpeg dependency](../installation.html#ffmpeg-dependency)
    for the detail.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
42
  id: totrans-7
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
43 44
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
45
  zh: 本教程需要FFmpeg库。请参考[FFmpeg依赖](../installation.html#ffmpeg-dependency)获取详细信息。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
46
- en: Note
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
47
  id: totrans-8
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
48 49
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
50
  zh: 注意
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
51
- en: This tutorial was tested on MacBook Pro and Dynabook with Windows 10.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
52
  id: totrans-9
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
53 54
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
55
  zh: 本教程在MacBook Pro和安装了Windows 10的Dynabook上进行了测试。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
56 57
- en: This tutorial does NOT work on Google Colab because the server running this
    tutorial does not have a microphone that you can talk to.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
58
  id: totrans-10
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
59 60
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
61
  zh: 本教程在Google Colab上不起作用,因为运行本教程的服务器没有可以与之交谈的麦克风。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
62
- en: 1\. Overview[](#overview "Permalink to this heading")
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
63
  id: totrans-11
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
64 65 66
  prefs:
  - PREF_H2
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
67
  zh: 1\. 概述[](#overview "Permalink to this heading")
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
68 69
- en: We use streaming API to fetch audio from audio device (microphone) chunk by
    chunk, then run inference using Emformer RNN-T.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
70
  id: totrans-12
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
71 72
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
73
  zh: 我们使用流式API逐块从音频设备(麦克风)获取音频,然后使用Emformer RNN-T进行推理。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
74 75 76
- en: For the basic usage of the streaming API and Emformer RNN-T please refer to
    [StreamReader Basic Usage](./streamreader_basic_tutorial.html) and [Online ASR
    with Emformer RNN-T](./online_asr_tutorial.html).
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
77
  id: totrans-13
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
78 79
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
80 81
  zh: 有关流式API和Emformer RNN-T的基本用法,请参考[StreamReader基本用法](./streamreader_basic_tutorial.html)和[使用Emformer
    RNN-T进行在线ASR](./online_asr_tutorial.html)。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
82
- en: 2\. Checking the supported devices[](#checking-the-supported-devices "Permalink
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
83
    to this heading")
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
84
  id: totrans-14
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
85 86 87
  prefs:
  - PREF_H2
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
88
  zh: 2\. 检查支持的设备[](#checking-the-supported-devices "Permalink to this heading")
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
89 90 91
- en: Firstly, we need to check the devices that Streaming API can access, and figure
    out the arguments (`src` and `format`) we need to pass to [`StreamReader()`](../generated/torchaudio.io.StreamReader.html#torchaudio.io.StreamReader
    "torchaudio.io.StreamReader") class.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
92
  id: totrans-15
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
93 94
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
95 96
  zh: 首先,我们需要检查流式API可以访问的设备,并找出我们需要传递给[`StreamReader()`](../generated/torchaudio.io.StreamReader.html#torchaudio.io.StreamReader
    "torchaudio.io.StreamReader")类的参数(`src`和`format`)。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
97 98 99
- en: We use `ffmpeg` command for this. `ffmpeg` abstracts away the difference of
    underlying hardware implementations, but the expected value for `format` varies
    across OS and each `format` defines different syntax for `src`.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
100
  id: totrans-16
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
101 102
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
103
  zh: 我们使用`ffmpeg`命令来实现。`ffmpeg`抽象了底层硬件实现的差异,但`format`的预期值在不同操作系统上有所不同,每个`format`定义了不同的`src`语法。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
104
- en: The details of supported `format` values and `src` syntax can be found in [https://ffmpeg.org/ffmpeg-devices.html](https://ffmpeg.org/ffmpeg-devices.html).
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
105
  id: totrans-17
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
106 107
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
108
  zh: 有关支持的`format`值和`src`语法的详细信息,请参考[https://ffmpeg.org/ffmpeg-devices.html](https://ffmpeg.org/ffmpeg-devices.html)。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
109
- en: For macOS, the following command will list the available devices.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
110
  id: totrans-18
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
111 112
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
113
  zh: 对于macOS,以下命令将列出可用设备。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
114
- en: '[PRE0]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
115
  id: totrans-19
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
116 117
  prefs: []
  type: TYPE_PRE
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
118
  zh: '[PRE0]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
119
- en: We will use the following values for Streaming API.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
120
  id: totrans-20
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
121 122
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
123
  zh: 我们将使用以下值进行流式API。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
124
- en: '[PRE1]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
125
  id: totrans-21
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
126 127
  prefs: []
  type: TYPE_PRE
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
128
  zh: '[PRE1]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
129
- en: For Windows, `dshow` device should work.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
130
  id: totrans-22
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
131 132
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
133
  zh: 对于Windows,`dshow`设备应该可以工作。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
134
- en: '[PRE2]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
135
  id: totrans-23
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
136 137
  prefs: []
  type: TYPE_PRE
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
138
  zh: '[PRE2]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
139
- en: In the above case, the following value can be used to stream from microphone.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
140
  id: totrans-24
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
141 142
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
143
  zh: 在上述情况下,可以使用以下值从麦克风进行流式传输。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
144
- en: '[PRE3]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
145
  id: totrans-25
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
146 147
  prefs: []
  type: TYPE_PRE
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
148
  zh: '[PRE3]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
149
- en: 3\. Data acquisition[](#data-acquisition "Permalink to this heading")
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
150
  id: totrans-26
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
151 152 153
  prefs:
  - PREF_H2
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
154
  zh: 3\. 数据采集[](#data-acquisition "Permalink to this heading")
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
155 156
- en: Streaming audio from microphone input requires properly timing data acquisition.
    Failing to do so may introduce discontinuities in the data stream.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
157
  id: totrans-27
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
158 159
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
160
  zh: 从麦克风输入流式音频需要正确计时数据采集。如果未能这样做,可能会导致数据流中出现不连续性。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
161
- en: For this reason, we will run the data acquisition in a subprocess.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
162
  id: totrans-28
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
163 164
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
165
  zh: 因此,我们将在子进程中运行数据采集。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
166 167
- en: Firstly, we create a helper function that encapsulates the whole process executed
    in the subprocess.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
168
  id: totrans-29
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
169 170
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
171
  zh: 首先,我们创建一个封装在子进程中执行的整个过程的辅助函数。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
172 173
- en: This function initializes the streaming API, acquires data then puts it in a
    queue, which the main process is watching.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
174
  id: totrans-30
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
175 176
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
177
  zh: 此函数初始化流式API,获取数据然后将其放入队列,主进程正在监视该队列。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
178
- en: '[PRE4]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
179
  id: totrans-31
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
180 181
  prefs: []
  type: TYPE_PRE
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
182
  zh: '[PRE4]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
183 184
- en: The notable difference from the non-device streaming is that, we provide `timeout`
    and `backoff` parameters to `stream` method.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
185
  id: totrans-32
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
186 187
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
188
  zh: 与非设备流式的显着区别在于,我们为`stream`方法提供了`timeout`和`backoff`参数。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
189 190 191
- en: When acquiring data, if the rate of acquisition requests is higher than that
    at which the hardware can prepare the data, then the underlying implementation
    reports special error code, and expects client code to retry.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
192
  id: totrans-33
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
193 194
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
195
  zh: 在获取数据时,如果获取请求的速率高于硬件准备数据的速率,则底层实现会报告特殊的错误代码,并期望客户端代码重试。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
196 197 198 199
- en: Precise timing is the key for smooth streaming. Reporting this error from low-level
    implementation all the way back to Python layer, before retrying adds undesired
    overhead. For this reason, the retry behavior is implemented in C++ layer, and
    `timeout` and `backoff` parameters allow client code to control the behavior.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
200
  id: totrans-34
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
201 202
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
203
  zh: 精确的时序是流畅流媒体的关键。从低级实现报告此错误一直返回到Python层,在重试之前会增加不必要的开销。因此,重试行为是在C++层实现的,`timeout`和`backoff`参数允许客户端代码控制行为。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
204 205
- en: For the detail of `timeout` and `backoff` parameters, please refer to the documentation
    of `stream()` method.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
206
  id: totrans-35
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
207 208
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
209
  zh: 有关`timeout`和`backoff`参数的详细信息,请参考`stream()`方法的文档。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
210
- en: Note
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
211
  id: totrans-36
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
212 213
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
214
  zh: 注意
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
215 216 217 218 219 220
- en: The proper value of `backoff` depends on the system configuration. One way to
    see if `backoff` value is appropriate is to save the series of acquired chunks
    as a continuous audio and listen to it. If `backoff` value is too large, then
    the data stream is discontinuous. The resulting audio sounds sped up. If `backoff`
    value is too small or zero, the audio stream is fine, but the data acquisition
    process enters busy-waiting state, and this increases the CPU consumption.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
221
  id: totrans-37
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
222 223
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
224
  zh: '`backoff`的适当值取决于系统配置。检查`backoff`值是否合适的一种方法是将获取的一系列块保存为连续音频并进行听取。如果`backoff`值太大,则数据流是不连续的。生成的音频听起来加快了。如果`backoff`值太小或为零,则音频流正常,但数据采集过程进入忙等待状态,这会增加CPU消耗。'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
225
- en: 4\. Building inference pipeline[](#building-inference-pipeline "Permalink to
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
226
    this heading")
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
227
  id: totrans-38
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
228 229 230
  prefs:
  - PREF_H2
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
231
  zh: 4\. 构建推理流程[](#building-inference-pipeline "跳转到此标题")
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
232
- en: The next step is to create components required for inference.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
233
  id: totrans-39
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
234 235
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
236
  zh: 接下来的步骤是创建推理所需的组件。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
237
- en: This is the same process as [Online ASR with Emformer RNN-T](./online_asr_tutorial.html).
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
238
  id: totrans-40
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
239 240
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
241
  zh: 这与[使用Emformer RNN-T进行在线ASR](./online_asr_tutorial.html)是相同的流程。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
242
- en: '[PRE5]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
243
  id: totrans-41
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
244 245
  prefs: []
  type: TYPE_PRE
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
246
  zh: '[PRE5]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
247
- en: '[PRE6]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
248
  id: totrans-42
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
249 250
  prefs: []
  type: TYPE_PRE
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
251
  zh: '[PRE6]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
252
- en: 5\. The main process[](#the-main-process "Permalink to this heading")
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
253
  id: totrans-43
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
254 255 256
  prefs:
  - PREF_H2
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
257
  zh: 5\. 主要流程[](#the-main-process "跳转到此标题")
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
258
- en: 'The execution flow of the main process is as follows:'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
259
  id: totrans-44
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
260 261
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
262
  zh: 主进程的执行流程如下:
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
263
- en: Initialize the inference pipeline.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
264
  id: totrans-45
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
265 266 267
  prefs:
  - PREF_OL
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
268
  zh: 初始化推理流程。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
269
- en: Launch data acquisition subprocess.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
270
  id: totrans-46
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
271 272 273
  prefs:
  - PREF_OL
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
274
  zh: 启动数据获取子进程。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
275
- en: Run inference.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
276
  id: totrans-47
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
277 278 279
  prefs:
  - PREF_OL
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
280
  zh: 运行推理。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
281
- en: Clean up
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
282
  id: totrans-48
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
283 284 285
  prefs:
  - PREF_OL
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
286
  zh: 清理
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
287
- en: Note
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
288
  id: totrans-49
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
289 290
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
291
  zh: 注意
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
292 293
- en: As the data acquisition subprocess will be launched with “spawn” method, all
    the code on global scope are executed on the subprocess as well.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
294
  id: totrans-50
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
295 296
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
297
  zh: 由于数据获取子进程将使用“spawn”方法启动,全局范围的所有代码也将在子进程中执行。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
298 299
- en: We want to instantiate pipeline only in the main process, so we put them in
    a function and invoke it within __name__ == “__main__” guard.
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
300
  id: totrans-51
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
301 302
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
303
  zh: 我们希望只在主进程中实例化流程,因此我们将它们放在一个函数中,并在`__name__ == "__main__"`保护内调用它。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
304
- en: '[PRE7]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
305
  id: totrans-52
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
306 307
  prefs: []
  type: TYPE_PRE
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
308
  zh: '[PRE7]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
309
- en: '[PRE8]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
310
  id: totrans-53
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
311 312
  prefs: []
  type: TYPE_PRE
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
313
  zh: '[PRE8]'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
314
- en: 'Tag: [`torchaudio.io`](../io.html#module-torchaudio.io "torchaudio.io")'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
315
  id: totrans-54
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
316 317
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
318
  zh: 标签:[`torchaudio.io`](../io.html#module-torchaudio.io "torchaudio.io")
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
319
- en: '**Total running time of the script:** ( 0 minutes 0.000 seconds)'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
320
  id: totrans-55
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
321 322
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
323
  zh: '**脚本的总运行时间:**(0分钟0.000秒)'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
324
- en: '[`Download Python source code: device_asr.py`](../_downloads/8009eae2a3a1a322f175ecc138597775/device_asr.py)'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
325
  id: totrans-56
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
326 327
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
328
  zh: '[`下载Python源代码:device_asr.py`](../_downloads/8009eae2a3a1a322f175ecc138597775/device_asr.py)'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
329
- en: '[`Download Jupyter notebook: device_asr.ipynb`](../_downloads/c8265c298ed19ff44b504d5c3aa72563/device_asr.ipynb)'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
330
  id: totrans-57
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
331 332
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
333
  zh: '[`下载Jupyter笔记本:device_asr.ipynb`](../_downloads/c8265c298ed19ff44b504d5c3aa72563/device_asr.ipynb)'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
334
- en: '[Gallery generated by Sphinx-Gallery](https://sphinx-gallery.github.io)'
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
335
  id: totrans-58
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
336 337
  prefs: []
  type: TYPE_NORMAL
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
338
  zh: '[Sphinx-Gallery生成的画廊](https://sphinx-gallery.github.io)'