Реализация верификации говорящего (Speaker Verification)

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Реализация верификации говорящего (Speaker Verification)
Средняя
от 1 недели до 3 месяцев
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Реализация верификации говорящего (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 недели.