DeepFace — это легкая платформа для распознавания лиц и анализа атрибутов лица (возраст, пол, эмоции и раса) для Python. Это гибридная платформа распознавания лиц, объединяющая самые современные модели: VGG-Face
, FaceNet
, OpenFace
, DeepFace
, DeepID
, ArcFace
, Dlib
, SFace
и GhostFaceNet
.
Experiments
показывают, что люди имеют точность 97,53% при выполнении задач по распознаванию лиц, тогда как эти модели уже достигли этого уровня точности и превзошли его.
Самый простой способ установить deepface — скачать его с PyPI
. Будет также установлена сама библиотека и ее необходимые компоненты.
$ pip install deepface
Кроме того, вы также можете установить Deepface из исходного кода. Исходный код может содержать новые функции, еще не опубликованные в версии pip.
$ git clone https://github.com/serengil/deepface.git
$ cd deepface
$ pip install -e .
После установки библиотеки вы сможете импортировать ее и использовать ее функции.
from deepface import DeepFace
Современный конвейер распознавания лиц — Demo
Современный конвейер распознавания лиц состоит из 5 общих этапов: обнаружение, выравнивание, нормализация, представление и проверка. Хотя DeepFace обрабатывает все эти общие этапы в фоновом режиме, вам не нужно приобретать глубокие знания обо всех процессах, стоящих за этим. Вы можете просто вызвать функцию проверки, поиска или анализа с помощью одной строки кода.
Проверка лица – Demo
Эта функция проверяет пары лиц как одного и того же человека или разных людей. В качестве входных данных он ожидает точные пути к изображениям. Передача изображений в кодировке numpy или base64 также приветствуется. Затем он вернет словарь, и вам следует проверить только его проверенный ключ.
result = DeepFace . verify (
img1_path = "img1.jpg" ,
img2_path = "img2.jpg" ,
)
Распознавание лиц – Demo
Распознавание лиц требует многократного применения проверки лица. При этом у deepface есть готовая функция поиска для выполнения этого действия. Он будет искать идентичность входного изображения в пути к базе данных и вернет список кадров данных pandas в качестве выходных данных. Между тем, встраивания лиц из базы данных лиц сохраняются в файле рассола, чтобы в следующий раз их можно было искать быстрее. Результатом будет размер лиц, появляющихся на исходном изображении. Кроме того, целевые изображения в базе данных также могут иметь много лиц.
dfs = DeepFace . find (
img_path = "img1.jpg" ,
db_path = "C:/workspace/my_db" ,
)
Вложения — Demo
Модели распознавания лиц в основном представляют изображения лиц в виде многомерных векторов. Иногда вам нужны эти встраивающие векторы напрямую. DeepFace имеет специальную функцию представления. Функция представления возвращает список вложений. Результатом будет размер лиц, появляющихся на пути изображения.
embedding_objs = DeepFace . represent (
img_path = "img.jpg"
)
Эта функция возвращает массив в качестве внедрения. Размер массива внедрения будет отличаться в зависимости от названия модели. Например, VGG-Face является моделью по умолчанию и представляет изображения лица в виде 4096-мерных векторов.
for embedding_obj in embedding_objs :
embedding = embedding_obj [ "embedding" ]
assert isinstance ( embedding , list )
assert (
model_name == "VGG-Face"
and len ( embedding ) == 4096
)
Здесь встраивание также отображается с 4096 слотами по горизонтали. Каждый слот соответствует значению измерения в векторе внедрения, а значение измерения поясняется на цветовой панели справа. Подобно 2D-штрих-кодам, вертикальные размеры не хранят никакой информации на иллюстрации.
Модели распознавания лиц - Demo
DeepFace — гибридный пакет распознавания лиц. В настоящее время он охватывает множество современных моделей распознавания лиц: VGG-Face
, FaceNet
, OpenFace
, DeepFace
, DeepID
, ArcFace
, Dlib
, SFace
и GhostFaceNet
. В конфигурации по умолчанию используется модель VGG-Face.
models = [
"VGG-Face" ,
"Facenet" ,
"Facenet512" ,
"OpenFace" ,
"DeepFace" ,
"DeepID" ,
"ArcFace" ,
"Dlib" ,
"SFace" ,
"GhostFaceNet" ,
]
#face verification
result = DeepFace . verify (
img1_path = "img1.jpg" ,
img2_path = "img2.jpg" ,
model_name = models [ 0 ],
)
#face recognition
dfs = DeepFace . find (
img_path = "img1.jpg" ,
db_path = "C:/workspace/my_db" ,
model_name = models [ 1 ],
)
#embeddings
embedding_objs = DeepFace . represent (
img_path = "img.jpg" ,
model_name = models [ 2 ],
)
По результатам экспериментов FaceNet, VGG-Face, ArcFace и Dlib оказались более эффективными. Более подробную информацию см. в разделе BENCHMARKS
. В следующей таблице вы можете найти измеренные оценки различных моделей в DeepFace, а также полученные результаты их первоначальных исследований.
Модель | Измеренная оценка | Объявленный результат |
---|---|---|
Facenet512 | 98,4% | 99,6% |
Люди | 97,5% | 97,5% |
Фасенет | 97,4% | 99,2% |
Длиб | 96,8% | 99,3 % |
VGG-Лицо | 96,7% | 98,9% |
ArcFace | 96,7% | 99,5% |
GhostFaceNet | 93,3% | 99,7% |
Sлицо | 93,0% | 99,5% |
OpenFace | 78,7% | 92,9% |
ДипФейс | 69,0% | 97,3% |
ДипИД | 66,5% | 97,4% |
Проведение экспериментов с этими моделями в DeepFace может выявить различия по сравнению с первоначальными исследованиями из-за применения различных методов обнаружения или нормализации. Более того, некоторые модели были выпущены исключительно со своими костяками, без предварительно подготовленных весов. Таким образом, мы используем их повторные реализации вместо исходных предварительно обученных весов.
Сходство — Demo
Модели распознавания лиц представляют собой обычные сверточные нейронные сети и отвечают за представление лиц в виде векторов. Мы ожидаем, что пара лиц одного и того же человека должна быть более похожа, чем пара лиц разных людей.
Сходство можно рассчитать с помощью различных показателей, таких как косинусное сходство, евклидово расстояние или нормализованный евклидов L2. В конфигурации по умолчанию используется косинусное сходство. Согласно экспериментам, ни один показатель расстояния не превосходит другой.
metrics = [ "cosine" , "euclidean" , "euclidean_l2" ]
#face verification
result = DeepFace . verify (
img1_path = "img1.jpg" ,
img2_path = "img2.jpg" ,
distance_metric = metrics [ 1 ],
)
#face recognition
dfs = DeepFace . find (
img_path = "img1.jpg" ,
db_path = "C:/workspace/my_db" ,
distance_metric = metrics [ 2 ],
)
Анализ атрибутов лица — Demo
DeepFace также поставляется с мощным модулем анализа характеристик лица, включая age
, gender
, facial expression
(включая гнев, страх, нейтральное, грустное, отвращение, счастье и удивление) и race
(включая азиатов, белых, ближневосточных, индийских, латиноамериканцев и чернокожих). предсказания. Результатом будет размер лиц, появляющихся на исходном изображении.
objs = DeepFace . analyze (
img_path = "img4.jpg" ,
actions = [ 'age' , 'gender' , 'race' , 'emotion' ],
)
Возрастная модель получила ± 4,65 МАЭ; гендерная модель получила точность 97,44%, точность 96,29% и запоминаемость 95,05%, как указано в руководстве.
Распознавание лиц и выравнивание — Demo
Обнаружение и выравнивание лиц являются важными ранними этапами современного процесса распознавания лиц. Эксперименты показывают, что обнаружение увеличивает точность распознавания лиц до 42%, а выравнивание — до 6%. Детекторы OpenCV
, Ssd
, Dlib
, MtCnn
, Faster MtCnn
, RetinaFace
, MediaPipe
, Yolo
, YuNet
и CenterFace
завернуты в deepface.
Все функции deepface принимают дополнительный бэкенд детектора и выравнивают входные аргументы. С помощью этих аргументов вы можете переключаться между этими детекторами и режимами выравнивания. OpenCV является детектором по умолчанию, и выравнивание включено по умолчанию.
backends = [
'opencv' ,
'ssd' ,
'dlib' ,
'mtcnn' ,
'fastmtcnn' ,
'retinaface' ,
'mediapipe' ,
'yolov8' ,
'yunet' ,
'centerface' ,
]
alignment_modes = [ True , False ]
#face verification
obj = DeepFace . verify (
img1_path = "img1.jpg" ,
img2_path = "img2.jpg" ,
detector_backend = backends [ 0 ],
align = alignment_modes [ 0 ],
)
#face recognition
dfs = DeepFace . find (
img_path = "img.jpg" ,
db_path = "my_db" ,
detector_backend = backends [ 1 ],
align = alignment_modes [ 0 ],
)
#embeddings
embedding_objs = DeepFace . represent (
img_path = "img.jpg" ,
detector_backend = backends [ 2 ],
align = alignment_modes [ 0 ],
)
#facial analysis
demographies = DeepFace . analyze (
img_path = "img4.jpg" ,
detector_backend = backends [ 3 ],
align = alignment_modes [ 0 ],
)
#face detection and alignment
face_objs = DeepFace . extract_faces (
img_path = "img.jpg" ,
detector_backend = backends [ 4 ],
align = alignment_modes [ 0 ],
)
Модели распознавания лиц на самом деле являются моделями CNN и ожидают ввода стандартного размера. Таким образом, перед представлением требуется изменение размера. Чтобы избежать деформации, deepface добавляет черные пиксели заполнения в соответствии с аргументом целевого размера после обнаружения и выравнивания.
RetinaFace и MtCnn, кажется, превосходят результаты на этапах обнаружения и выравнивания, но они намного медленнее. Если скорость вашего конвейера важнее, вам следует использовать opencv или ssd. С другой стороны, если учитывать точность, то вам следует использовать retinaface или mtcnn.
Производительность RetinaFace очень удовлетворительна даже в толпе, как видно на следующем рисунке. Кроме того, он обладает невероятной производительностью распознавания лицевых ориентиров. Выделенные красные точки показывают некоторые ориентиры лица, такие как глаза, нос и рот. Вот почему оценка выравнивания RetinaFace также высока.
Желтые ангелы - женская волейбольная команда Фенербахче
Вы можете узнать больше о RetinaFace в этом репозитории.
Анализ в реальном времени — Demo
Вы также можете запустить Deepface для просмотра видео в реальном времени. Функция Stream получит доступ к вашей веб-камере и применит как распознавание лиц, так и анализ атрибутов лица. Функция начинает анализировать кадр, если ей удается сфокусировать лицо последовательно на 5 кадрах. Затем он показывает результаты 5 секунд.
DeepFace . stream ( db_path = "C:/User/Sefik/Desktop/database" )
Хотя распознавание лиц основано на однократном обучении, вы также можете использовать несколько изображений лиц человека. Вам следует изменить структуру каталогов, как показано ниже.
user
├── database
│ ├── Alice
│ │ ├── Alice1.jpg
│ │ ├── Alice2.jpg
│ ├── Bob
│ │ ├── Bob.jpg
React UI — Demo part-i
, Demo part-ii
Если вы собираетесь выполнять задачи проверки лица непосредственно из браузера, deepface-react-ui — это отдельный репозиторий, созданный с использованием ReactJS в зависимости от API Deepface.
Защита от спуфинга лица – Demo
DeepFace также включает в себя модуль анализа защиты от спуфинга, позволяющий понять, является ли данное изображение реальным или поддельным. Чтобы активировать эту функцию, установите для аргумента anti_spoofing
значение True во всех задачах DeepFace.
# anti spoofing test in face detection
face_objs = DeepFace . extract_faces (
img_path = "dataset/img1.jpg" ,
anti_spoofing = True
)
assert all ( face_obj [ "is_real" ] is True for face_obj in face_objs )
# anti spoofing test in real time analysis
DeepFace . stream (
db_path = "C:/User/Sefik/Desktop/database" ,
anti_spoofing = True
)
API – Demo
DeepFace также предоставляет API — более подробную информацию см. api folder
. Вы можете клонировать исходный код Deepface и запустить API с помощью следующей команды. Он будет использовать сервер Gunicorn для запуска службы отдыха. Таким образом, вы можете вызвать Deepface из внешней системы, такой как мобильное приложение или Интернет.
cd scripts
./service.sh
Распознавание лиц, анализ атрибутов лица и функции векторного представления включены в API. Ожидается, что вы будете вызывать эти функции как методы публикации HTTP. Конечными точками службы по умолчанию будут http://localhost:5005/verify
для распознавания лиц, http://localhost:5005/analyze
для анализа атрибутов лица и http://localhost:5005/represent
для векторного представления. API принимает изображения в виде загружаемых файлов (через данные формы) или в виде точных путей к изображениям, URL-адресов или строк в кодировке Base64 (через JSON или данные формы), предоставляя универсальные возможности для различных требований клиентов. Здесь вы можете найти проект почтальона, чтобы узнать, как следует вызывать эти методы.
Докеризованный сервис — Demo
Следующий набор команд будет обслуживать Deepface на localhost:5005
через Docker. Затем вы сможете использовать такие глубокие услуги, как проверка, анализ и представление. Кроме того, если вы хотите создать образ самостоятельно, а не предварительно созданный образ из Docker Hub, Dockerfile доступен в корневой папке проекта.
# docker build -t serengil/deepface . # build docker image from Dockerfile
docker pull serengil/deepface # use pre-built docker image from docker hub
docker run -p 5005:5000 serengil/deepface
Интерфейс командной строки — Demo
DeepFace также имеет интерфейс командной строки. Вы можете получить доступ к его функциям из командной строки, как показано ниже. Команда deepface ожидает имя функции в качестве первого аргумента, а затем аргументы функции.
# face verification
$ deepface verify -img1_path tests/dataset/img1.jpg -img2_path tests/dataset/img2.jpg
# facial analysis
$ deepface analyze -img_path tests/dataset/img1.jpg
Вы также можете запустить эти команды, если используете Deepface с Docker. Пожалуйста, следуйте инструкциям в сценарии оболочки.
Масштабное распознавание лиц — Playlist
Если ваша задача требует распознавания лиц на больших наборах данных, вам следует объединить DeepFace с векторным индексом или векторной базой данных. Эта установка будет выполнять приблизительный поиск ближайших соседей вместо точных, что позволит вам идентифицировать лицо в базе данных, содержащей миллиарды записей, за миллисекунды. Распространенные решения для векторного индексирования включают Annoy, Faiss, Voyager, NMSLIB, ElasticSearch. Для векторных баз данных популярными вариантами являются Postgres с расширением pgvector и RediSearch.
И наоборот, если ваша задача включает распознавание лиц в базах данных малого и среднего размера, вы можете использовать реляционные базы данных, такие как Postgres или SQLite, или базы данных NoSQL, такие как Mongo, Redis или Cassandra, для выполнения точного поиска ближайшего соседа.
Запросы на вытягивание более чем приветствуются! Если вы планируете внести большой патч, сначала создайте проблему, чтобы в первую очередь избавиться от любых предварительных вопросов или дизайнерских решений.
Перед созданием PR вам следует запустить модульные тесты и выполнить проверку локально, выполнив команду make test && make lint
. После отправки запроса на запрос рабочий процесс тестирования GitHub будет запущен автоматически, а задания модульного тестирования и проверки будут доступны в действиях GitHub до утверждения.
Есть много способов поддержать проект. Репозиторий GitHub — лишь один из них.
Если вам нравится эта работа, вы можете поддержать ее финансово на Patreon, GitHub Sponsors или Buy Me a Coffee.
Кроме того, логотип вашей компании будет отображаться в README на GitHub и PyPI, если вы станете спонсором золотого, серебряного или бронзового уровня.
Пожалуйста, цитируйте deepface в своих публикациях, если это поможет вашим исследованиям — более подробную информацию см. в CITATIONS
. Вот его записи BibTex:
Если вы используете Deepface в своих исследованиях для распознавания лиц или обнаружения лиц, пожалуйста, цитируйте эти публикации:
@article { serengil2024lightface ,
title = { A Benchmark of Facial Recognition Pipelines and Co-Usability Performances of Modules } ,
author = { Serengil, Sefik and Ozpinar, Alper } ,
journal = { Journal of Information Technologies } ,
volume = { 17 } ,
number = { 2 } ,
pages = { 95-107 } ,
year = { 2024 } ,
doi = { 10.17671/gazibtd.1399077 } ,
url = { https://dergipark.org.tr/en/pub/gazibtd/issue/84331/1399077 } ,
publisher = { Gazi University }
}
@inproceedings { serengil2020lightface ,
title = { LightFace: A Hybrid Deep Face Recognition Framework } ,
author = { Serengil, Sefik Ilkin and Ozpinar, Alper } ,
booktitle = { 2020 Innovations in Intelligent Systems and Applications Conference (ASYU) } ,
pages = { 23-27 } ,
year = { 2020 } ,
doi = { 10.1109/ASYU50717.2020.9259802 } ,
url = { https://ieeexplore.ieee.org/document/9259802 } ,
organization = { IEEE }
}
С другой стороны, если вы используете Deepface в своих исследованиях для целей анализа характеристик лица, таких как задачи прогнозирования возраста, пола, эмоций или этнической принадлежности, пожалуйста, цитируйте эту публикацию.
@inproceedings { serengil2021lightface ,
title = { HyperExtended LightFace: A Facial Attribute Analysis Framework } ,
author = { Serengil, Sefik Ilkin and Ozpinar, Alper } ,
booktitle = { 2021 International Conference on Engineering and Emerging Technologies (ICEET) } ,
pages = { 1-4 } ,
year = { 2021 } ,
doi = { 10.1109/ICEET53442.2021.9659697 } ,
url = { https://ieeexplore.ieee.org/document/9659697 } ,
organization = { IEEE }
}
Кроме того, если вы используете deepface в своих проектах GitHub, добавьте deepface
в файл requirements.txt
.
DeepFace лицензируется по лицензии MIT — более подробную информацию см. в LICENSE
.
DeepFace включает в себя некоторые внешние модели распознавания лиц: VGG-Face, Facenet (128d и 512d), OpenFace, DeepFace, DeepID, ArcFace, Dlib, SFace и GhostFaceNet. Кроме того, модели возраста, пола и расы/этнической принадлежности были обучены на базе VGG-Face с помощью трансферного обучения. Аналогичным образом DeepFace включает в себя множество детекторов лиц: OpenCv, Ssd, Dlib, MtCnn, Fast MtCnn, RetinaFace, MediaPipe, YuNet, Yolo и CenterFace. Наконец, DeepFace дополнительно использует защиту от подделки лиц, чтобы определить, настоящие или поддельные изображения. Типы лицензий будут унаследованы, когда вы собираетесь использовать эти модели. Пожалуйста, проверьте типы лицензий этих моделей для производственных целей.
Логотип DeepFace создан Адрианом Коке и распространяется по лицензии Creative Commons: By Attribution 3.0.