Разработка системы верификации лица (Face Verification, 1:1)

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Разработка системы верификации лица (Face Verification, 1:1)
Средняя
от 1 недели до 3 месяцев
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Разработка системы верификации лица (Face Verification, 1:1)

Верификация лица — ответ на вопрос «это тот же человек?». В отличие от идентификации (1:N поиск по базе), верификация сравнивает два конкретных изображения и возвращает True/False. Основные применения: подтверждение личности при онлайн-регистрации, проверка соответствия фото на документе и селфи, аутентификация при входе в мобильное приложение.

Алгоритм верификации

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  # настраивается под FAR/FRR требования

    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'}

        # Cosine similarity между ArcFace embeddings
        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 vs FRR

FAR (False Accept Rate) — вероятность принять чужого за своего. Критично для безопасности. FRR (False Reject Rate) — вероятность отклонить своего. Влияет на UX.

Эти метрики противоположны: снижение FAR повышает FRR. Выбор порога зависит от применения:

Применение Приоритет Типичный FAR
Мобильная аутентификация UX > Security 0.1–1%
Онлайн-банкинг, KYC Security > UX 0.01–0.1%
Пограничный контроль Максимальная безопасность < 0.001%
Физический доступ (офис) Баланс 0.01–0.1%

EER (Equal Error Rate) — точка, где FAR = FRR. Для ArcFace на LFW: EER ≈ 0.17%.

Живость (Liveness Detection)

Без anti-spoofing верификация уязвима к атакам: фотография на экране, 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)

Для задач Know Your Customer: сравнение фото на документе (паспорт, права) с селфи.

Специфика: фото в документах часто низкого качества, могут быть сканами с водяными знаками, разными условиями съёмки. Предобработка документного фото: детекция зоны фотографии, исправление перспективы, нормализация яркости.

Точность верификации ArcFace при сопоставлении документ↔селфи: 94–97% TAR@FAR=0.1%.

Метрики и бенчмарки

  • LFW (Labeled Faces in the Wild): академический стандарт. ArcFace: 99.83%
  • IJB-B/IJB-C: более сложные датасеты с видео. ArcFace TAR@FAR=1e-4: 94.0/96.5%
  • MegaFace Challenge: 1M дистракторов. ArcFace Rank-1: 98.35%
Применение Срок
Верификация в мобильном приложении 2–3 недели
KYC-верификация с документами 3–5 недель
Высоконадёжная верификация + liveness 4–7 недель