VAD
Voice Activity Detection — автоматическое определение участков аудио, содержащих речь.
Что такое VAD
VAD (Voice Activity Detection, определение речевой активности) — компонент, определяющий временные отрезки аудиозаписи, на которых присутствует речь, и отделяющий их от тишины, фонового шума и нережевых звуков.
VAD применяется как предобработка перед ASR: убрать паузы, сэкономить время inference и VRAM.
Silero VAD
Наиболее популярный open-source VAD. Лёгкая модель (~1 MB), быстрая, точная. Работает в реальном времени:
import torch
model, utils = torch.hub.load(
repo_or_dir='snakers4/silero-vad',
model='silero_vad',
force_reload=False,
)
(get_speech_timestamps, _, read_audio, _, _) = utils
wav = read_audio('audio.wav', sampling_rate=16000)
speech_timestamps = get_speech_timestamps(wav, model, sampling_rate=16000)
# [{start: 0, end: 4800}, {start: 6400, end: 12800}, ...]
VAD в Whisper pipeline
faster-whisper включает встроенный VAD:
segments, info = model.transcribe(
"audio.mp3",
vad_filter=True, # Включить VAD
vad_parameters=dict(
min_silence_duration_ms=500, # Минимальная тишина для разбивки
speech_pad_ms=400, # Padding вокруг речевых сегментов
)
)
WebRTC VAD
Классическая non-ML реализация от Google (из проекта WebRTC). Работает на CPU, очень быстрая, но менее точная, чем Silero. Доступна через webrtcvad Python-пакет.
Streaming VAD
Для real-time приложений VAD работает на коротких фреймах (например, 30 мс) и накапливает решения:
# Поток: каждые 30ms принять решение — речь или тишина
for chunk in audio_stream:
is_speech = vad_model(chunk)
if is_speech:
buffer.append(chunk)
elif buffer: # Закончилась речь
transcribe(buffer)
buffer = []
Связанные термины
- ASR — VAD как препроцессинг перед распознаванием
- endpointing — определение конца высказывания (похоже на VAD)
- диаризация — использует VAD как первый шаг
- faster-whisper — встроенный VAD-фильтр
Готовы запустить GPU-задачу?
Запустить GPU-сервер