Розробка системи розпізнавання облич під ключ

Розробка системи розпізнавання облич під ключ

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

Часті запитання

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

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

Розробка системи розпізнавання облич під ключ

На прохідній підприємства камера захоплює обличчя співробітника під гострим кутом — система видає хибну відмову, людина стоїть у черзі, охорона перемикається на ручну перевірку. 80% таких інцидентів — наслідок неоптимального пайплайну: модель не справляється з бічним освітленням або поріг подібності виставлений без урахування реального розкиду ембендінгів. Ми проектуємо production-системи розпізнавання облич, які стабільно працюють у жорстких умовах: від турнікетів до пошуку серед мільйонів облич на міських камерах. За 5+ років впроваджено 20+ систем з FAR (False Acceptance Rate) менше 1e-5 при FRR (False Rejection Rate) менше 5% на реальних даних замовників. Окупність — менше року за рахунок автоматизації доступу та зниження навантаження на охорону. Вартість проекту починається від 15 000$.

Повний пайплайн

import cv2 import numpy as np from insightface.app import FaceAnalysis class FaceRecognitionSystem: def __init__(self, db_path: str, threshold: float = 0.5): # InsightFace об'єднує детекцію + alignment + embedding self.app = FaceAnalysis( providers=['CUDAExecutionProvider', 'CPUExecutionProvider'] ) self.app.prepare(ctx_id=0, det_size=(640, 640)) self.threshold = threshold self.face_db = self._load_database(db_path) def identify(self, image: np.ndarray) -> list[dict]: faces = self.app.get(image) results = [] for face in faces: embedding = face.embedding # 512-dim ArcFace embedding match = self._search_database(embedding) results.append({ 'bbox': face.bbox.astype(int).tolist(), 'person_id': match['id'] if match else None, 'person_name': match['name'] if match else 'Unknown', 'similarity': match['similarity'] if match else 0.0, 'verified': match['similarity'] > self.threshold if match else False }) return results def _search_database(self, query_emb: np.ndarray) -> dict | None: # Cosine similarity пошук similarities = np.dot(self.face_db['embeddings'], query_emb) / ( np.linalg.norm(self.face_db['embeddings'], axis=1) * np.linalg.norm(query_emb) ) best_idx = np.argmax(similarities) best_sim = similarities[best_idx] if best_sim < self.threshold: return None return { 'id': self.face_db['ids'][best_idx], 'name': self.face_db['names'][best_idx], 'similarity': float(best_sim) } 

Вибір моделі для вилучення embeddings

ArcFace (InsightFace) — стандарт індустрії. InsightFace Benchmark показує LFW accuracy 99.83%, IJB-C TAR@FAR=1e-4 96.5%. Розмір embedding 512 dimensions. FaceNet (Google) — більш рання модель, LFW: 99.65%, розмір 128 або 512. MagFace — покращений ArcFace з IJB-C 97.1%. Для edge-пристроїв MobileFaceNet (1MB, LFW 99.5%). АrcFace перевершує FaceNet на 0.18% за точністю на LFW, а MagFace додає ще ~0.6% на IJB-C. Вибір залежить від завдань: для максимальної точності беремо MagFace, для швидкості на мобільних пристроях — MobileFaceNet.

Порівняльна таблиця моделей
Модель LFW accuracy Розмір Застосування
ArcFace (ResNet100) 99.83% 512 dim Висока точність, сервер
MagFace 99.82% 512 dim Покращений ArcFace, IJB-C 97.1%
FaceNet 99.65% 128/512 dim Класична модель
MobileFaceNet 99.5% 192 dim, 1MB Edge-пристрої

Масштабованість бази облич

Для малих баз (< 10k облич) брутфорс cosine similarity працює миттєво. Для великих баз використовуємо approximate nearest neighbor (ANN). FAISS IVFFlat в 1000 разів швидше за брутфорс для баз від 100k облич, забезпечуючи пошук серед 1M облич за < 1ms на CPU. Архітектура дозволяє горизонтальне масштабування: додавання вузлів без зупинки сервісу. Ми налаштовуємо індекс під ваше співвідношення точності та швидкості (параметр nprobe).

import faiss class FaceDatabase: def __init__(self, dimension: int = 512): # FAISS IVF індекс для million-scale баз quantizer = faiss.IndexFlatIP(dimension) # Inner Product = cosine sim self.index = faiss.IndexIVFFlat(quantizer, dimension, 100) self.index.nprobe = 10 # якість vs швидкість пошуку def add_faces(self, embeddings: np.ndarray): # Нормалізуємо для cosine similarity через IP faiss.normalize_L2(embeddings) if not self.index.is_trained: self.index.train(embeddings) self.index.add(embeddings) def search(self, query: np.ndarray, k: int = 5): faiss.normalize_L2(query.reshape(1, -1)) similarities, indices = self.index.search(query.reshape(1, -1), k) return similarities[0], indices[0] 

Обробка низькоякісних зображень

Система реального світу працює з нечіткими, частково закритими, погано освітленими обличчями. Перед ідентифікацією оцінюємо якість обличчя за допомогою FaceQNet або BRISQUE. Зображення нижче порогу відхиляються. Додатково використовуємо anti-spoofing (MiniFASNet, CDCN) для захисту від фотографій та екранів. Для максимального захисту застосовуємо 3D liveness detection через IR-камеру або depth-сенсор.

Anti-spoofing: захист від підробок

FAS (Face Anti-Spoofing) — обов'язковий компонент production-систем. Без нього зловмисник може пред'явити фотографію або відео. Ми вбудовуємо MiniFASNet — легку модель, що працює в реальному часі. Для high-security сценаріїв додаємо 3D-перевірку.

Правові та етичні аспекти

Система розпізнавання облич вимагає відповідності законодавству: GDPR в ЄС, 152-ФЗ в РФ. Біометричні дані — спеціальна категорія персональних даних. Обов'язкові: явна інформована згода, шифрування бази embeddings AES-256-GCM, журналювання доступу, право на видалення. Ми включаємо правовий аудит в кожен проект.

Додаткові заходи безпеки: розмежування доступу за ролями, регулярний аудит логів, сертифікація ISO 27001.

Що входить у роботу?

  • Аналіз вимог: 1:1 верифікація або 1:N ідентифікація, масштаб бази, цільове залізо.
  • Збір тестового датасету з реальних умов (освітлення, кути зйомки, камери).
  • Вибір та налаштування embedding-моделі, anti-spoofing.
  • Побудова бази та налаштування порогу similarity.
  • Інтеграція, навантажувальне тестування, моніторинг FAR/FRR.
  • Документація та навчання операторів.
  • Підтримка після запуску.

Етапи розробки

  1. Аудит вимог
  2. Вибір моделі та збір датасету
  3. Прототипування пайплайну
  4. Інтеграція з обладнанням
  5. Тестування (FAR/FRR, latency p99)
  6. Деплой та моніторинг
Масштаб системи Термін
Верифікація (1:1), до 1000 користувачів 3–4 тижні
Ідентифікація 1:N, до 100k облич 5–8 тижнів
Enterprise-система, 1M+ облич, multi-camera 10–16 тижнів

Чому обирають нас?

5+ років досвіду в Computer Vision, 20+ впроваджених систем розпізнавання облич. Гарантуємо: FAR < 1e-5 при FRR < 5% для тестового датасету замовника. Зв'яжіться з нами для консультації щодо вашого завдання. Замовте розробку під ключ — оцінимо проект за 2 дні. Наша технологічна база: InsightFace та FAISS.