Разработка AI-системы голосовой биометрии для верификации клиента

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1566 услуг
Разработка AI-системы голосовой биометрии для верификации клиента
Сложный
~1-2 недели
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1288
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    902
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1122
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    859

Разработка AI-системы голосовой биометрии для верификации клиента

Голосовая биометрия заменяет секретные вопросы и PIN-коды для идентификации клиента. Пользователь просто говорит — система сравнивает голос с эталоном в базе. Применяется в банках, колл-центрах, мобильных приложениях.

Архитектура системы голосовой биометрии

from dataclasses import dataclass
import torch
from speechbrain.pretrained import SpeakerRecognition

@dataclass
class BiometricProfile:
    customer_id: str
    voice_embeddings: list  # несколько записей для надёжности
    enrollment_date: str
    last_updated: str
    enrollment_quality: float  # 0-1

class VoiceBiometricSystem:
    def __init__(self):
        self.model = SpeakerRecognition.from_hparams(
            source="speechbrain/spkrec-ecapa-voxceleb",
            savedir="tmp_biometric"
        )
        self.db = BiometricDatabase()
        self.anti_spoofing = AntiSpoofingModel()

    async def enroll_customer(
        self,
        customer_id: str,
        audio_samples: list[bytes]  # 3–5 записей по 5–15 сек
    ) -> BiometricProfile:
        """Регистрируем голосовой профиль клиента"""
        embeddings = []
        quality_scores = []

        for audio in audio_samples:
            # Проверка качества записи
            quality = self.assess_audio_quality(audio)
            if quality < 0.5:
                raise ValueError(f"Низкое качество записи: SNR={quality:.2f}")

            embedding = self.extract_embedding(audio)
            embeddings.append(embedding)
            quality_scores.append(quality)

        profile = BiometricProfile(
            customer_id=customer_id,
            voice_embeddings=embeddings,
            enrollment_date=datetime.utcnow().isoformat(),
            last_updated=datetime.utcnow().isoformat(),
            enrollment_quality=sum(quality_scores) / len(quality_scores)
        )
        await self.db.save_profile(profile)
        return profile

    async def verify_customer(
        self,
        customer_id: str,
        audio: bytes,
        threshold: float = 0.75
    ) -> dict:
        """Верифицируем клиента по голосу"""
        # 1. Anti-spoofing проверка
        is_genuine = await self.anti_spoofing.check(audio)
        if not is_genuine:
            return {
                "verified": False,
                "reason": "synthetic_voice_detected",
                "score": 0
            }

        # 2. Загружаем профиль
        profile = await self.db.get_profile(customer_id)
        if not profile:
            return {"verified": False, "reason": "no_profile", "score": 0}

        # 3. Сравниваем с каждым образцом в профиле
        test_embedding = self.extract_embedding(audio)
        scores = []
        for enrolled_embedding in profile.voice_embeddings:
            score = self.cosine_similarity(test_embedding, enrolled_embedding)
            scores.append(score)

        max_score = max(scores)
        avg_score = sum(scores) / len(scores)
        final_score = max_score * 0.6 + avg_score * 0.4

        return {
            "verified": final_score >= threshold,
            "score": round(final_score, 4),
            "threshold": threshold,
            "confidence": "high" if final_score > 0.85 else "medium" if final_score > 0.75 else "low"
        }

Пассивная vs активная биометрия

Активная — клиент произносит заданную фразу («Мой голос — мой пароль»): EER 0.5–1.5%, высокая надёжность.

Пассивная — клиент говорит что угодно (разговор с оператором): EER 2–5%, более удобна, но ниже безопасность.

Требования к минимальной длительности аудио

MINIMUM_AUDIO_REQUIREMENTS = {
    "enrollment": 5.0,   # секунд минимум на каждый образец
    "verification": 3.0, # секунд для надёжной верификации
    "passive_verification": 8.0  # при пассивном режиме
}

Соответствие требованиям

152-ФЗ «О персональных данных»: голосовые биометрические данные — специальная категория. Требуется явное согласие клиента, раздельное хранение, право на удаление.

Сроки: биометрическая система верификации — 6–8 недель. С anti-spoofing и compliance — 3–4 месяца.