Об этом проекте

face_recognition — это библиотека и инструмент командной строки на Python для распознавания и манипуляции лицами. Он построен на современных моделях распознавания лиц из dlib, а в README сообщается о точности 99,38% на бенчмарке Labeled Faces in the Wild (LFW). Библиотека предоставляет простой API для поиска лиц, извлечения ориентиров лица, вычисления кодировок лиц и сравнения лиц для идентификации людей. ## Основные возможности - Поиск всех лиц на изображении с помощью `face_locations()`, включая опциональную модель на основе глубокого обучения с CNN для повышения точности (для хорошей производительности требуется CUDA). - Определение и контурирование черт лица (глаза, нос, рот, подбородок) с помощью `face_landmarks()`, что позволяет использовать, например, цифровой макияж. - Идентификация лиц путём сравнения 128-мерных кодировок лиц, создаваемых `face_encodings()` и сопоставляемых через `compare_faces()`. - В комплект входят две программы командной строки: `face_recognition` для идентификации известных людей в папке изображений и `face_detection` для вывода координат ограничивающих рамок лиц. ## Установка - Требуется Python 3.3+ или Python 2.7 на macOS или Linux. Windows официально не поддерживается, но может работать по инструкциям сообщества. - Сначала необходимо установить `dlib` с привязками Python (сборка из исходников на macOS/Ubuntu или использование готовой виртуальной машины). - Установка выполняется командой `pip3 install face_recognition` после установки `cmake` (например, `brew install cmake` на macOS). - Включены дополнительные руководства для Nvidia Jetson Nano, Raspberry Pi 2+, FreeBSD (`pkg install graphics/py-face-recognition`) и Windows. - Предоставляется Docker-образ для упрощения развёртывания в облачных средах, таких как Heroku или AWS. ## Пример использования (Python) ```python import face_recognition # Поиск лиц на изображении image = face_recognition.load_image_file("your_file.jpg") face_locations = face_recognition.face_locations(image) # Получение ориентиров лица face_landmarks_list = face_recognition.face_landmarks(image) # Идентификация человека known_image = face_recognition.load_image_file("biden.jpg") unknown_image = face_recognition.load_image_file("unknown.jpg") biden_encoding = face_recognition.face_encodings(known_image)[0] unknown_encoding = face_recognition.face_encodings(unknown_image)[0] results = face_recognition.compare_faces([biden_encoding], unknown_encoding) ``` ## Интерфейс командной строки - `face_recognition ./known_people/ ./unknown_pictures/` выводит по одной строке на каждое обнаруженное лицо с именем файла и распознанным именем (или `unknown_person`). - `--tolerance 0.54` делает сопоставление строже; `--show-distance true` выводит вычисленное расстояние между лицами. - `--cpus 4` (или `-1` для всех ядер) включает параллельную обработку на многоядерных системах. - `face_detection ./folder_with_pictures/` выводит координаты верх, право, низ, лево в пикселях для каждого найденного лица. ## Примеры скриптов Репозиторий содержит множество примеров, включая: - Обнаружение лиц с моделью HOG по умолчанию и глубокой моделью CNN. - Распознавание в реальном времени с веб-камеры (простая и более быстрая версии, требуется OpenCV). - Распознавание лиц в видеофайлах и на Raspberry Pi с камерой. - HTTP-веб-сервис на Flask. - Классификаторы k-ближайших соседей и SVM для обучения на нескольких изображениях одного человека. - Размытие лиц в видео с веб-камеры в реальном времени. ## Ограничения - Модель распознавания обучена на взрослых и может хуже работать с детьми при пороге сравнения по умолчанию 0.6. - Точность может различаться для разных этнических групп; в wiki обсуждаются известные проблемы точности. - Для развёртывания включены Dockerfile и готовые Docker-образы, с поддержкой GPU на Linux-системах с драйверами Nvidia и nvidia-docker. Этот проект широко используется как простая высокоуровневая обёртка над возможностями распознавания лиц в dlib и подходит для прототипирования и производственных приложений, где требуются обнаружение и идентификация лиц.