Северный (Арктический) федеральный университет им. М.В. Ломоносова
Опубликован: 23.10.2013 | Доступ: свободный | Студентов: 1765 / 617 | Длительность: 09:26:00
Специальности: Программист
Лекция 5:

Модуль анализа мимики лица Intel Perceptual Computing SDK

Метод главных компонент

Метод главных компонент (Principal Component Analysis, PCA) – один из наиболее распространенных методов для уменьшения размерности данных, потери наименьшего количества информации. Метод позволяет выделять характерные признаки лица и использовать их для реконструкции и восстановления. Данный метод основан на преобразовании Карунена – Лоэва.

Главная идея этого метода состоит в представлении изображений лиц людей в виде набора главных компонент изображений, называемых "собственные лица" (Eigenfaces). Полезным свойством собственных лиц является то, что изображение, соответствующее каждому такому компоненту имеет лицеподобную форму, как представлено на рис. 8.3. Вычисление главных компонент основывается на вычислении собственных векторов и собственных значений ковариационной матрицы, которая рассчитывается из изображения. Сумма главных компонент, умноженных на соответствующие собственные вектора, является реконструкцией изображения.

Пример изображений собственных векторов

Рис. 8.3. Пример изображений собственных векторов

Для каждого изображения лица вычисляются его главные компоненты. Обычно берётся от 5 до 200 главных компонент. Остальные компоненты кодируют мелкие различия между лицами и шумами. Процесс распознавания заключается в сравнении главных компонент неизвестного изображения с компонентами всех известных изображений. При этом предполагается, что изображения лиц, соответствующих одному человеку, сгруппированы в кластеры в собственном пространстве. Из базы данных выбираются изображения кандидаты, имеющие наименьшее расстояние от входного (неизвестного) изображения [ [ 4 ] , [ 10 ] , [ 12 ] ].

Так же выделяют антропометрический метод, суть которого заключается в выделении набора ключевых точек (или областей) лица и последующем выделении набора признаков. Каждый признак является либо расстоянием между ключевыми точками, либо отношением таких расстояний. Кроме количественных признаков существуют качественные признаки, которые полнее описывают объект принятия решений: пол, тип, телосложение, рост. В свою очередь каждый признак может принимать одно из нескольких возможных значений. Для того, чтобы представить количественные признаки в бинарном виде необходимо, основываясь на статистические данные, разбить диапазон допустимых значений признака на интервалы. Таким образом, каждая личность, изображенная на фотопортрете, может быть описана массивом признаков в виде последовательности нулей и единиц, порцией знаний.

Основной принцип работы программ по отслеживанию и распознаванию лиц работают следующим образом. На первом шаге анализируется изображение, после чего осуществляется поиск лиц. Затем идет обработка, направленная на выделение индивидуальных особенностей каждого обнаруженного человеческого лица. На основе отобранных индивидуальных характеристик составляется цифровой шаблон. Индивидуальными характеристиками в этом случае являются расстояние между глазами, глубина их посадки, формы скул, носа, челюсти. Все это преобразуется в цифровой код, который представляет собой что-то подобное "цифровому слепку лица", по которому в дальнейшем производится сравнение, например с разыскиваемыми преступниками. В большинстве случаев восстановить обратное изображение уже практически не возможно. Этот подход является основой биометрии [ [ 5 ] ].

SDK для создания приложений по отслеживанию и распознаванию лиц

В настоящее время существует большое количество библиотек для разработчиков, в которые включены модули по отслеживанию и распознаванию лиц. Особым вниманием пользуются следующие библиотеки:

  • Intel Perceptual Computing SDK – включает в себя набор алгоритмов для анализа человеческого лица, включающих определения местоположения лица, его ориентации в пространстве, выделение контрольных точек, и распознавание лица в базе данных;
  • Kinect for Windows SDK – включает в себя библиотеку Face Tracking, которая позволяет отслеживать лицо человека в кадре с построением 87-ми узловой схемы лица, не поддерживает распознавание лиц;
  • OpenCV – эта библиотека включает в себя модуль opencv_objdetec, который позволяет обнаруживать объекты на изображении, включая нахождение лиц и обнаружение людей;
  • IIT Face Recognizer SDK - представляет собой алгоритмическо-программный комплекс, решающий задачи верификации и идентификации пользователя на основе сравнительного анализа предъявляемого лица. Процедура верификации предусматривает сравнение предъявляемого лица с выбранным лицом, хранящимся в текущей базе данных. Процедура идентификации предусматривает проверку принадлежности предъявляемого лица ко всей базе данных лиц или заранее оговоренной ее части. Предлагаемое решение хорошо зарекомендовало себя в системах персонального доступа, игровых системах, системах доступа к данным и ряде других приложений [ [ 3 ] ].

Возможности модуля анализа лица Intel Perceptual Computing SDK

