В этом руководстве мы рассмотрим продвинутый, но практичный рабочий процесс с использованием SpeechBrain. Мы начнём с генерации собственных чистых образцов речи с помощью gTTS, намеренно добавим шум для имитации реальных сценариев, а затем применим модель SpeechBrain MetricGAN+ для улучшения аудио. После очистки аудио мы запустим автоматическое распознавание речи с помощью системы CRDNN с пересчётом языковой модели и сравним уровень ошибок в словах до и после улучшения.
Установка библиотек и инструментов
Мы начнём с настройки нашей среды Colab со всеми необходимыми библиотеками и инструментами. Мы установим SpeechBrain вместе с пакетами для обработки аудио, определим основные пути и параметры, а также подготовим устройство, чтобы мы были готовы к созданию нашего конвейера для обработки речи.
“`python
!pip -q install -U speechbrain gTTS jiwer pydub librosa soundfile torchaudio
!apt -qq install -y ffmpeg >/dev/null
import os, time, math, random, warnings, shutil, glob
warnings.filterwarnings(“ignore”)
import torch, torchaudio, numpy as np, librosa, soundfile as sf
from gtts import gTTS
from pydub import AudioSegment
from jiwer import wer
from pathlib import Path
from dataclasses import dataclass
from typing import List, Tuple
from IPython.display import Audio, display
from speechbrain.pretrained import EncoderDecoderASR, SpectralMaskEnhancement
root = Path(“sbdemo”); root.mkdir(existok=True)
sr = 16000
device = “cuda” if torch.cuda.is_available() else “cpu”
“`
Генерация и обработка аудио
Мы определяем небольшие утилиты, которые обеспечивают работу нашего конвейера от начала до конца. Мы синтезируем речь с помощью gTTS и конвертируем её в WAV, внедряем контролируемый гауссовский шум с целевым SNR, а также добавляем вспомогательные функции для предварительного просмотра аудио и нормализации текста. Мы также создаём класс Sample для аккуратного отслеживания путей каждого высказывания в чистом, шумном и улучшенном виде.
“`python
def ttstowav(text: str, out_wav: str, lang=”en”):
mp3 = out_wav.replace(“.wav”, “.mp3”)
gTTS(text=text, lang=lang).save(mp3)
a = AudioSegment.fromfile(mp3, format=”mp3″).setchannels(1).setframerate(sr)
a.export(out_wav, format=”wav”)
os.remove(mp3)
def addnoise(inwav: str, snrdb: float, outwav: str):
y, = librosa.load(inwav, sr=sr, mono=True)
rms = np.sqrt(np.mean(y2) + 1e-12)
n = np.random.normal(0, 1, len(y))
n = n / (np.sqrt(np.mean(n2)+1e-12))
targetnrms = rms / (10(snr_db/20))
ynoisy = np.clip(y + n * targetn_rms, -1.0, 1.0)
sf.write(outwav, ynoisy, sr)
def play(title, path):
print(f” {title}: {path}”)
display(Audio(path, rate=sr))
def clean_txt(s: str) -> str:
return ” “.join(“”.join(ch.lower() if ch.isalnum() or ch.isspace() else ” ” for ch in s).split())
@dataclass
class Sample:
text: str
clean_wav: str
noisy_wav: str
enhanced_wav: str
“`
Создание и обработка образцов
“`python
sentences = [
“Искусственный интеллект меняет повседневную жизнь.”,
“Инструменты с открытым исходным кодом способствуют быстрым исследованиям и инновациям.”,
“SpeechBrain предоставляет гибкие конвейеры для обработки речи на Python.”
]
samples: List[Sample] = []
print(” Синтезируем короткие высказывания с помощью gTTS…”)
for i, s in enumerate(sentences, 1):
cw = str(root/f”clean_{i}.wav”)
nw = str(root/f”noisy_{i}.wav”)
ew = str(root/f”enhanced_{i}.wav”)
ttstowav(s, cw)
addnoise(cw, snrdb=3.0 if i%2 else 0.0, out_wav=nw)
samples.append(Sample(text=s, cleanwav=cw, noisywav=nw, enhanced_wav=ew))
play(“Clean #1”, samples[0].clean_wav)
play(“Noisy #1”, samples[0].noisy_wav)
“`
Загрузка предварительно обученных моделей
“`python
print(” Загрузка предварительно обученных моделей (это загружается один раз) …”)
asr = EncoderDecoderASR.from_hparams(
source=”speechbrain/asr-crdnn-rnnlm-librispeech”,
run_opts={“device”: device},
savedir=str(root/”pretrained_asr”),
)
enhancer = SpectralMaskEnhancement.from_hparams(
source=”speechbrain/metricgan-plus-voicebank”,
run_opts={“device”: device},
savedir=str(root/”pretrained_enh”),
)
“`
Улучшение файла
“`python
def enhancefile(inwav: str, out_wav: str):
sig = enhancer.enhancefile(inwav)
if sig.dim() == 1: sig = sig.unsqueeze(0)
torchaudio.save(out_wav, sig.cpu(), sr)
def transcribe(path: str) -> str:
hyp = asr.transcribe_file(path)
return clean_txt(hyp)
def evalpair(reftext: str, wav_path: str) -> Tuple[str, float]:
hyp = transcribe(wav_path)
return hyp, wer(cleantxt(reftext), hyp)
“`
Оценка результатов
“`python
print(“\n Транскрибируем шумные и улучшенные версии (MetricGAN+)…”)
rows = []
t0 = time.time()
for smp in samples:
enhancefile(smp.noisywav, smp.enhanced_wav)
hypnoisy, wernoisy = evalpair(smp.text, smp.noisywav)
hypenh, werenh = evalpair(smp.text, smp.enhancedwav)
rows.append((smp.text, hypnoisy, wernoisy, hypenh, werenh))
t1 = time.time()
“`
Вывод результатов
“`python
def fmt(x): return f”{x:.3f}” if isinstance(x, float) else x
print(f”\n Время вывода: {t1 – t0:.2f}s на {device.upper()}”)
print(“\n# —- Результаты (Шумный → Улучшенный) —-“)
for i, (ref, hN, wN, hE, wE) in enumerate(rows, 1):
print(f”\nВысказывание {i}”)
print(“Ref: “, ref)
print(“Шумный ASR:”, hN)
print(“WER шумный:”, fmt(wN))
print(“Enh ASR: “, hE)
print(“WER улучш.:”, fmt(wE))
“`
В этом руководстве мы рассмотрели, как создать конвейер для улучшения речи и автоматического распознавания речи (ASR) в Python с использованием SpeechBrain. Мы сгенерировали аудио, добавили к нему шум, улучшили его и, наконец, транскрибировали, чтобы получить практические знания о том, как эти модели повышают точность распознавания в шумных условиях. Результаты подчёркивают практические преимущества использования технологий обработки речи с открытым исходным кодом.
1. Какие инструменты и библиотеки используются для генерации и обработки аудио в этом руководстве?
Ответ: в этом руководстве используются следующие инструменты и библиотеки: SpeechBrain, gTTS, jiwer, pydub, librosa, soundfile, torchaudio, ffmpeg.
2. Как в этом руководстве имитируется реальный сценарий для аудио?
Ответ: в этом руководстве для имитации реального сценария к сгенерированным чистым образцам речи добавляется контролируемый гауссовский шум с целевым SNR (Signal-to-Noise Ratio).
3. Какие модели используются для улучшения аудио и автоматического распознавания речи в этом руководстве?
Ответ: для улучшения аудио используется модель SpeechBrain MetricGAN+, а для автоматического распознавания речи — система CRDNN с пересчётом языковой модели.
4. Какие шаги включает в себя процесс создания конвейера для улучшения речи и автоматического распознавания речи в этом руководстве?
Ответ: процесс включает в себя генерацию чистых образцов речи с помощью gTTS, добавление шума для имитации реальных сценариев, применение модели SpeechBrain MetricGAN+ для улучшения аудио, запуск автоматического распознавания речи с помощью системы CRDNN и сравнение уровня ошибок в словах до и после улучшения.
5. Какие результаты были получены после применения модели для улучшения аудио?
Ответ: после применения модели SpeechBrain MetricGAN+ для улучшения аудио было обнаружено, что уровень ошибок в словах при автоматическом распознавании речи снизился, что подчёркивает практические преимущества использования технологий обработки речи с открытым исходным кодом.