Как искать нужных людей на картинке? (сам себе поисковик)
Достаточно часто при работе с видео ставится задача узнать – сколько людей было в кадре и получить их лица.
На первый взгляд задача достаточно простая, но порой ее реализация упирается в огромное количество проблем. Наиболее частая – какую библиотеку использовать, чтобы максимально быстро получить хороший результат?
Решением является — Face recognition (простая библиотека в использовании и установке). По факту является API инструментом, который устанавливается с этой библиотекой. Сам инструмент выделяет черты лица на изображениях, и в случае, если нам нужен такой функционал, пытается по ним идентифицировать найденного человека. Весь функционал написан на языке С++ и сформирован в библиотеку Dlib – наиболее продвинутого сборника, содержащего алгоритмы машинного обучения и имеющего открытый исходный код.
Если попробовать поискать статьи про эту библиотеку, то можно найти достаточно интересную информацию о том, что при тестировании на большой базе распознавания лиц Labeled Faces in the Wild модель показала точность более 99%. Так как библиотека для python является лишь «оберткой» основного инструмента, весь функционал можно использовать через командную строку, что в некоторых ситуациях очень удобно.
Для установки необходимо сначала установить библиотеку для python, которая самостоятельно установит dlib:
После установки (процесс занимает около 10 минут) мы добавим библиотеку в проект. Кроме этого, для работы с изображениями добавим библиотеку PIL:
В начале мы будем искать просто лица на изображении и выводить их по очереди. Для этого загрузим изображения.
Затем поочередно выведем изображения на экран следующим кодом:
Исходное изображение:
Результат обработки будет следующий:
Как вы видите, практически все лица солдат были определены. Не определилось лишь лицо, которое видно лишь наполовину.
Теперь попробуем найти конкретного человека на изображении.
Для этого нам нужно изображение-шаблон и изображение, на котором нужно осуществить поиск.
В начале загрузим изображение лица человека, которого будем искать:
Это изображение преобразуем в нужный формат (для программы).
Так же загружаем изображение для обработки:
Далее начинаем искать:
В переменную result будут помещены результаты поиска в виде массива. Если первый элемент будет иметь значения True, то объект найден. Индекс элемента будет совпадать с индексом массива изображений, который мы подаем в метод compare_faces.
Далее сделаем простенький вывод результата:
Сначала попробуем найти среди людей из первого изображения интересующего нас человека:
Исходное изображение:
Результат
Теперь попробуем другое изображение, на котором человек для поиска будет виден, но в другой одежде и выражением лица.
Результат:
Вот таким простым образом можно искать лица людей. Библиотека face_recognition, которая реализует огромные возможности dlib, может использоваться в различных обработках видео, при этом не сильно загружая ПК и выдавая стабильно высокие результаты.