speechbrain.inference.VAD 模块
指定语音活动检测 (VAD) 模块的推理接口。
- 作者
Aku Rouhe 2021
Peter Plantinga 2021
Loren Lugosch 2020
Mirco Ravanelli 2020
Titouan Parcollet 2021
Abdel Heba 2021
Andreas Nautsch 2022, 2023
Pooneh Mousavi 2023
Sylvain de Langen 2023
Adel Moumen 2023
Pradnya Kandarkar 2023
摘要
类
一个使用预训练模型的现成语音活动检测 (VAD) 类。 |
参考
- class speechbrain.inference.VAD.VAD(*args, **kwargs)[source]
基类:
Pretrained
一个使用预训练模型的现成语音活动检测 (VAD) 类。
示例
>>> 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 文件中指定的神经网络模型输出输入音频文件的帧级语音概率。为了使这段代码既可并行又可扩展到长序列,它采用了双重窗口方法。首先,我们按顺序读取输入信号的非重叠大块。然后,我们将大块分割成小块并并行处理。
- 参数:
- 返回:
prob_vad – 包含输入音频文件帧级语音概率的 torch.Tensor。
- 返回类型:
torch.Tensor
- get_speech_prob_chunk(wavs, wav_lens=None)[source]
输出输入音频块的帧级后验概率。接近零的输出表示语音活动概率低的时间步,而接近一的输出可能包含语音。
- 参数:
wavs (torch.Tensor) – 波形批次 [batch, time, channels] 或 [batch, time],取决于模型。请确保采样率 fs=16000 Hz。
wav_lens (torch.Tensor) – 相对于批次中最长波形的波形长度,张量形状为 [batch]。最长的相对长度应为 1.0,其他为 len(waveform) / max_length。用于忽略填充。
- 返回:
编码后的批次
- 返回类型:
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),并输出每个检测到的语音区域的开始/结束秒数(或样本数)。
- 参数:
prob_th (torch.Tensor) – 帧级二值决策(语音帧为 1,非语音帧为 0)。该张量可以通过 apply_threshold 获取。
output_value ('seconds' or 'samples') – 当设置为 'seconds' 选项时,返回的边界以秒为单位,否则以样本为单位。
- 返回:
boundaries – torch.Tensor,其中偶数位置包含语音片段的开始秒(或样本),奇数位置包含对应的结束秒(例如,[1.0, 1.5, 5.0, 6.0] 表示我们有两个语音片段;
一个从 1.0 到 1.5 秒,另一个从 5.0 到 6.0 秒)。
- 返回类型:
torch.Tensor
- remove_short_segments(boundaries, len_th=0.25)[source]
移除过短的片段。
- 参数:
boundaries (torch.Tensor) – 包含语音边界的 torch.Tensor。可以使用 get_boundaries 方法派生。
len_th (float) – 如果片段的长度小于 close_th,则片段将被合并。
- 返回:
移除了短片段的新边界。
- 返回类型:
new_boundaries
- save_boundaries(boundaries, save_path=None, print_boundaries=True, audio_file=None)[source]
将边界保存到文件(和/或打印)为可读格式。
- 参数:
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。这有助于设置能量阈值。
- 参数:
- 返回:
经过能量 VAD 后处理的新边界。
- 返回类型:
new_boundaries
- 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 区域。
- 参数:
vad_out (torch.Tensor) – torch.Tensor,其中每个语音帧为 1,每个非语音帧为 0。
audio_file (path) – 用于计算 vad_out 的原始音频文件
time_resolution (float) – vad_out 信号的时间分辨率。
- 返回:
vad_out 张量的上采样版本。
- 返回类型:
vad_signal
- upsample_boundaries(boundaries, audio_file)[source]
基于输入边界,此方法创建一个信号,语音时为 1,非语音时为 0。vad 信号与输入信号具有相同的分辨率,并且可以与输入信号一起打开(例如,使用 audacity)以直观地确定 VAD 区域。
- 参数:
boundaries (torch.Tensor) – 包含语音片段边界的 torch.Tensor。
audio_file (path) – 用于计算 vad_out 的原始音频文件
- 返回:
与输入信号分辨率相同的输出 vad 信号。
- 返回类型:
vad_signal
- double_check_speech_segments(boundaries, audio_file, speech_th=0.5)[source]
输入检测到的语音片段的边界,并(使用神经网络 VAD)复核它们是否确实包含语音。
- 参数:
boundaries (torch.Tensor) – 包含语音片段边界的 torch.Tensor。
audio_file (path) – 用于计算 vad_out 的原始音频文件。
speech_th (float) – 用于确认语音的平均后验概率阈值。低于该阈值,片段将被重新分配到非语音区域。
- 返回:
确认存在语音活动的片段边界。
- 返回类型:
new_boundaries
- 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- 复核语音片段(可选)。
- 参数:
audio_file (str) – 音频文件路径。
large_chunk_size (float) – 从输入音频文件中按顺序读取的大块的大小(以秒为单位)。
small_chunk_size (float) – 从大块中提取的小块的大小(以秒为单位)。音频信号在小块内并行处理。注意 large_chunk_size/small_chunk_size 必须是整数。
overlap_small_chunk (bool) – 如果为 True,则创建重叠的小块(50% 重叠)。重叠块的概率使用 hamming 窗口组合。
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 时激活。
- 返回:
boundaries – torch.Tensor,其中偶数位置包含语音片段的开始秒,奇数位置包含对应的结束秒(例如,[1.0, 1.5, 5.0, 6.0] 表示我们有两个语音片段;
一个从 1.0 到 1.5 秒,另一个从 5.0 到 6.0 秒)。
- 返回类型:
torch.Tensor