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 $22k–32k 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 $27k–39k 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.







