Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Воган Ли - Python для хакеров (Библиотека программиста) - 2023.pdf
Скачиваний:
5
Добавлен:
07.04.2024
Размер:
14.76 Mб
Скачать

10

Ограничение доступа по принципу распознавания лиц

В предыдущей главе вы попробовали себя в качестве

техника в составе пехоты Звездных сил коалиции.

Здесь ваша роль останется прежней, а вот задача

будет уже посложнее. Теперь надо не просто обнару-

живать лица, а распознавать их. Ваш командующий,

капитан Демминг, обнаружил лабораторию с межпространственным порталом, рождающим монстров, и хочет,

чтобы доступ туда был только у него.

Как и в предыдущей главе, следует действовать быстро, поэтому доверимся Python и OpenCV. В частности, мы воспользуемся алгоритмом построения гистограммы на основе локальных бинарных шаблонов (LBPH). Это один из самых старых и простых в применении алгоритмов распознавания лиц, с его помощью мы и заблокируем доступ в лабораторию. Если вы еще не установили OpenCV, то обратитесь к разделу «Установка библиотек Python» на с. 31.

Распознавание лиц с помощью LBPH

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

Распознавание лиц с помощью LBPH      291

например расстояние между глаз, ширина рта, длина носа и ширина лица. Эти четыре параметра, данные по порядку в сантиметрах, могут сформировать такой вектор признаков (5.1, 7.4, 5.3, 11.8). Представление лиц в базе данных с помощью этих векторов ускоряет поиск, а также позволяет выражать отличие между векторами в численной величине, или расстоянии.

Конечно же, компьютерное распознавание лиц требует наличия более четырех признаков. При этом разные алгоритмы работают с разными признаками. Сейчас доступны Eigenfaces, LBPH, Fisherfaces, масштабно-инвариантная трансформация признаков (SIFT, scale-invariant feature transform), устойчивые ускоренные признаки (SURF, speeded up robust features) и различные подходы с применением искусственных нейронных сетей. Когда изображения лиц делаются в контролируемых условиях, эти алгоритмы работают с высокой точностью, практически как люди.

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

Схема распознавания лиц

Прежде чем перейти к подробностям алгоритма LBPH, рассмотрим общий принцип распознавания лиц. Он состоит из трех основных этапов: захвата, обу­ чения и прогнозирования.

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

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

Следующий этап — обучение алгоритма распознавания лиц (рис. 10.2). Алгоритм — в нашем случае LBPH — анализирует каждое из обучающих изображений и записывает результаты в файл YAML (.yml). YAML — это язык сериализации данных в удобочитаемый формат, который изначально расшифровывался как «Yet Another Markup Language» («Еще один язык разметки»), но теперь означает

292      Глава 10. Ограничение доступа по принципу распознавания лиц

«YAML Ain’t Markup Language» («YAML не является языком разметки»). Таким образом подчеркивается, что он больше чем просто инструмент разметки документов.

За а

ID = 1

Б

ID = 1 Ба аа

В - а а

ID = 2

Л

ID = 2

Рис. 10.1. Захват изображений лица для обучения распознавателя лиц

О

 

ID = 1

 

Ба а

Ра а а

trainer.yml

а

 

 

ID = 2

Рис. 10.2. Обучение алгоритма распознавания и запись результатов в файл

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

Распознавание лиц с помощью LBPH      293

П а

Unknown

 

А

ID = 1

ID = 1

 

 

а а а П

= 80

У = 64

 

 

 

 

 

Б

 

В- а а

 

П

ID = 2

 

 

 

trainer.yml

= 95

 

 

 

 

 

 

Unknown

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ID = 2

 

 

ID = 1 ID = 2

 

У = 159

 

 

 

Unknown

Рис. 10.3. Прогнозирование неизвестных лиц при помощи обученного алгоритма распознавания

Обратите внимание, что алгоритм распознавания осуществляет прогноз личности каждого лица. Если в файле YAML хранится всего один вариант, то алгоритм распознавания присваивает каждому лицу ID «обученного» или, лучше сказать, контрольного лица. Он также выводит значение уверенности, представляющее измерение расстояния между новым и контрольным лицами. Чем больше это значение, тем хуже совпадение. Чуть позже мы рассмотрим это подробнее, а сейчас просто знайте, что для принятия решения о верности прогноза лица используется пороговое значение. Если уровень уверенности выше установленного порога, программа отменяет совпадение и определяет проверяемое лицо как unknown (рис. 10.3).

