1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lbing9002-face_recognition

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_Simplified_Chinese.md 25 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 01:09 b696983

Распознавание лиц: Face Recognition

Переводчик:

Данный проект face_recognition представляет собой мощный, простой и удобный в использовании открытый проект по распознаванию лиц с полной документацией по разработке и примерами применения, особенно совместимый с Raspberry Pi.

Чтобы облегчить изучение и разработку распознавания лиц китайскими разработчиками программного обеспечения и их вклад в исходный код, я перевёл файл README на китайский язык.

Приветствую всех участников этого проекта.

Переводчик: Tommy из Ассоциации открытого исходного кода Университета Тунцзи

Этот проект является самым простым в мире набором инструментов для распознавания лиц. Вы можете использовать Python и инструменты командной строки для извлечения, распознавания и обработки лиц.

Распознавание лиц в этом проекте основано на передовой модели глубокого обучения в C++ open source библиотеке dlib, которая была протестирована на наборе данных «Labeled Faces in the Wild» (http://vis-www.cs.umass.edu/lfw/) и имеет точность до 99,38%. Однако точность распознавания детских и азиатских лиц всё ещё нуждается в улучшении.

[Labeled Faces in the Wild] — это набор данных о лицах, созданный Университетом Массачусетса Амхерст (University of Massachusetts Amherst), который содержит более 13 000 изображений лиц, собранных из сети.

Проект предоставляет простой инструмент командной строки face_recognition, который можно использовать для обработки всех изображений в папке.

Особенности

Поиск лиц на изображениях

Определение всех лиц на изображении:

import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_locations = face_recognition.face_locations(image)

Распознавание ключевых точек лица

Распознавание ключевых точек лица, включая глаза, нос, рот и подбородок.

import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)

Распознавание ключевых точек лица может быть полезным во многих областях, но вы также можете использовать эту функцию для развлечения, например, автоматизированный макияж в этом проекте digital make-up (как в приложении Meitu).

Идентификация людей на изображениях

import face_recognition
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)

Вы также можете комбинировать его с другими библиотеками Python (например, opencv) для реализации обнаружения лиц в реальном времени:

Посмотрите пример обнаружения лиц в реальном времени.

Установка

Конфигурация среды

  • Python 3.3+ или Python 2.7
  • macOS или Linux
  • Windows не поддерживается официально, но может работать

Методы установки для разных операционных систем

Установка на Mac или Linux

Сначала убедитесь, что у вас уже установлена dlib с привязками Python:

Затем установите этот модуль из pypi с помощью pip3 (или pip2 для Python 2):

pip3 install face_recognition

Если вы столкнулись с проблемами, вы можете установить этот проект на виртуальной машине Ubuntu, следуя этому руководству. Как использовать виртуальную машину, предоставленную Adam Geitgey, для настройки виртуальной машины, этот проект уже включён в образ. face_recognition может автоматически помочь вам установить различные зависимости, включая dlib. Однако при установке dlib могут возникнуть проблемы, поскольку dlib требует компиляции, и обычно возникают проблемы с версиями gcc или g++. Поэтому перед использованием команды pip install face_recognition, вы можете указать расположение ваших gcc и g++ с помощью следующих команд в командной строке:

export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++

Это временно изменит переменные среды вашей текущей оболочки, чтобы они указывали на каталоги, где находятся ваши gcc и g++.

Установка на Raspberry Pi

Установка на Windows

Хотя этот проект официально не поддерживается для Windows, некоторые эксперты нашли способ запустить проект на этой платформе:

Использование образа Ubuntu Virtual Machine

Этот проект уже включён в образ Ubuntu Virtual Machine. Вы можете использовать его следующим образом:

Использование

Командная строка

После успешной установки проекта вы можете использовать две команды командной строки:

  • face_recognition: распознаёт лица на одной фотографии или в папке с фотографиями.
  • face_detection: определяет местоположение лиц на одной фотографии или в папке с фотографиями (выводит координаты пикселей).

Команда face_recognition

Команда face_recognition позволяет распознавать лица на одной фотографии или в папке с фотографиями. Вот как это работает:

  1. У вас должна быть папка с известными лицами, где каждое лицо представлено отдельной фотографией с именем, совпадающим с именем человека. Пример:

    known

  2. Вам также нужна папка с неизвестными фотографиями, которые вы хотите распознать.

  3. В командной строке перейдите в папки с известными и неизвестными лицами и выполните команду face_recognition. Она выведет имена людей, чьи лица были найдены на неизвестных фотографиях.

Пример использования:

$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/

/unknown_pictures/unknown.jpg,Barack Obama
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person

