Найти лицо в толпе? Легко! Обзор Python-библиотеки RetinaFace
Знакома ситуация: вам нужно реализовать функцию распознавания лиц, и вы погружаетесь в мир сложных моделей, фреймворков и бесконечных зависимостей? Кажется, что для такой задачи нужна целая команда MLOps-инженеров. А что, если я скажу, что найти все лица на фотографии, даже в большой толпе, можно всего в несколько строк кода на Python?
Сегодня мы рассмотрим проект, который делает именно это — знакомимся с serengil/retinaface, удобной и мощной библиотекой для детекции лиц.
Да, все эти лица нашла одна библиотека. И довольно быстро.
Что такое RetinaFace и зачем она нужна?
Если коротко, RetinaFace — это Python-библиотека, которая предоставляет доступ к одной из самых точных моделей для обнаружения лиц. Это не реализация с нуля, а, что даже лучше, удобная обертка над проверенным и популярным решением из проекта InsightFace.
Автор взял сложную модель, изначально написанную на MXNet, и, вдохновившись TensorFlow-реализацией от Станисласа Бертрана, упаковал ее в простой pip-пакет. В итоге мы, разработчики, получаем возможность использовать state-of-the-art технологию без головной боли с установкой и настройкой.
Главная задача, которую решает RetinaFace — быстро и точно находить лица на изображениях. Но, как мы увидим дальше, она умеет немного больше.
Начинаем работу: магия в три строки кода
Одно из главных преимуществ проекта — его простота. Забудьте о долгой компиляции и решении проблем с зависимостями. Все, что нужно, это одна команда в терминале:
pip install retina-face
И все! Теперь можно сразу перейти к делу. Давайте найдем лицо на картинке:
from retinaface import RetinaFace
resp = RetinaFace.detect_faces("img1.jpg")
print(resp)
Что мы получим в ответ? Не громоздкий объект, а понятный JSON-подобный словарь. Для каждого найденного лица (face_1, face_2 и т.д.) библиотека вернет:
{
"face_1": {
"score": 0.9993440508842468,
"facial_area": [155, 81, 434, 443],
"landmarks": {
"right_eye": [257.82974, 209.64787],
"left_eye": [374.93427, 251.78687],
"nose": [303.4773, 299.91144],
"mouth_right": [228.37329, 338.73193],
"mouth_left": [320.21982, 374.58798]
}
}
}
Здесь есть все необходимое:
score— уверенность модели в том, что это действительно лицо.facial_area— координаты рамки (bounding box), которая его окружает.landmarks— самое интересное! Координаты ключевых точек: глаз, носа и углов рта.
Именно эти "landmarks" открывают дорогу к более продвинутым техникам.
Улучшаем точность на 1%: сила выравнивания лиц
Просто найти лицо — это половина дела. Если вы строите систему распознавания (а не просто детекции), вам нужна стабильность. Лица на фото могут быть повернуты, наклонены. Это мешает моделям сравнивать их между собой.
Здесь на помощь приходит выравнивание (alignment) — процесс поворота и масштабирования изображения так, чтобы ключевые точки (обычно глаза) оказались в одном и том же положении. Исследования показывают, что этот простой шаг может повысить точность распознавания почти на 1%. В мире машинного обучения это весьма значительный прирост.
RetinaFace делает этот процесс элементарным благодаря встроенной функции extract_faces.
import matplotlib.pyplot as plt
# Просто добавьте параметр align = True
faces = RetinaFace.extract_faces(img_path = "img.jpg", align = True)
for face in faces:
plt.imshow(face)
plt.show()
Библиотека сама использует найденные координаты глаз, чтобы повернуть каждое вырезанное лицо.

В итоге вы получаете "нормализованные" изображения лиц, готовые для передачи в модель распознавания.
RetinaFace в большом мире: строим полноценную систему
RetinaFace — это командный игрок. Её основная задача — детекция. Для распознавания (ответа на вопрос "кто на фото?") нужна другая модель. Автор репозитория и здесь дает подсказку: RetinaFace отлично работает в паре с моделью ArcFace.
Чтобы не собирать этот пайплайн вручную, можно воспользоваться еще одной библиотекой того же автора — deepface. Она объединяет несколько лучших моделей для детекции и распознавания в один удобный инструмент.
Посмотрите, как просто проверить, один и тот же человек на двух фото или нет, используя RetinaFace как детектор:
# Не забудьте установить: pip install deepface
from deepface import DeepFace
result = DeepFace.verify("img1.jpg", "img2.jpg",
detector_backend = 'retinaface')
print(result["verified"])
Связка RetinaFace для детекции и ArcFace для верификации
Интересный факт: точность модели ArcFace на известном датасете LFW составляет 99.40%, в то время как средний человек распознает лица на том же датасете с точностью 97.53%. Технологии уже обгоняют нас в этой задаче.
Для кого этот проект?
RetinaFace — идеальный инструмент для:
- Python-разработчиков, которым нужно быстро добавить функцию детекции лиц в свое приложение, не становясь при этом экспертом в deep learning.
- Дата-сайентистов, которые хотят построить прототип системы распознавания лиц и нуждаются в надежном первом шаге — поиске этих самых лиц.
- Энтузиастов и исследователей, ищущих простой способ поэкспериментировать с современными CV-моделями.
Сферы применения ограничены только вашей фантазией: от автоматической сортировки фотографий в личном архиве до создания прототипов систем безопасности и умных домофонов.
RetinaFace — прекрасный пример того, как сложные технологии можно и нужно упаковывать в простые и доступные инструменты. Проект берет на себя всю сложность работы с нейронной сетью, оставляя нам чистый и понятный API.
Стоит ли попробовать? Однозначно да. Если ваша работа хоть как-то связана с обработкой изображений людей, эта библиотека может сэкономить вам недели разработки. Простота установки, высокая точность "из коробки" и возможность легкой интеграции в более сложные системы делают RetinaFace отличным выбором. Добавьте в закладки — точно пригодится.
