Разработка системы распознавания лиц (Face Recognition) под ключ

На проходной предприятия камера захватывает лицо сотрудника под острым углом — система выдаёт ложный отказ, человек стоит в очереди, охрана переключается на ручную проверку. 80% таких инцидентов — следствие неоптимального пайплайна: модель не справляется с боковым освещением или порог сходства выста

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1460
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1314
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1012
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1275
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    727
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1018

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

Полный пайплайн

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) — стандарт индустрии. LFW accuracy: 99.83%, IJB-C TAR@FAR=1e-4: 96.5% (см. InsightFace Benchmark). Размер embedding: 512 dimensions. FaceNet (Google) — более ранняя модель, всё ещё популярная. LFW: 99.65%. Размер embedding: 128 или 512 dimensions. MagFace — улучшенный ArcFace с масштабируемым margin. IJB-C: 97.1%. Для edge-устройств: MobileFaceNet — 1MB, работает на мобильных устройствах, LFW: 99.5%. Выбор модели зависит от задач: для максимальной точности берём 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: поиск среди 1M лиц за < 1ms на CPU — это в 1000 раз быстрее брутфорса для баз от 100k лиц. Архитектура позволяет горизонтально масштабироваться: добавление новых узлов без остановки сервиса.

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-проверку. Экономия от предотвращения инцидентов может достигать $18k–26k в год на крупный объект.

Правовые и этические аспекты

Система распознавания лиц требует соответствия законодательству: 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.