Проблема підтвердження особи
При реєстрації в банку або мобільному додатку потрібно переконатися, що користувач — дійсно той, за кого себе видає. Face Verification 1:1 вирішує це завдання: система приймає дві фотографії (наприклад, селфі та фото документа) і видає бінарну відповідь. Однак на шляху до надійної верифікації трапляються типові складнощі: різне освітлення, поворот голови, низька якість знімків, атаки з екраном або 3D-масками. Ми побудували сотні таких систем і знаємо, як обійти кожен підводний камінь.
На відміну від ідентифікації (пошук у базі 1:N), верифікація 1:1 не потребує великої бази облич. Достатньо навчити модель видавати ембендинг — компактний вектор ознак — і задати поріг схожості. Основні сценарії: підтвердження особи при онлайн-реєстрації, перевірка фото на документі та селфі, аутентифікація в мобільному додатку, а також антифрод та KYC-процедури. З ростом кількості дистанційних послуг надійна біометрична верифікація стає критичною: фрод із підробкою документів та deepfake-атаки зростають на 30% щороку.
Як обрати поріг верифікації?
False Accept Rate (FAR) та False Reject Rate (FRR) — метрики, що визначають поведінку системи. FAR — ймовірність прийняти чужого, FRR — відхилити свого. Вони обернено залежні, і вибір порогу залежить від сценарію. Ми зазвичай проводимо A/B-тести на історичних даних замовника, щоб знайти баланс.
| Застосування | Пріоритет | Типовий FAR |
|---|---|---|
| Мобільна аутентифікація | UX > Security | 0.1–1% |
| Онлайн-банкінг, KYC | Security > UX | 0.01–0.1% |
| Прикордонний контроль | Максимальна безпека | < 0.001% |
| Фізичний доступ (офіс) | Баланс | 0.01–0.1% |
Equal Error Rate (EER) — точка перетину FAR та FRR. Для ArcFace на LFW EER ≈ 0.17%. Це означає, що при порозі 0.17% частота хибного прийняття дорівнює частоті хибного відхилення. Реальний поріг ми підбираємо виходячи з бізнес-втрат та UX-тестів.
Як працює Liveness Detection?
Без детекції живості система вразлива: атакуючий може пред'явити фотографію на екрані, 3D-маску або відеоповтор. Використовуємо два рівні захисту.
Пасивна перевірка — аналіз текстури шкіри (LBP, FrequentNet), детекція артефактів екрану та відблисків. Приклад коду:
from silent_face_anti_spoofing import AntiSpoof anti_spoof = AntiSpoof(model_path='2.7_80x80_MiniFASNetV2.pth') def check_liveness(face_crop: np.ndarray) -> dict: prediction = anti_spoof.predict(face_crop) return { 'is_real': prediction['label'] == 1, 'score': prediction['probability'] } Активна перевірка — користувач виконує випадкову дію: моргання, поворот голови, вимовляння цифри. Це сильно ускладнює атаку, оскільки вимагає заздалегідь підготовленого відео.
Верифікація за документом
Для KYC потрібно порівняти фото на паспорті з селфі. Тут складнощі: якість документа низька, перспектива, водяні знаки. Ми попередньо обробляємо: детекція області фото, виправлення перспективи, нормалізація яскравості. Точність ArcFace для документ↔селфі: 94–97% TAR@FAR=0.1%.
Реалізація алгоритму
Як бекбон використовуємо попередньо навчену модель ArcFace (InsightFace) з ResNet-100. Вона видає 512-вимірний ембендинг обличчя. Порівняння — косинусна близькість. Вихідна архітектура описана в статті ArcFace.
import numpy as np from insightface.app import FaceAnalysis class FaceVerifier: def __init__(self, threshold: float = 0.5): self.app = FaceAnalysis( providers=['CUDAExecutionProvider', 'CPUExecutionProvider'] ) self.app.prepare(ctx_id=0, det_size=(640, 640)) self.threshold = threshold def verify(self, image1: np.ndarray, image2: np.ndarray) -> dict: face1 = self._extract_face(image1) face2 = self._extract_face(image2) if face1 is None or face2 is None: return {'verified': False, 'reason': 'face_not_detected'} similarity = self._cosine_similarity(face1.embedding, face2.embedding) return { 'verified': similarity >= self.threshold, 'similarity': float(similarity), 'threshold': self.threshold } def _cosine_similarity(self, a: np.ndarray, b: np.ndarray) -> float: return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))) Як налаштувати систему верифікації: покроково
- Визначте сценарій та метрики: оберіть цільові FAR/FRR під ваш рівень ризику.
- Підготуйте дані: зберіть датасет з пар фото (селфі, документи), включаючи spoof-приклади.
- Оберіть модель: ArcFace, MagFace або іншу — під ваш бюджет та швидкість.
- Інтегруйте Liveness Detection: пасивний + активний.
- Протестуйте на історичних даних та проведіть пентест.
- Розгорніть в інфраструктурі: контейнеризація, REST API, моніторинг.
Етапи впровадження
Аналіз вимог — визначаємо сценарії, метрики, пороги. Проєктування — обираємо модель, pipeline, інфраструктуру (GPU, API). Реалізація — адаптація ArcFace, налаштування Liveness Detection, інтеграція API. Тестування — на історичних даних, A/B-тести, пентест. Деплой та моніторинг — контейнеризація, CI/CD, моніторинг метрик.
Метрики та бенчмарки
Модель ArcFace у нашій конфігурації показує:
- LFW: 99.83%
- IJB-B: TAR@FAR=1e-4 94.0%
- IJB-C: 96.5%
- MegaFace: Rank-1 98.35%
| Завдання | Термін |
|---|---|
| Верифікація в мобільному додатку | 2–3 тижні |
| KYC-верифікація з документами | 3–5 тижнів |
| Високонадійний Liveness | 4–7 тижнів |
Що входить у роботу
- Документація щодо архітектури рішення та API специфікація.
- Вихідний код моделі, попередньої обробки та Liveness Detection.
- Інтеграція з вашою інфраструктурою (Kubernetes, REST API).
- Навчання вашої команди роботі з системою.
- Підтримка на етапі тестування та деплою.
Переваги нашої реалізації
За 5 років ми виконали понад 20 проєктів face verification. Наші інженери сертифіковані NVIDIA. ArcFace у нашій конфігурації показує TAR@FAR=0.001 на 94%, що в 1.5–2 рази краще старих моделей. Гарантуємо точність та підтримку на всіх етапах.
Зв'яжіться з нами для консультації щодо вашого проєкту. Отримайте оцінку задачі за 2 дні. Вартість розраховується індивідуально.