Извлечение гистограмм локальных бинарных шаблонов

Предлагаемый OpenCV алгоритм распознавания лиц основан на локальных бинарных шаблонах (LBP). Эти дескрипторы текстур впервые были применены в 1994 году для описания и классификации текстур поверхностей, различения между бетоном и ковровым покрытием и пр. Лица также состоят из текстур, значит, эта техника вполне годится для их распознавания.

Прежде чем извлекать гистограммы, нужно сгенерировать бинарные шаблоны. Алгоритм LBP вычисляет локальное представление текстуры, сравнивая каждый пиксель с соседними. Первый шаг вычисления — смещение небольшого окна по изображению лица и запись информации о пикселях. На рис. 10.4 показан пример такого окна.

294      Глава 10. Ограничение доступа по принципу распознавания лиц

3x3

160

110

50

180

90

50

200

115

100

 

П

 

 

90

 

1

 

1

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

0

 

 

215

 

 

 

 

 

 

 

 

 

 

1

 

1

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Д

 

 

Д

а

 

а

 

11010111

 

215

 

Рис. 10.4. Образец скользящего окна 3 × 3 пикселя, используемого для записи локальных бинарных шаблонов

Следующий шаг — конвертация пикселей в двоичный формат с использованием центрального значения (в данном случае 90) в качестве порога. Для этого сравниваются восемь соседних значений с указанным порогом. Если соседнее значение оказывается равным или больше него, ему присваивается 1. Если же оно меньше порога, присваивается 0. Далее, игнорируя центральное значение, конкатенируем двоичные значения строка за строкой (некоторые методы это делают по часовой стрелке), формируя новое двоичное значение (11010111). Завершаем процесс конвертацией этого двоичного числа в десятичное (215) и сохранением его в позиции центрального пикселя.

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

Теперь пора извлекать гистограммы из LBP-изображения, созданного ранее. Для этого мы используем сетку, чтобы разделить LBP-изображение на прямоугольные области (рис. 10.5). В каждой области построим гистограмму из значений LBP (на рис. 10.5 они называются гистограммой локальной области).

Г а а

а а

К а а а а а

а а

О а

Р а LBP

О а ( а)

Рис. 10.5. Извлечение гистограмм LBP

Распознавание лиц с помощью LBPH      295

После построения гистограмм локальных областей нормализуем и конкатенируем их в одну длинную гистограмму (в урезанном виде показана на рис. 10.5). Поскольку мы используем изображение в оттенках серого с показателем интенсивности от 0 до 255, каждая гистограмма содержит 256 значений. Если вы применили сетку 10 × 10, как на рис. 10.5, то в финальной гистограмме получится 10 × 10 × 256 = 25 600 состояний. Предполагается, что эта составная гистограмма включает признаки, необходимые для распознавания лица. Таким образом, эти признаки являются представлениями изображения лица, и процесс распознавания состоит из сравнения представлений, а не самих изображений.

Для прогнозирования личности нового, неизвестного лица, мы извлекаем его конкатенированную гистограмму и сравниваем ее с гистограммами из базы данных. Сравнение — это измерение расстояния между гистограммами. Для вычисления могут использоваться различные методы, включая евклидову метрику, абсолютное расстояние, хи-квадрат и т. д. Алгоритм возвращает ID контрольного изображения с наиболее близким совпадением гистограммы и показатель уверенности. После можно применить к этому показателю порог, как показано на рис. 10.3. Если уверенность относительно оцениваемого изображения окажется ниже порогового значения, значит, совпадение найдено.

Так как OpenCV инкапсулирует все эти шаги, реализация алгоритма LBPH сложностей не вызывает. Этот алгоритм также дает отличные результаты в контролируемой среде и не подвержен влиянию изменения освещения (рис. 10.6).

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

Рис. 10.6. Алгоритм LBP устойчив к изменению освещения