Bank clients hate PINs and secret questions. We helped one bank implement voice biometrics — now the client confirms a transfer with a single phrase. According to the Central Bank, 68% of users prefer voice input over digits. Our system analyzes spectrum, timbre, and intonation, comparing the voice to a reference. Security and convenience without extra steps.
The model stack is constantly updated: ResNet has been replaced by ECAPA-TDNN and WavLM, boosting accuracy by 15–20%. We track state-of-the-art and adopt best practices. Beyond EER, we use F1-score, precision/recall, and latency p99. For production, target latency < 200 ms on GPU T4.
We have over 5 years of experience and more than 20 implementations in banks and call centers. We use advanced models: SpeechBrain for extracting 512-dimensional embeddings and AASIST for anti-spoofing. We guarantee 99% accuracy and full compliance with 152-FZ. One project reduced fraud transactions by 65% in a quarter, saving the client 2.5 million rubles annually.
Voice Biometrics System Architecture
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"
}
Why Passive Biometrics is More Convenient than Active?
Passive biometrics does not require the client to utter a code phrase. They simply talk to an operator or voice assistant — the system analyzes their natural speech. Active biometrics achieves EER 0.5–1.5%, but the user must remember a phrase. Passive gives EER 2–5%, but offers higher convenience. We choose the mode based on the task: for financial transactions we recommend active; for call centers, passive.
| Parameter | Active Biometrics | Passive Biometrics |
|---|---|---|
| EER | 0.5–1.5% | 2–5% |
| Customer convenience | Lower (needs phrase) | Higher (free speech) |
| Verification time | 3–5 seconds | 8–15 seconds |
| Noise robustness | Higher | Lower (needs clean audio) |
How Anti-Spoofing Protects Against Deepfakes?
Modern deepfakes synthesize voice indistinguishable to the human ear. We use an anti-spoofing model based on AASIST (graph neural network). It analyzes phase spectrograms and detects artifacts not audible to humans. Our anti-spoofing achieves EER 0.8% on the standard ASVspoof 2021 dataset. Without such protection, the system is vulnerable to attacks. We estimate that deploying anti-spoofing reduces losses from deepfake attacks by 90%, saving a large bank up to 3 million rubles annually.
How We Ensure 152-FZ Compliance?
We collect and process biometric data in accordance with legal requirements. We use AES-256 encryption for embedding transmission and storage. The system logs all access operations to profiles. We provide consent revocation mechanisms — when a client is deleted, their embeddings are erased within 30 days.
| Model | EER (%) | FAR (%) | FRR (%) | GPU Requirements |
|---|---|---|---|---|
| ECAPA-TDNN | 1.2 | 0.5 | 2.5 | 1x T4 |
| ResNet (baseline) | 2.8 | 1.5 | 5.0 | 1x T4 |
Development and Deployment Process
- Requirements audit: discuss scenarios (verification by PIN, identification in call center).
- Data collection and labeling: record voices of 100–500 clients (consent per 152-FZ).
- Model selection: ECAPA-TDNN for embeddings (512-D), AASIST for anti-spoofing.
- Integration: connect your CRM API, set up PostgreSQL with pgvector for embedding storage.
- Testing: A/B test on real clients, measure FAR/FRR.
- Deployment: Docker containerization, load testing (500 RPS).
Timeline: basic system — 6–8 weeks. With anti-spoofing and compliance — 3–4 months. Cost is calculated individually after audit.
Deployment Checklist
- [ ] Define use case (active/passive)
- [ ] Collect audio recordings for enrollment (minimum 100 clients)
- [ ] Deploy ECAPA-TDNN and anti-spoofing models
- [ ] Integrate with CRM via REST API
- [ ] Configure pgvector for fast search
- [ ] Test in sandbox with simulated attacks
- [ ] Launch A/B test on 10% of traffic
What's Included in the Work
- Development of a voice profile enrollment module
- Verification API (REST/gRPC)
- Anti-spoofing model (AASIST or equivalent)
- Audio quality assessment module
- Integration with CRM (1C, Bitrix24, AmoCRM)
- Documentation (architecture, API, admin guide)
- Testing (unit, integration, load)
- Training of the client's team
- 6-month code warranty
Get a consultation on implementation — we'll assess your scenario and prepare a proposal. Contact us to launch a pilot with your data. Experience: over 5 years, more than 20 successful implementations.