Если результат содержит unknown_person, это означает, что лицо на фотографии не было найдено среди известных лиц.

Команда face_detection

Команда face_detection позволяет определить местоположение лиц на одной фотографии или в папке с фотографиями. Она выводит координаты пикселей.

В командной строке выполните команду face_detection, указав папку с фотографиями или одну фотографию.

Пример использования:

$ face_detection  ./folder_with_pictures/

examples/image1.jpg,65,215,169,112
examples/image2.jpg,62,394,211,244
examples/image2.jpg,95,941,244,792

Каждый вывод соответствует одному лицу на фотографии и содержит координаты верхнего левого, нижнего правого углов.

Настройка точности распознавания

Если команда face_recognition выдаёт несколько результатов для одного лица, это может означать, что человек на фотографии похож на нескольких людей из базы данных. Точность распознавания можно повысить, уменьшив допустимое отклонение. Это делается с помощью параметра --tolerance. По умолчанию значение отклонения составляет 0.6. Чем меньше значение, тем выше точность.

Чтобы изменить значение отклонения, используйте параметр --tolerance в команде face_recognition. Пример:

$ face_recognition --tolerance 0.54 ./pictures_of_people_i_know/ ./unknown_pictures/

/unknown_pictures/unknown.jpg,Barack Obama
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person

Для просмотра числовых значений соответствия можно использовать параметр --show-distance true. Пример:

$ face_recognition --show-distance true ./pictures_of_people_i_know/ ./unknown_pictures/

/unknown_pictures/unknown.jpg,Barack Obama,0.378542298956785
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person,None
Дополнительные примеры

Если вас не интересуют имена на фотографиях, а только информация о людях на них, можно использовать следующую команду:

$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/ | cut -d ',' -f2

Barack Obama
unknown_person

Эта команда использует утилиту cut для извлечения второго поля вывода команды face_recognition, которое содержит имена людей.

Ускорение распознавания

При использовании многоядерного процессора можно ускорить процесс распознавания, используя параллельные вычисления. Например, если у вас четырёхъядерный процессор, вы можете ускорить работу примерно в четыре раза.

Если вы используете Python 3.4 или более позднюю версию, вы можете передать параметр --cpus 4 в команду face_recognition. Если вы хотите использовать все ядра процессора, передайте параметр --cpus -1.

Примечание от переводчика: на Raspberry Pi 3B есть четыре ядра, поэтому использование параметра --cpus может значительно ускорить распознавание изображений (проверено на практике).

Модуль Python face_recognition

Модуль Python face_recognition предоставляет богатый API для работы с функциями распознавания лиц. С помощью нескольких строк кода вы можете легко управлять различными функциями распознавания.

Документация по API доступна здесь: https://face-recognition.readthedocs.io/en/latest/face_recognition.html.

Определение местоположения лиц на изображении

Вот пример кода на Python для определения местоположения лиц на изображении:

import face_recognition

image = face_recongnition.load_image_file("my_picture.jpg")
face_locations = face_recognition.face_locations(image)

# face_locations теперь является массивом, содержащим координаты каждого лица!

Вы можете посмотреть пример кода для поиска лица президента Байдена здесь: https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py.

На изображении ниже показан пример поиска лица:

Пример поиска лица

Также можно использовать глубокое обучение для более точного определения местоположения лиц. Обратите внимание, что этот метод требует наличия графического процессора и поддержки CUDA (через библиотеку CUDA от NVIDIA), которую необходимо включить при компиляции dlib. face_recognition.load_image_file("my_picture.jpg")

face_locations = face_recognition.face_locations(image, model="cnn")

face_locations is now an array listing the co-ordinates of each face!

Посмотрите пример использования свёрточной нейронной сети для определения местоположения лица Билла Гейтса.

https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture_cnn.py

Если у вас есть много изображений, которые нужно распознать, и у вас также есть графический процессор, вы можете обратиться к этому примеру:

Пример использования свёрточной нейронной сети для пакетного распознавания лиц на изображениях.

https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_batches.py

Распознавание ключевых точек лица на одном изображении

import face_recognition

image = face_recognition.load_image_file("my_picture.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)

# face_landmarks_list is now an array with the locations of each facial feature in each face.
# face_landmarks_list[0]['left_eye'] would be the location and outline of the first person's left eye.

Посмотрите этот пример: извлечение ключевых точек лица Барака Обамы и Билла Гейтса.

Определение того, кто изображён на фотографии

import face_recognition

picture_of_me = face_recognition.load_image_file("me.jpg")
my_face_encoding = face_recognition.face_encodings(picture_of_me)[0]

# my_face_encoding now contains a universal 'encoding' of my facial features that can be compared to any other picture of a face!

unknown_picture = face_recongnition.load_image_file("unknown.jpg")
unknown_face_encoding = face_recognition.face_encodings(unknown_picture)[0]

# Now we can see the two face encodings are of the same person with `compare_faces`!

results = face_recognition.compare_faces([my_face_encoding], unknown_face_encoding)

if results[0] == True:
    print("It's a picture of me!")
else:
    print("It's not a picture of me!")

Посмотрите этот пример: это Барак Обама или Билл Гейтс?

## Python примеры

Все примеры можно найти в этой ссылке: https://github.com/ageitgey/face_recognition/tree/master/examples.

#### Распознавание лиц

* Пример: определение местоположения лица Билла Гейтса
* Пример: использование свёрточной нейронной сети для определения местоположения лица Билла Гейтса
* Пример: использование свёрточной нейронной сети для пакетного распознавания лиц на изображениях
* Пример: размытие лиц на видео с веб-камеры (требуется установка OpenCV)

#### Идентификация ключевых точек лица

* Пример: извлечение ключевых точек лица Барака Обамы и Билла Гейтса
* Пример: нанесение макияжа на лицо американского вице-президента Билла Гейтса с помощью цифровых технологий

#### Распознавание лиц

* Пример: это Барак Обама или Билл Гейтс?
* Пример: после распознавания лиц нарисуйте рамки вокруг лиц и подпишите имена на исходном изображении
* Пример: сравните два лица с разной точностью, чтобы определить, принадлежат ли они одному человеку
* Пример: получение видео с веб-камеры для распознавания лиц  более медленная версия (требуется установка OpenCV)
* Пример: получение видео с веб-камеры для распознавания лиц  быстрая версия (требуется установка OpenCV)
* Пример: распознавание лиц из видеофайла и вывод результатов в новый видеофайл (требуется установка OpenCV)
* Пример: подсчитайте количество лиц с помощью веб-камеры Raspberry Pi и идентифицируйте их личности
* Пример: доступ к сетевому серверу через HTTP-запрос браузера для распознавания лиц (требуется установить бэкенд-фреймворк Flask)
* Пример: используйте алгоритм классификации K ближайших соседей (KNN) для распознавания лиц **Изучение**

- Основное содержание: базовые алгоритмы и принципы.

*Распознавание лиц с помощью OpenCV, Python и глубокого обучения* от Адриана Роузброка

- Основное содержание: как использовать этот проект на практике.

*Распознавание лица Raspberry Pi* от Адриана Роузброка

- Основное содержание: использование этого проекта на Raspberry Pi.

*Кластеризация лиц с помощью Python* от Адриана Роузброка

- Основное содержание: реализация кластеризации лиц на изображениях с использованием алгоритмов неконтролируемого обучения.

## Принцип распознавания лиц

Если вы хотите глубже понять принцип работы чёрного ящика распознавания лиц, прочитайте эту статью.

> *Примечание автора:* обязательно прочтите эту статью, она интересная и информативная.

## Предупреждение

- Модель распознавания лиц в этом проекте основана на взрослых людях, и результаты могут быть менее точными для детей. Если на изображении есть дети, рекомендуется установить пороговое значение равным 0,6.
- Результаты распознавания лиц могут различаться для разных рас. Подробнее см. на странице википедии.

## Развёртывание проекта на облачном сервере (Heroku, AWS и т. д.)

Этот проект основан на C++ библиотеке dlib, поэтому развёртывание его на облачных серверах Heroku или AWS является разумным решением.

Чтобы упростить этот процесс, существует пример Dockerfile, который показывает, как упаковать приложение face_recognition в контейнер Docker. Вы можете развернуть этот контейнер на любом облачном сервисе, поддерживающем образы Docker.

## Проблемы?

Прежде чем создавать проблему на GitHub, пожалуйста, ознакомьтесь со списком распространённых ошибок.

## Благодарности

- Большое спасибо Дэвису Кингу (@nulhom) за создание библиотеки dlib, которая предоставляет модели для обнаружения ключевых точек лица и кодирования лица. Более подробную информацию о ResNet можно найти на этой веб-странице.
- Спасибо всем участникам соответствующих модулей Python (включая numpy, scipy, scikit-image, pillow и др.).
- Спасибо проектам Cookiecutter и audreyr/cookiecutter-pypackage за упрощение процесса упаковки Python-проектов.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/lbing9002-face_recognition.git
git@api.gitlife.ru:oschina-mirror/lbing9002-face_recognition.git
oschina-mirror
lbing9002-face_recognition
lbing9002-face_recognition
master