Введение. В связи с прогрессом, происходящим в сфере информационных технологий, а также ростом объема информации, которую люди хотят обрабатывать, средства автоматизации различных процессов входят в нашу жизнь постоянно. Задачи, решаемые областью компьютерного зрения, наиболее широко исследуются в настоящее время. Одной из подобластей является анализ изображений лица человека (Рисунок 1).
Рисунок 1 – Задачи, решаемые в рамках анализа изображений лиц человека
Применение технологий распознавания лиц в настоящее время очень актуально. Данные решения используются для идентификации людей в биометрических системах безопасности или как дополнительный сервис, например, в социальных сетях [4]. Такие системы могут повысить уровень безопасности какого-либо устройства или сервиса, а также предоставить пользователям удобные возможности по поиску запечатленных на фото людей. Чтобы обычному разработчику реализовать такую систему, понадобятся глубокие знания в алгоритмах распознавания лиц человека и умение правильно это применить в конкретном языке программирования. Чтобы облегчить жизнь разработчикам, занимающихся вопросами компьютерного зрения, была создана библиотека OpenCV, которая предоставляет аппарат для выполнения задач компьютерного зрения [5].
Библиотека OpenCV. OpenCV – это библиотека с открытым исходным исходом, которая содержит алгоритмы для решения задач компьютерного зрения, обработки изображений и численных алгоритмов общего назначения [1]. Она написана на языках C и C++ и может работать на компьютерах под управлением разных операционных систем. Главной ее целью является предоставление простого интерфейса, позволяющего разрабатывать приложения с использованием возможностей компьютерного зрения. Библиотека OpenCV содержит множество функций из разных областей компьютерного зрения [6].
Структура библиотеки. OpenCV структурирована по пяти основным компонентам (Рисунок 2). Первый компонент содержит основные алгоритмы для обработки изображений и алгоритмы машинного зрения высокого уровня. Следующий компонент представляет из себя библиотеку машинного обучения, которая может решать задачи статистической классификации и кластеризации. Есть также компонент, предоставляющий функции для взаимодействия с операционной системой, файловой системой и аппаратными средствами компьютера. Он позволяет отображать различные изображения, работать с камерами для записи видео или фото, сохранять информацию в файлы и другое. Еще один компонент просто хранит в себе основные структуры данных для работы с остальными модулями.
Рисунок 2 – Основные модули OpenCV
Пятый компонент CvAux здесь не показан, он содержит устаревшие области и экспериментальные алгоритмы, конкретной документации по нему нету.
Применение OpenCV. Для начала нужно получить изображение с камеры, это делается очень просто с помощью компонента HighGui [9]. Зациклив получение изображения, можно получить поток изображений – видео. Затем с помощью встроенных структур Mat и Image нужно представить изображение в сером цвете. Все это происходит в видеопотоке, то есть каждый кадр передается на обработку каскадному классификатору, который и будет обнаруживать лицо. Данный классификатор работает по методу Виолы-Джонса.
Метод Виолы-Джонса. Данный алгоритм позволяет обнаруживать различные объекты на изображениях в реальном времени [2,3]. Основной его задачей было обнаружение лиц. Несмотря на то, что обучение классификаторов происходит очень долго, поиск лица осуществляется быстро. Недостатком алгоритма является то, что он распознает черты лица только под небольшим углом до 30 градусов, если больше количество обнаружений резко падает [4].
Алгоритм строится на следующих основных принципах (Рисунок 3, 4):
· Интегральное представление подаваемых на вход алгоритма изображений;
· Применение признаков Хаара для поиска лица;
· Использование каскадов признаков для быстрого отбрасывания участков, где нет лица;
· Использование алгоритма бустинга для выбора подходящих признаков;
· Использование классификатора для анализа признаков на присутствие характеристик лица;
· Обработка изображения методом скользящего окна;
Рисунок 3 – Алгоритм метода Виолы-Джонса
Рисунок 4 – Обработка изображения скользящим окном
Результатом работы классификатора является набор прямоугольников, которые обозначают обнаруженные лица. Эти прямоугольники можно отобразить на изображении при помощи функции Draw. Далее нужно сформировать обучающее множество для дальнейшего обучения распознавателя. Множество должно представлять набор нормализованных изображений, приведенных к серому цвету, и соответствующих им идентификаторов.
Алгоритм Fisherface. Полученные данные нужно подать на вход распознавателю, который работает по алгоритму Fisherface, он является модификацией Eigenface и производит более точное распознавание при различном освещении и выражениях лица [7]. Метод собственных лиц (Eigenface) основан на методе главных компонент или по-другому. С его помощью можно уменьшить размерность данных без потери большого количества информации. Из выборки путем линейных преобразований формируются собственные векторы для каждого изображения, они называются собственными лицами. Данные векторы записываются в специальный файл с расширением yaml. Затем можно производить процесс идентификации, подав желаемое изображение на вход распознавателю. Он также вычисляет собственный вектор для поданного изображения и сравнивает его со значениями в файле, найдя наиболее подходящее, он возвращает соответствующий идентификатор [8]. По этому идентификатору можно понять, какому человеку принадлежит распознанное лицо.
Заключение. Таким образом можно подвести итог: библиотека OpenCV предоставляет достаточный функционал для взаимодействия с камерой, обнаружения лица на входном изображении и идентификации человека. Конечно, точность и охват условий, при которых идентификация будет успешной, далека от платных систем, основанных на нейронных сетях. Успешность обнаружения лица на изображении будет зависеть от правильно выбранного каскада признаков Хаара, обученных на обнаружение лица в разных плоскостях, от световых условий, зашумленности изображения и других условий. Успех же идентификации будет зависеть от количества и разнообразия обучающих данных для классификатора. Но тем не менее, можно с уверенностью сказать, что разработчик может использовать данный инструмент и построить собственную систему, которая будет использовать возможности компьютерного зрения.