Проблема подтверждения личности
При регистрации в банке или мобильном приложении требуется удостовериться, что пользователь — действительно тот, за кого себя выдаёт. 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 дня. Стоимость рассчитывается индивидуально.







