Код программы распознавания лиц

Распознавание лиц — это метод идентификации или проверки лица по цифровым изображениям или видеокадрам.

Человек может быстро идентифицировать лица без особых усилий, но для компьютера это сложная задача. Существуют различные сложности, такие как низкое разрешение, окклюзия, вариации освещения и т. д. Эти факторы сильно влияют на точность компьютера для более эффективного распознавания лица.

Во-первых, необходимо понимать разницу между обнаружением лиц и распознаванием лиц:

  • Обнаружение лиц: Обнаружение лиц обычно рассматривается как поиск лиц (местоположение и размер) на изображении и, возможно, их извлечение для использования алгоритмом обнаружения лиц.
  • Распознавание лиц: Алгоритм распознавания лиц используется для поиска особенностей, которые однозначно описаны на изображении. Изображение лица уже извлечено, обрезано, изменено в размере и обычно преобразовано в оттенки серого.

Существуют различные алгоритмы обнаружения и распознавания лиц в OpenCV. Мы узнаем об обнаружении лиц с помощью каскадного алгоритма HAAR.

Программы на Python | Распознавание лиц с камеры и в видео на Python | Opencv-python

Основная концепция каскадного алгоритма HAAR

Каскад HAAR — это подход машинного обучения, при котором каскадная функция обучается на множестве положительных и отрицательных изображений.

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

Не смотри в камеру! Пишем свою систему распознавания лиц на Python

В Гонконге протестующие уничтожают уличные камеры, чтобы избежать распознавания лиц. Неужели эта технология уже настолько эффективна, что с ней нужно бороться? Я купил камеру с датчиком глубины, чтобы попробовать самостоятельно реализовать алгоритм сравнения лиц. Вот что у меня получилось.

Зачем нужна аутентификация по лицу

Существует несколько вариантов аутентификации с помощью биометрии, и каждый из них имеет свои недостатки.

  1. Идентификация по отпечатку пальца. Об этом способе я писал в статье «Волшебные «пальчики». Как работают механизмы биометрической авторизации по отпечатку пальца». Главный недостаток идентификации по отпечатку пальца — сравнительно небольшая точность. Отпечаток пальца легко подделать, особенно если сканер слабый.
  2. Отпечаток голоса. Наш голос можно разбить на множество уникальных характеристик. Подробнее об этом ты можешь узнать в статье «Машинный слух. Как работает идентификация человека по его голосу». Но и этот метод весьма неточен: из-за болезни или курения уникальные характеристики голоса могут измениться, и твой девайс тебя уже не узнает.
  3. Сканеры сетчатки и радужки глаза. Они используют сложные алгоритмы и дорогостоящие громоздкие приборы для сканирования. В среднем надежность таких аппаратов выше, чем у более простых в реализации устройств. Но и стоимость таких сканеров соответствующая: базовые модели продаются по цене от пятнадцати тысяч рублей.
  4. Идентификация по трехмерному изображению лица. Этот метод становится все популярнее из-за выгодного соотношения цены и качества. 3D-камеры работают в разном диапазоне дальности, поэтому системы распознавания и идентификации лица могут быть незаметными и не требовать никаких действий от человека. Точность анализа поверхности лица высока, так что все зависит только от разрешения камеры.
Читайте также:
Как сделать лицо мультяшным программа

Камера

Я выбрал недорогую, но при этом функциональную камеру Intel RealSense SR305, которая может снимать и цветное изображение, и глубинное изображение в разрешении 640 на 480 пикселей с частотой до 60 кадров в секунду.

Распознавание лиц на Python | Определение возраста, эмоций и расы по фотографии лица

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

Так выглядит камера, установленная на треногу

Рабочее расстояние камеры небольшое: излучатель расположен так, что объекты, которые находятся ближе двадцати сантиметров, не будут освещены и, соответственно, не будут просканированы. Слишком далеко расположенные предметы — дальше двух метров — тоже окажутся не видны, поскольку мощность лазера не позволит спроецировать на них инфракрасную сетку.