Модуль анализа лица Intel Perceptual Computing SDK предоставляет набор алгоритмов, которые позволяют определять местоположения лица, его ориентации в пространстве, выделение контрольных точек, и распознавание лица в базе данных [ [ 6 ] , [ 7 ] ].

Как показано на рис. 8.4, алгоритм обнаружения лиц выявляет прямоугольную плоскость положения лица или нескольких лиц из изображения или видео последовательности. Это может быть полезным, когда необходимо определить, сколько лиц на изображении и их расположение.

Алгоритм определения контрольных точек дополнительно идентифицирует характерные точки лица (глаза, рот и т.д.) для определенного прямоугольника. Местоположение глаз представляет особый интерес для приложений, которые основаны на индикации изменения перспективы в зависимости от того, как пользователи смотрят на экран. Также функция может быть полезна при создании аватара или для выяснения ориентации головы, которую можно запросить прямо из алгоритма.

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

Операции слежения за лицом

увеличить изображение
Рис. 8.4. Операции слежения за лицом

Общий алгоритм создания приложений по отслеживанию лица

Приложение использует следующую процедуру для создания экземпляра модуля анализа лица и предоставления из него данных:

1) Расположение модуля реализации:

Приложение использует функцию PXCSession::CreateImpl для создания экземпляра интерфейса PXCFaceAnalysis, как показано в примере 8.1.

PXCFaceAnalysis *face=0;
session->CreateImpl(PXCFaceAnalysis::CUID,(void**)&face);
8.1. Создание экземпляра PXCFaceAnalysis

2) Инициализация модуля:

Для инициализации модуля используются две функции QueryProfile и SetProfile. Первая функция возвращает доступные конфигурации. Последняя содержит одну конфигурацию в качестве текущей активной конфигурации. В примере 8.2, приложение запрашивает первую поддерживаемую конфигурацию, использует ее, чтобы найти устройство ввода, которое может предоставить данные, а затем инициализирует модуль с конфигурацией. Следует отметить, что требования входного модуля задаются как часть структуры ProfileInfo, которая может быть как глубинным изображением, и/или цветным изображением. Служебный класс UtilCapture обнаружит устройство ввода, соответствующее входным характеристикам модуля.

PXCFaceAnalysis::ProfileInfo pinfo;
face->QueryProfile(0,&pinfo);
UtilCapture capture(&session); 
capture.LocateStreams(&pinfо.inputs);
face->SetProfile(&pinfo);
8.2. Инициализация модуля анализа лица

3) Инициализация элементов анализа лица:

Дополнительно к инициализации модуля приложению необходимо инициализировать каждый элемент анализа лица, такой как отслеживание лица и его контрольных точек. Каждый элемент имеет собственные конфигурационные параметры. Приложение вызывает функции QueryProfile и SetProfile для интерфейса каждого элемента, например, PXCFaceAnalysis::Detection, PXCFaceAnalysis::Landmark, как показано в примере 8.3.

PXCFaceAnalysis::Detection *det=face->DynamicCast
  <PXCFaceAnalysis::Detection>();
PXCFaceAnalysis::Detection::ProfileInfo dinfo;
det->QueryProfile(0,&dinfo);
det->SetProfile(0,&dinfo);
8.3. Инициализация элемента отслеживания лица модуля анализа лица

4) Цикл обработки данных:

В цикле приложение передает данные от устройства ввода модулю анализа лица. Для передачи данных приложение вызывает функцию ProcessImageAsync, как показано в примере 8.4. Следует отметить, что данные из устройства ввода могут содержать комбинированные изображения, такие как цветные и глубиные изображения. Приложение может использовать набор функций PXCSmartArray<PXCImage> для упрощения программирования.

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

PXCSmartArray<PXCImage> images;
PXCSmartSPArray sps(2);
for (;;) {
  // Get samples from input device and pass to the module capture.
  ReadStreamAsync(images.ReleaseRefs(),sps.ReleaseRef(0)) 
  face->ProcessImageAsync(images,sps.ReleaseRef(1));
  sps.SynchronizeEx();
  // Tracking or recognition results are ready. Now process them
  ...
}
8.4. Цикл обработки данных модуля анализа лица

Для простого отслеживания лица и определения контрольных точек с входных данных камеры или записанного файла приложение может использовать конвейерный утилитный класс UtilPipeline или встроенную версию процедуры представленной выше, что показано в примере 8.5.

class MyPipeline: public UtilPipeline {
public:
  MyPipeline() {
    EnableFaceLandmark();
  }
  virtual bool OnNewFrame() {
    PXCFaceAnalysis *face=QueryFace(); 
    ... // Face tracking operations
  }
};
int wmain(int argc, wchar_t* argv[]) {
  MyPipeline mp;
  mp.LoopFrames(); 
  return 0;
}
8.5. Отслеживание лица на основе использования UtilPipeline
Гульзия Калымова
Гульзия Калымова
Александр Радченко
Александр Радченко