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

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Розробка системи верифікації обличчя (Face Verification, 1:1)
Середній
від 1 тижня до 3 місяців
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Розробка систем верифікації облич (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'}

        # Косинусна подібність між 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%.

Детекція живості

Без 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 тижнів