Реализация верификации говорящего (Speaker Verification)
Speaker Verification отвечает на вопрос «является ли этот голос голосом конкретного человека» — бинарная задача с порогом уверенности. Применяется для биометрической аутентификации, защиты голосовых ботов от мошенничества, двухфакторной авторизации через голос.
Типы верификации
- Text-Dependent — фраза зафиксирована («моя фраза-пароль»). EER 0.5–1.5%, но уязвима к replay-атакам
- Text-Independent — любая фраза. EER 1–3%, практичнее
- Anti-Spoofing — дополнительная защита от синтезированного/записанного голоса
Реализация на ECAPA-TDNN
from speechbrain.pretrained import SpeakerRecognition
import torchaudio
verifier = SpeakerRecognition.from_hparams(
source="speechbrain/spkrec-ecapa-voxceleb",
savedir="tmp_verification"
)
def verify_speaker(
enrollment_audio: str,
test_audio: str,
threshold: float = 0.25
) -> tuple[bool, float]:
"""
enrollment_audio: эталонная запись зарегистрированного пользователя
threshold: порог для Accept/Reject (подбирается под нужный FAR/FRR)
"""
score, prediction = verifier.verify_files(enrollment_audio, test_audio)
is_same = float(score) >= threshold
return is_same, float(score)
Настройка порога под требования безопасности
| Порог | FAR | FRR | Применение |
|---|---|---|---|
| 0.1 | 5% | 1% | Низкий риск |
| 0.25 | 1% | 5% | Балансированный |
| 0.4 | 0.1% | 15% | Высокая безопасность |
FAR = False Accept Rate (чужой как свой), FRR = False Reject Rate (свой как чужой).
Anti-Spoofing
# Проверка на синтетический голос
from speechbrain.pretrained import EncoderClassifier
antispoofing = EncoderClassifier.from_hparams(
source="speechbrain/asvspoof-cqcc-lcnn",
savedir="tmp_antispoofing"
)
def is_genuine(audio_path: str) -> bool:
signal, _ = torchaudio.load(audio_path)
prediction = antispoofing.classify_batch(signal)
return prediction[3][0] == "genuine"
Лучшие практики
- Собирать 3–5 эталонных фраз при регистрации (усреднение улучшает EER на 30%)
- Обновлять эталон раз в 3–6 месяцев (голос меняется)
- Добавлять временну́ю метку и nonce для защиты от replay-атак
Сроки: базовая система — 1 неделя. С anti-spoofing и управлением профилями — 2–3 недели.