В комплекте с камерой идет провод USB и инструкция со ссылкой на официальный SDK в репозитории на GitHub.

Установка SDK

В первую очередь нужно установить программное обеспечение, чтобы камера заработала. Пользователи Windows могут просто скачать и установить программу. Если же у тебя Linux, но не Ubuntu 16 или 18, то придется собирать проект самостоятельно.

Для начала скачаем исходный код и подготовим площадку для сборки.

$ git clone https://github.com/IntelRealSense/librealsense.git $ cd librealsense $ mkdir build cd build

Теперь можно собрать проект, чтобы посмотреть, как работает камера.

$ cmake .. -DBUILD_EXAMPLES=true -DBUILD_WITH_OPENMP=false -DHWM_OVER_XU=false $ make -j4 $ make install

Запуск в macOS

Если ты пользователь macOS, для запуска графических программ тебе придется использовать Xcode и соответствующий флаг при конфигурации. Так ты сможешь сгенерировать проект Xcode, чтобы запустить каждую утилиту по отдельности.

$ cmake .. -DBUILD_EXAMPLES=true -DBUILD_WITH_OPENMP=false -DHWM_OVER_XU=false -G Xcode $ open librealsense2.xcodeproj

Откроется окно Xcode. Выбери необходимую программу, собери проект комбинацией клавиш Command + B и нажми кнопку Build and run.

Окно Xcode с файлами сборки для macOS

Для пробного запуска нам понадобится утилита RealSense Viewer, которая показывает на экране, что видит камера.

Таким будет окно RealSense Viewer, если подключить камеру Примерно так выглядит трансляция глубины

WWW

На GitHub ты можешь найти подробную инструкцию по сборке для Linux и для macOS.

Подключаем Python

Linux и Android

Знаете ли вы, что каждый раз, когда вы загружаете фотографию в Facebook, платформа использует алгоритмы распознавания лиц для идентификации людей на этом изображении? Или что определенные правительства во всем мире используют технологию распознавания лиц для выявления и поимки преступников? Мне не нужно говорить, что теперь вы можете разблокировать смартфоны своим лицом!

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

Читайте также:
Программа загрузчик не работает

В этой статье мы собираемся сделать именно это. Сначала мы разберемся с внутренними принципами распознавания лиц, а затем возьмем простой пример и реализуем его в Python. К концу статьи вы создадите свою самую первую модель распознавания лиц!

Понимание того, как работает распознавание лиц

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

Каждый алгоритм машинного обучения принимает набор данных в качестве входных данных и учится на этих данных. Алгоритм просматривает данные и выявляет закономерности. Например, предположим, что мы хотим определить, чье лицо присутствует на данном изображении, есть несколько вещей, которые мы можем рассматривать как паттерн:

  • Высота/ширина лица.
  • Высота и ширина могут быть ненадежными, поскольку изображение может быть масштабировано по разному. Однако даже после изменения масштаба неизменными остаются отношения — отношение высоты лица к ширине лица не изменится.
  • Цвет лица.
  • Ширина других частей лица, таких как губы, нос и т. д.

Понятно, что здесь есть закономерность — разные лица имеют разные размеры, как показано выше. Подобные лица имеют похожие размеры. Задача состоит в том, чтобы преобразовать определенное лицо в числа — алгоритмы машинного обучения понимают только числа. Это числовое представление «лица» (или элемента в обучающем наборе) называется вектором признаков. Вектор признаков состоит из различных чисел в определенном порядке.

В качестве простого примера мы можем отобразить «лицо» в вектор объектов, который может включать в себя различные признаки, такие как:

  • Высота лица (см)
  • Ширина лица (см)
  • Средний цвет лица (R, G, B)
  • Ширина губ (см)
  • Высота носа (см)

По сути, учитывая изображение, мы можем отобразить различные объекты и преобразовать их в вектор объектов, например:

