Простой командный интерфейс (CLI) программа для распознавания лиц
Получаем простую программу с интерфейсом командной строки (CLI), которая распознаёт лица на фотографиях или в папках с фотографиями:
face_recognition
— распознаёт лицо на фотографии или в папке с фотографиями.face_detection
— находит лицо на фотографии или в папке с фотографиями.face_recognition
CLIС помощью команды face_recognition
можно распознать лицо на фотографии или в папке с фотографиями. Для этого сначала нужно, чтобы в папке уже были фотографии людей, которых вы хотите распознать. Также необходимо, чтобы для каждого человека была отдельная папка с его именем, в которой находилась бы одна фотография этого человека.
Например:
Затем нужна вторая папка с фотографиями, которые вы хотите идентифицировать:
После этого, если передать программе 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
CLIИнструмент 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
Для каждого обнаруженного лица выводится одна строка. Координаты представляют собой координаты верхнего левого, правого нижнего, нижнего левого и правого верхнего углов лица (в пикселях).
Если для одного и того же человека есть несколько элементов, это может быть связано с тем, что люди очень похожи, и для более строгого сравнения лиц требуется более низкая допустимая погрешность (tolerance value).
Это можно сделать с помощью переменной --tolerance
. По умолчанию значение допуска составляет 0,6, но чем меньше число, тем строже сравнение лиц:
$ 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
Если у вас компьютер с несколькими ядрами процессора, вы можете выполнять распознавание лиц одновременно. Например, на компьютере с четырьмя ядрами вы сможете обрабатывать примерно в четыре раза больше изображений за то же время.
При использовании Python 3.4 или выше передайте параметр --cpus <количество ядер процессора для использования>
:
$ face_recognition --cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/
Также можно передать --cpus -1
, чтобы использовать все ядра процессора.
Модуль face_recognition
позволяет легко манипулировать лицами с помощью всего нескольких строк кода. Это очень просто!
Документация API: https://face-recognition.readthedocs.io.
import face_recognition
image = face_recognition.load_image_file("my_picture.jpg")
face_locations = face_recognition.face_locations(image)
# face_locations теперь представляет собой массив с координатами каждого лица!
Пример можно протестировать.
Более точный алгоритм глубокого обучения на основе распознавания лиц также доступен.
Обратите внимание, что для повышения производительности модели (требуется поддержка CUDA от NVidia) может потребоваться ускорение GPU. Кроме того, при компиляции dlib
вы можете активировать поддержку CUDA.
import face_recognition
image = face_recognition.load_image_file("my_picture.jpg")
face_locations = face_recognition.face_locations(image, model="cnn")
# face_locations теперь представляет собой массив с координатами каждого лица!
Пример можно протестировать.
Если есть много изображений и GPU, можно найти лица в пакетном режиме.
import face_recognition
image =
``` **Распознавание лиц с помощью библиотеки face_recognition**
В данном тексте описывается использование библиотеки Python face_recognition для распознавания лиц.
Пример кода показывает, как можно использовать библиотеку для обнаружения и распознавания лиц на изображениях. В примере используется метод load_image_file() для загрузки изображения, face_landmarks() для определения ключевых точек лица и face_encodings() для создания уникального идентификатора лица. Затем код сравнивает два идентификатора, чтобы определить, принадлежат ли они одному и тому же лицу.
Также в тексте приводится список примеров использования библиотеки для различных задач, таких как обнаружение лиц, определение черт лица и распознавание лиц.
**Перевод кода:**
```python
import face_recognition
picture_of_me = face_recognition.load_image_file("me.jpg")
my_face_encoding = face_recognition.face_encodings(picture_of_me)[0]
unknown_picture = face_recognition.load_image_file("unknown.jpg")
unknown_face_encoding = face_recognition.face_encodings(unknown_picture)[0]
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!")
Этот код загружает изображение «me.jpg» и создаёт уникальный идентификатор лица (my_face_encoding). Затем он загружает другое изображение («unknown.jpg») и создаёт ещё один идентификатор (unknown_face_encoding), после чего сравнивает эти два идентификатора с помощью метода compare_faces(). Если результаты сравнения показывают, что оба идентификатора принадлежат одному и тому же человеку, программа выводит сообщение «It’s a picture of me!». В противном случае выводится сообщение «It’s not a picture of me!» Адриан Роузброк «Распознавание лиц на Raspberry Pi»
Как использовать Raspberry Pi? Адриан Роузбрук «Кластеризация лиц с помощью Python»
Если вы хотите узнать, как работают чёрные ящики и распознавание лиц, прочитайте эту статью.
Поскольку face_recognition
зависит от dlib
, написанного на C++, развёртывание приложения, использующего его, на таких платформах, как Heroku или AWS, может быть сложным.
Для более простой работы пример Dockerfile из этого репозитория показывает, как запустить приложение, созданное с использованием face_recognition
, в контейнере Docker. Это позволяет развернуть приложение на любом сервисе, поддерживающем Docker-образы.
Чтобы попробовать создать локальный образ Docker, выполните следующую команду: docker-compose up --build
.
Пользователи Linux с установленным GPU (драйвер >= 384.81) и Nvidia-Docker могут запускать примеры на GPU: откройте файл docker-compose.yml
и удалите комментарии из строк dockerfile : Dockerfile.gpu
и runtime : nvidia
.
Прежде чем создавать проблему на GitHub, ознакомьтесь с разделом общих ошибок на вики.
Большое спасибо Дэвису Кингу (@nulhom), который создал dlib
и предоставил функции распознавания и кодирования лиц, используемые в этой библиотеке. Более подробную информацию о кодировании лиц с использованием ResNet можно найти в блоге.
Также благодарю всех, кто работает над замечательными научными библиотеками данных Python, такими как numpy, scipy, scikit-image и pillow. Они делают работу с этим типом вещей в Python лёгкой и увлекательной.
Спасибо проекту Cookiecutter и шаблону проекта audreyr/cookiecutter-pypackage за то, что сделали упаковку проектов Python лучше.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )