
Средства разработки
Для решения задач в качестве средства разработки должен был выступать язык высокого уровня, который поддерживает объектно-ориентированную парадигму, быстро обрабатывает входную графическую информацию, и дает возможность создания на нем кросс-платформенных библиотек и приложений. Таким образом, был выбран объектно-ориентированный язык программирования C++, удовлетворяющий всем этим требованиям.
Язык C++ производительнее, например, Java, что немаловажно для обработки графической информации, нет необходимости в виртуальной машине для приложений, написанных на C++. К тому же, существует большое количество библиотек по распознаванию образов (яркий пример – OpenCV [7]) и определению характерных точек (asmlibrary [8] или STASM [9]), написанных на C, что определяет их легкое использование в приложениях на C++.
В качестве среды разработки был выбран инструментарий, предоставляемый фреймворком Qt [10] для создания приложений. К сильным сторонам Qt можно отнести:
Кроссплатформенность: Qt работает как в настольных операционных системах Windows, Linux, Mac OS и др., так и мобильных: Symbian, Maemo, MeeGo. Qt позволяет запускать написанное с его помощью программное обеспечение в большинстве современных операционных систем путём простой компиляции программы для каждой без изменения исходного кода.
Быстроту: часто кросс-платформенные приложения, написанные на платформах Java или .NET, оказываются очень медлительным из-за дополнительного уровня абстракции и проигрывают по скорости приложениям на Qt.
Достоинством данной библиотеки классов является поддержка такого мощного механизма, как «сигналы и слоты» [11].
Дополнительной библиотекой является библиотека компьютерного зрения OpenCV. В ее функционал входит широкий спектр возможностей работы с изображениями. В данном случае это, конечно, поиск лиц методом Виолы-Джонса с использованием каскадов Хаара[12], различные возможности обработки изображения (детектор границ Канни [13], бинаризация изображения [14] и т.д.).
В качестве библиотеки, используемой для выделения черт лица, была взята открытая кросс-платформенная библиотека STASM, которая выделяет характерные точки на основе метода активного контура [15].
Макет программного обеспечения
На рисунке 1 представлена диаграмма классов приложения.
Рисунок 1 – Диаграмма классов приложения
Классы ImageSource, VideoSource и FlowVideoSource отвечают за загрузку и предобработку входной информации. Классы PhotoModelBuilder и VideoModelBuilder наследуются от AbstractBuilder, строят геометрическую модель, используя соответствующие входные данные, и вычисляют значения дескрипторов – характеристик, однозначно определяющих эмоциональное состояние. Значения дескрипторов заносятся в массив results.
Классы PhotoDetector и VideoDetector служат буфером между матаппаратом обработки значений дескрипторов и классами-построителями геометрической модели. Они отправляют результаты в специально обученную нейронную сеть (возможно, интегрированную с Байесовским обучением и нечеткой логикой), а затем имеют возможность получить обратно результат, который получится на выходе нейронной сети и визуализировать его.
На выходе данной системы должна быть эмоция и вероятность того, что человек испытывает именно ее.
На данном этапе создано программное обеспечение, которое дает возможность построения геометрической модели для определения работы мышц лица, на основе которой рассматриваются мимические изменения, характерные для эмоций радости, печали, удивления, гнева, усталости, страха, а также нейтрального выражения лица.
Данная модель была построена с помощью метода активного контура и представлена на рисунке 2.
Рисунок 2 – Геометрическая модель лица
Из всей совокупности точек, необходимых для построения модели активного контура лица, были выделены характерные и соединены таким образом, что углы между образованными прямыми являются дескрипторами эмоционального состояния (рисунок 3).
Рисунок 3 – Выделение дескрипторов эмоционального состояния
Характерные точки были выделены, руководствуясь работами известного психолога, профессора Калифорнийского университета Пола Экмана [16, 17]. Выяснено, что «усталое или сонное» выражение лица, проявляется в опущенных веках, а также у уставшего человека «появляется зевота», чувство же злости и раздражения характеризуют «сжатые и суженные губы», а также во время того, как человек испытывает злость, «брови опускаются и сводятся вместе».
Помимо отрицательных эмоций существуют «эмоции удовольствия, каждая из которых универсальна» и отличается от остальных. Так, удовольствие характеризуется «более широкой улыбкой», но в отличие от прочих улыбок, она «поднимает щёки кверху, собирает в складки кожу под глазами, уменьшает степень открытия глаз».
Дескрипторы были разделены на группы соответственно чертам лица: наблюдая за изменением дескрипторов глаз, можно определить степень их открытости, с помощью изменения дескрипторов губ можно определить степень их сжатия, дескрипторы бровей отвечают за возможность определения их поднятия/опускания, дескрипторы носа указывают движение его крыльев.