speechbrain.inference.VAD 模块
指定语音活动检测(VAD)模块的推理接口。
- Authors:
阿库·罗赫 2021
彼得·普兰廷加 2021
洛伦·卢戈斯奇 2020
Mirco Ravanelli 2020
Titouan Parcollet 2021
阿卜杜勒·赫巴 2021
安德烈亚斯·诺茨 2022, 2023
Pooneh Mousavi 2023
Sylvain de Langen 2023
阿德尔·穆门 2023
普拉迪亚·坎达尔卡 2023
摘要
类:
一个用于语音活动检测(VAD)的即用类,使用预训练模型。 |
参考
- class speechbrain.inference.VAD.VAD(*args, **kwargs)[source]
基础类:
Pretrained一个用于语音活动检测(VAD)的即用类,使用预训练模型。
Example
>>> import torchaudio >>> from speechbrain.inference.VAD import VAD >>> # Model is downloaded from the speechbrain HuggingFace repo >>> tmpdir = getfixture("tmpdir") >>> VAD = VAD.from_hparams( ... source="speechbrain/vad-crdnn-libriparty", ... savedir=tmpdir, ... )
>>> # Perform VAD >>> boundaries = VAD.get_speech_segments("tests/samples/single-mic/example1.wav")
- HPARAMS_NEEDED = ['sample_rate', 'time_resolution', 'device']
- MODULES_NEEDED = ['compute_features', 'mean_var_norm', 'model']
- get_speech_prob_file(audio_file, large_chunk_size=30, small_chunk_size=10, overlap_small_chunk=False)[source]
输出输入音频文件的帧级语音概率,使用hparam文件中指定的神经模型。为了使此代码既可并行化又可扩展到长序列,它采用了双窗口方法。首先,我们顺序读取输入信号的非重叠大块。然后,我们将大块分割成较小的块,并并行处理它们。
- Parameters:
- Returns:
prob_vad – torch.Tensor 包含输入音频文件的帧级语音概率。
- Return type:
torch.Tensor
- get_speech_prob_chunk(wavs, wav_lens=None)[source]
输出输入音频块的帧级后验概率 输出接近零表示语音活动概率较低的时间步长, 而输出接近一可能包含语音。
- Parameters:
wavs (torch.Tensor) – 波形批次 [batch, time, channels] 或 [batch, time],具体取决于模型。请确保采样率为 fs=16000 Hz。
wav_lens (torch.Tensor) – 波形相对于批次中最长波形的长度,形状为 [batch] 的张量。最长的波形应具有相对长度 1.0,其他波形的长度为 len(waveform) / max_length。用于忽略填充部分。
- Returns:
编码的批次
- Return type:
torch.Tensor
- apply_threshold(vad_prob, activation_th=0.5, deactivation_th=0.25)[source]
扫描帧级别的语音概率并对它们应用一个阈值。当检测到大于activation_th的值时,语音开始,而当观察到小于deactivation_th的值时,语音结束。
- get_boundaries(prob_th, output_value='seconds')[source]
计算检测到语音活动的时间边界。 它接收输入帧级别的二元决策 (1表示语音,0表示非语音)并输出每个检测到的语音区域的开始/结束秒数 (或样本)。
- Parameters:
prob_th (torch.Tensor) – 帧级别的二元决策(1表示语音帧,0表示非语音帧)。该张量可以从apply_threshold获得。
output_value ('seconds' 或 'samples') – 当选项‘seconds’被设置时,返回的边界以秒为单位,否则以样本为单位报告。
- Returns:
boundaries – torch.Tensor 包含偶数位置的语音片段的开始秒数(或样本)和奇数位置的相应结束秒数 (例如,[1.0, 1.5, 5.0, 6.0] 表示我们有两个语音片段;
一个从1.0到1.5秒,另一个从5.0到6.0秒)。
- Return type:
torch.Tensor
- remove_short_segments(boundaries, len_th=0.25)[source]
移除过短的片段。
- Parameters:
boundaries (torch.Tensor) – 包含语音边界的torch.Tensor。可以使用get_boundaries方法获得。
len_th (float) – 如果段的长度小于close_th,则这些段将被合并。
- Returns:
没有短片段的新边界。
- Return type:
新边界
- save_boundaries(boundaries, save_path=None, print_boundaries=True, audio_file=None)[source]
以可读格式保存边界到文件(和/或打印它们)。
- Parameters:
boundaries (torch.Tensor) – 包含语音边界的 torch.Tensor。可以使用 get_boundaries 方法获得。
save_path (path) – 何时存储包含语音/非语音间隔的文本文件。
print_boundaries (Bool) – 在标准输出中打印语音/非语音间隔。
audio_file (path) – 包含录音的音频文件的路径。该文件使用torchaudio读取。在这里用于检测信号的长度。
- energy_VAD(audio_file, boundaries, activation_th=0.5, deactivation_th=0.0, eps=1e-06)[source]
在检测到的语音段内应用基于能量的VAD。神经网络VAD通常会创建较长的段,并且倾向于合并彼此接近的段。
能量VAD后处理对于实现细粒度的语音活动检测非常有用。
能量VAD计算小块内的能量。能量在段内被归一化,使其均值为0.5,标准差为+-0.5。这有助于设置能量阈值。
- Parameters:
- Returns:
由能量VAD后处理的新边界。
- Return type:
新边界
- create_chunks(x, chunk_size=16384, chunk_stride=16384)[source]
将输入分割成大小为 chunk_size 的较小块,并具有重叠的 chunk_stride。这些块在批次轴上连接。
- upsample_VAD(vad_out, audio_file, time_resolution=0.01)[source]
对VAD的输出进行上采样以帮助可视化。它创建一个信号,当有语音时为1,没有语音时为0。VAD信号具有与输入信号相同的分辨率,并且可以与其一起打开(例如,使用Audacity)以直观地识别VAD区域。
- Parameters:
vad_out (torch.Tensor) – 包含每个语音帧为1和非语音帧为0的torch.Tensor。
audio_file (path) – 用于计算vad_out的原始音频文件
time_resolution (float) – vad_out信号的时间分辨率。
- Returns:
vad_out 张量的上采样版本。
- Return type:
vad_signal
- upsample_boundaries(boundaries, audio_file)[source]
根据输入的边界,此方法创建一个信号,当有语音时为1,没有语音时为0。 vad信号与输入信号具有相同的分辨率,并且可以与其一起打开(例如,使用audacity)以直观地识别VAD区域。
- Parameters:
boundaries (torch.Tensor) – 包含语音片段边界的torch.Tensor。
audio_file (path) – 用于计算vad_out的原始音频文件
- Returns:
输出与输入信号具有相同分辨率的vad信号。
- Return type:
vad_signal
- double_check_speech_segments(boundaries, audio_file, speech_th=0.5)[source]
接收检测到的语音片段的边界作为输入,并使用神经VAD进行双重检查,以确保它们确实包含语音。
- Parameters:
boundaries (torch.Tensor) – 包含语音片段边界的 torch.Tensor。
audio_file (path) – 用于计算vad_out的原始音频文件。
speech_th (float) – 确认语音的平均后验概率阈值。低于该阈值时,该段将被重新分配到非语音区域。
- Returns:
确认语音活动的段落的边界。
- Return type:
新边界
- get_segments(boundaries, audio_file, before_margin=0.1, after_margin=0.1)[source]
返回包含所有检测到的语音段的列表。
- get_speech_segments(audio_file, large_chunk_size=30, small_chunk_size=10, overlap_small_chunk=False, apply_energy_VAD=False, double_check=True, close_th=0.25, len_th=0.25, activation_th=0.5, deactivation_th=0.25, en_activation_th=0.5, en_deactivation_th=0.0, speech_th=0.5)[source]
检测输入文件中的语音片段。输入信号可以是短录音或长录音。该函数计算大块(例如30秒)的后验概率,这些大块是顺序读取的(以避免在内存中存储大信号)。每个大块又被分割成更小的块(例如10秒),这些小块是并行处理的。检测语音片段的流程如下:
1- 在帧级别计算后验概率。 2- 对后验概率应用阈值。 3- 在此基础上推导出候选语音段。 4- 在每个候选段内应用能量VAD(可选)。 5- 合并过于接近的段。 6- 移除过短的段。 7- 双重检查语音段(可选)。
- Parameters:
audio_file (str) – 音频文件的路径。
large_chunk_size (float) – 从输入音频文件中顺序读取的大块的大小(以秒为单位)。
small_chunk_size (float) – 从大块中提取的小块的大小(以秒为单位)。 音频信号在小块内并行处理。 请注意,large_chunk_size/small_chunk_size 必须是一个整数。
overlap_small_chunk (bool) – 如果为True,它会创建重叠的小块(重叠50%)。 重叠块的概率使用汉明窗进行组合。
apply_energy_VAD (bool) – 如果为True,则在检测到的语音段上使用基于能量的VAD。 神经网络VAD通常会创建较长的段,并且倾向于将接近的段合并在一起。能量VAD后处理可以用于实现细粒度的语音活动检测。 能量阈值由activation_th和deactivation_th管理(见下文)。
double_check (bool) – 如果为True,则使用神经VAD双重检查候选语音段是否确实包含语音。根据speech_th参数(见下文)应用神经网络提供的平均后验概率的阈值。
close_th (float) – 如果边界之间的距离小于close_th,则这些段将被合并。
len_th (float) – 如果段的长度小于close_th,则这些段将被合并。
activation_th (float) – 神经后验概率的阈值,超过该阈值时开始一个语音段。
deactivation_th (float) – 神经后验概率的阈值,低于该值时结束语音段。
en_activation_th (float) – 当能量超过activation_th时,新的语音段开始。 这仅在apply_energy_VAD为True时有效。
en_deactivation_th (float) – 当能量小于等于 deactivation_th 时,该段被视为结束。 仅在 apply_energy_VAD 为 True 时生效。
speech_th (float) – 候选语音段内平均后验概率的阈值。低于该阈值时,该段将被重新分配到非语音区域。仅在 double_check 为 True 时生效。
- Returns:
boundaries – torch.Tensor 包含偶数位置的语音片段的开始秒数和奇数位置的对应结束秒数 (例如,[1.0, 1.5, 5.0, 6.0] 表示我们有两个语音片段;
一个从1.0到1.5秒,另一个从5.0到6.0秒)。
- Return type:
torch.Tensor