Высота лица (см) — 23.1
Ширина лица (см) — 15.8
Средний цвет лица (RGB) — (255, 224, 189)
Ширина губ (см) — 5.2
Высота носа (см) — 4.4

Итак, наше изображение теперь представляет собой вектор, который можно представить в виде (23.1, 15.8, 255, 224, 189, 5.2, 4.4). Конечно, на изображении может быть множество других черт (например, цвет волос, волосы на лице, очки и т. l.). Однако, для примера, давайте рассмотрим только эти 5 простых признаков.

Теперь, когда мы закодировали каждое изображение в вектор признаков, проблема стала намного проще. Ясно, что когда у нас есть 2 лица (изображения), которые представляют одного и того же человека, полученные векторы признаков будут очень похожи. Иными словами, «расстояние» между двумя векторами признаков будет довольно маленьким.

Машинное обучение может помочь нам с двумя вещами:

  1. Получение вектора объекта: трудно вручную перечислить все признаки, потому что их очень много. Алгоритм машинного обучения может разумно обозначить многие из таких признаков. Например, сложными характеристиками могут быть: соотношение высоты носа и ширины лба. Человеку будет довольно сложно перечислить все такие функции «второго порядка».
  2. Алгоритмы согласования: после того, как векторы признаков получены, алгоритм машинного обучения должен сопоставить новое изображение с набором векторов признаков, присутствующих в выборке.
Читайте также:
Программа которая используется для написания книг статей позволяющая исправлять ошибки

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

Пример

Нам дают несколько лиц — возможно, таких знаменитостей, как Марк Цукерберг, Уоррен Баффет, Билл Гейтс, Шахрукх Кхан и т. д. Назовите эту группу лиц нашей совокупностью. Теперь нам дают изображение еще одной знаменитости («новая знаменитость»). Задача проста — определить, входит ли эта «новая знаменитость» в число присутствующих в совокупности.

Вот некоторые из изображений в совокупности:

Как видите, у нас есть такие знаменитости, как Барак Обама, Билл Гейтс, Джефф Безос, Марк Цукерберг, Рэй Далио и Шахрукх Кхан.

Теперь вот «новая знаменитость»:

Примечание: все вышеперечисленные изображения были взяты из изображений Google.

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

Существует удивительно простая библиотека Python, которая инкапсулирует все, что мы рассматривали выше — создание векторов признаков из лиц и умение различать лица. Эта библиотека Python называется face_recognition и в глубине использует dlib — современный фреймворк C ++, который содержит несколько алгоритмов машинного обучения, которые помогают в написании сложных приложений на C ++.

Библиотека face_recognition в Python может выполнять большое количество задач:
— найти все лица на заданном изображении;
— найти и управлять чертами лица в изображении;
— идентифицировать лица на изображениях;
— распознавать лица в реальном времени.
Здесь мы поговорим о 3-м случае использования — идентификации лиц на изображениях.

Вы можете найти исходный код библиотеки face_recognition здесь, на Github: https://github.com/ageitgey/face_recognition

На самом деле, есть также руководство по установке библиотеки face_recognition:

Перед установкой face_recognition вам также необходимо установить dlib. Вы можете найти инструкции по установке dlib здесь:

Реализация в Python

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

# импорт библиотек import os import face_recognition # составляем список всех доступных изображений images = os.listdir(‘images’) # загружаем ваше изображение image_to_be_matched = face_recognition.load_image_file(‘my_image.jpg’) # преобразуем загруженное изображение в вектор признаков image_to_be_matched_encoded = face_recognition.face_encodings( image_to_be_matched)[0] # итерация для каждого изображения for image in images: # загружаем изображение current_image = face_recognition.load_image_file(«images/» + image) # преобразуем загруженное изображение в вектор признаков current_image_encoded = face_recognition.face_encodings(current_image)[0] # проверяем соответствие изображений result = face_recognition.compare_faces( [image_to_be_matched_encoded], current_image_encoded) # проверка совпадения if result[0] == True: print «Matched: » + image else: print «Not matched: » + image

Источник: distrland.blogspot.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru