{"id":14291,"url":"\/distributions\/14291\/click?bit=1&hash=257d5375fbb462be671b713a7a4184bd5d4f9c6ce46e0d204104db0e88eadadd","hash":"257d5375fbb462be671b713a7a4184bd5d4f9c6ce46e0d204104db0e88eadadd","title":"\u0420\u0435\u043a\u043b\u0430\u043c\u0430 \u043d\u0430 Ozon \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0442\u0430\u043c \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0451\u0442","buttonText":"","imageUuid":""}

Как искать нужных людей на картинке? (сам себе поисковик)

Достаточно часто при работе с видео ставится задача узнать – сколько людей было в кадре и получить их лица.

На первый взгляд задача достаточно простая, но порой ее реализация упирается в огромное количество проблем. Наиболее частая – какую библиотеку использовать, чтобы максимально быстро получить хороший результат?

Решением является — Face recognition (простая библиотека в использовании и установке). По факту является API инструментом, который устанавливается с этой библиотекой. Сам инструмент выделяет черты лица на изображениях, и в случае, если нам нужен такой функционал, пытается по ним идентифицировать найденного человека. Весь функционал написан на языке С++ и сформирован в библиотеку Dlib – наиболее продвинутого сборника, содержащего алгоритмы машинного обучения и имеющего открытый исходный код.

Если попробовать поискать статьи про эту библиотеку, то можно найти достаточно интересную информацию о том, что при тестировании на большой базе распознавания лиц Labeled Faces in the Wild модель показала точность более 99%. Так как библиотека для python является лишь «оберткой» основного инструмента, весь функционал можно использовать через командную строку, что в некоторых ситуациях очень удобно.

Для установки необходимо сначала установить библиотеку для python, которая самостоятельно установит dlib:

pip install face_recognition

После установки (процесс занимает около 10 минут) мы добавим библиотеку в проект. Кроме этого, для работы с изображениями добавим библиотеку PIL:

import face_recognition from PIL import Image

В начале мы будем искать просто лица на изображении и выводить их по очереди. Для этого загрузим изображения.

image = face_recognition.load_image_file("test.jpg") face_locations = face_recognition.face_locations(image)

Затем поочередно выведем изображения на экран следующим кодом:

for face_location in face_locations: top, right, bottom, left = face_location print("A face is located at pixel location Top: {}, Left: {}, Bottom: {}, Right: {}".format(top, left, bottom, right)) face_image = image[top:bottom, left:right] pil_image = Image.fromarray(face_image) pil_image.show()

Исходное изображение:

Результат обработки будет следующий:

Как вы видите, практически все лица солдат были определены. Не определилось лишь лицо, которое видно лишь наполовину.

Теперь попробуем найти конкретного человека на изображении.

Для этого нам нужно изображение-шаблон и изображение, на котором нужно осуществить поиск.

В начале загрузим изображение лица человека, которого будем искать:

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

Это изображение преобразуем в нужный формат (для программы).

Так же загружаем изображение для обработки:

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

Далее начинаем искать:

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

В переменную result будут помещены результаты поиска в виде массива. Если первый элемент будет иметь значения True, то объект найден. Индекс элемента будет совпадать с индексом массива изображений, который мы подаем в метод compare_faces.

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

if results[0] == True: print("Найден!") else: print("Кто то другой!")

Сначала попробуем найти среди людей из первого изображения интересующего нас человека:

Исходное изображение:

Изображение для поиска

Результат

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

Исходное изображение

Результат:

Вот таким простым образом можно искать лица людей. Библиотека face_recognition, которая реализует огромные возможности dlib, может использоваться в различных обработках видео, при этом не сильно загружая ПК и выдавая стабильно высокие результаты.

0
Комментарии
-3 комментариев
Раскрывать всегда