НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ

«КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ
імені Ігоря Сікорського»

Факультет прикладної математики

Кафедра прикладної математики

«До захисту допущено»

Завідувач кафедри

_____________ О. Р. Чертов

«___» _______________ 2016 р.

Дипломна робота

на здобуття ступеня бакалавра

з напряму підготовки 6.040301 «Прикладна математика»

на тему: Математичне та програмне забезпечення автоматизованої системи визначення емоційного стану людини за її зображенням

Виконав: студент IV курсу, групи КМ-00

Іваненко Іван Іванович	_______________
Керівник	доцент, канд. техн. наук, доцент Петренко П. П.	_______________
Консультант зі спеціальних питань	старший викладач, канд. техн. наук Бондаренко Б. Б.	_______________
Консультант із нормоконтролю	старший викладач Мальчиков В. В.	_______________
Рецензент	проф., д-р техн. наук, проф. Сидоренко С. С.	_______________

Засвідчую, що в цій дипломній роботі немає запозичень із праць інших авторів без відповідних посилань.

Студент ____________

Київ — 2016

Національний технічний університет україни

«Київський політехнічний інститут
імені Ігоря Сікорського»

Факультет прикладної математики

Кафедра прикладної математики

Рівень вищої освіти — перший (бакалаврський)

Напрям підготовки 6.040301 «Прикладна математика»

ЗАТВЕРДЖУЮ

Завідувач кафедри

_____________ О. Р. Чертов

«___» ______________ 2016 р.

ЗАВДАННЯ

на дипломну роботу студенту

Іваненку Івану Івановичу

1. Тема роботи: «Математичне та програмне забезпечення автоматизованої системи визначення емоційного стану людини за її зображенням»,

керівник роботи Петренко Петро Петрович, канд. техн. наук, доцент,

затверджені наказом по університету від «28» травня 2016 р. № 000-С.

2. Термін подання студентом роботи: «15» червня 2016 р.

3. Вихідні дані до роботи: розроблювана система повинна працювати з нечіткими даними, мінімальна точність розпізнавання емоцій — 70%.

4. Зміст роботи: виконати аналіз існуючих методів розв’язання задачі, вибрати метод розпізнавання емоцій за зображенням людини, спроектувати автоматизовану систему розпізнавання емоцій, здійснити програмну реалізацію розробленої системи, провести тестування розробленої системи.

5. Перелік ілюстративного матеріалу: архітектурні графи нейронних мереж, блок-схеми розроблених алгоритмів, схема взаємодії модулів системи, знімки екранних форм.

6. Консультанти розділів роботи:

Розділ	Прізвище, ініціали та посада консультанта	Підпис, дата
завдання
видав	завдання прийняв
Розділ 3. Математичне забезпечення	Бондаренко Б. Б., старший викладач
7. Дата видачі завдання: «15» квітня 2016 р.

Календарний план

№ з/п	Назва етапів виконання
дипломної роботи	Термін виконання етапів роботи	Примітка
1	Огляд літератури за тематикою та збір даних	12.11.2015
2	Проведення порівняльного аналізу математичних методів розпізнавання зображень	14.12.2015
3	Проведення порівняльного аналізу математичних методів розпізнавання емоційного стану за зображенням обличчя	24.12.2015
4	Підготовка матеріалів першого розділу роботи	01.02.2016
5	Розроблення математичного забезпечення для розпізнавання емоційного стану за статичним фронтальним зображенням обличчя	01.03.2016
6	Підготовка матеріалів другого розділу роботи	15.03.2016
7	Підготовка матеріалів третього розділу роботи	05.04.2016
8	Розроблення програмного забезпечення для розпізнавання емоційного стану за статичним фронтальним зображенням обличчя	15.04.2016
9	Підготовка матеріалів четвертого розділу роботи	03.05.2016
10	Оформлення пояснювальної записки	01.06.2016

Студент	______________	Іваненко І. І.
Керівник роботи	______________	Петренко П. П.

Анотація

Дипломну роботу виконано на 28 аркушах, вона містить 2 додатки та перелік посилань на використані джерела з 16 найменувань. У роботі наведено 4 рисунки та 2 таблиці.

Метою даної дипломної роботи є створення математичного та програмного забезпечення для розпізнавання базових людських емоцій за статичним фронтальним зображенням її обличчя.

У роботі проведено аналіз існуючих рішень указаної задачі — штучних нейронних мереж, систем адаптивного нейронечіткого виведення та прихованих марківських моделей. Виконано їх порівняння з погляду точності отримуваних розв’язків, ефективності алгоритмів та пристосованості методів до використання нечітких даних. Для розв’язання задачі в роботі вибрано метод адаптивного нейронечіткого виведення.

Для кожної розглянутої емоції сформовано нечіткі продукційні правила. Розроблено автоматизовану систему, що реалізує обраний метод. Виконано тестування розробленої системи.

Основні положення дипломної роботи опубліковано у вигляді тез доповіді на Міжнародній науково-технічній конференції SAIT 2016.

Ключові слова: емоція, система адаптивного нейронечіткого виведення, гібридний алгоритм навчання, перехресна перевірка, продукційні правила, вектор ознак.

ABSTRACT

The thesis is presented in 28 pages. It contains 2 appendixes and bibliography of 16 references. Four figures and 2 tables are given in the thesis.

The goal of the thesis is to develop mathematical and software tools for solving the problem of basic human emotion recognition by a static frontal image of her face.

In the thesis, existing solutions are analyzed, such as artificial neural networks, adaptive neuro-fuzzy inference systems, and hidden Markov models. They are compared in terms of the accuracy of obtained results, algorithm efficiency and method adaptation to fuzzy data. In the thesis, adaptive neuro-fuzzy inference approach is used to solve the task.

Fuzzy production rules are formulated for each discussed emotion. The automated system implementing the chosen method is developed. The developed system is tested.

Main ideas of the thesis were published in the Proceedings of the International Scientific and Technical Conference SAIT 2016.

Keywords: emotion, adaptive neuro-fuzzy inference system, hybrid learning algorithm, cross-validation, production rules, feature vector.

ЗМІСТ

Перелік умовних позначень, скорочень і термінів	9

Вступ	10

1	Постановка задачі	11

2	Аналіз існуючих методів розпізнавання емоцій людини	12

2.1	Виділення критеріїв оцінки методів	12

2.2	Математичні методи розпізнавання емоцій людини	13

2.2.1	Штучні нейронні мережі	13

2.2.2	Системи адаптивного нейронечіткого виведення	14

2.2.3	Приховані марківські моделі	14

2.2.4	Порівняння математичних методів розв’язання задачі	15

2.3	Огляд існуючих комерційних програмних рішень	15

2.3.1	FaceReader	15

2.3.2	eMotion	15

2.3.3	MMER_FEASy — the FacE Analysis System	15

2.3.4	Порівняння програмних рішень для розв’язання задачі	16

2.4	Висновки до розділу	17

3	Математичне забезпечення	18

3.1	Архітектура ANFIS та її модифікація	18

3.2	Алгоритм навчання ANFIS	20

3.3	Формування вектора ознак	20

3.4	Формулювання нечітких правил	20

3.5	Висновки до розділу	21

4	Програмне забезпечення	22

4.1	Структура програми	22

4.2	Опис розроблених алгоритмів	23

4.3	Формат вихідних даних	23

4.3.1	Вихідні дані для ініціалізації системи	23

4.3.2	Вихідні дані для розпізнавання емоцій	25

4.3.3	Вихідні дані для навчання системи	25

4.4	Формат результуючих даних	25

4.5	Результати випробування	25

4.5.1	Навчання ANFIS	25

4.5.2	Випробування системи	26

4.6	Висновки до розділу	26

Висновки	27

Перелік посилань	28

Додаток А Лістинги програм	30

Додаток Б Ілюстративний матеріал	33

Перелік умовних позначень, скорочень і термінів

ANFIS — adaptive neuro-fuzzy inference system.

HMM — hidden Markov model.

MANFIS — modified adaptive neuro-fuzzy inference system.

ЕОМ — електронно-обчислювальна машина.

РЕСЛ — розпізнавання емоційного стану людини.

Вступ

У наш час інформаційні технології досягли значного розвитку й продовжують розвиватися. Разом із тим, підвищується актуальність задач розпізнавання та класифікації образів, за розв’язання яких стає можливою побудова машини, яка здатна сприймати світ за візуальною інформацією.

Однією з таких задач є задача розпізнавання машиною емоцій людини за виразом її обличчя. Переживаючи емоції, люди невербально обмінюються інформацією, яку можуть сприймати і ухвалювати на її основі певні рішення [1] (про зміну поведінки, теми розмови тощо).

Інформаційна система, що сприймає людські емоції, могла б забезпечити ліпший інтерфейс взаємодії з людиною, адаптуватися під її настрій. Емоції могли б стати невербальним фільтром під час пошуку фільмів, бути причиною зміни ігрового процесу чи братись до уваги під час оцінки істинності вербальної інформації з боку системи.

На сьогоднішній день розроблено низку комерційних програмних систем, які розпізнають емоції за зображенням обличчя. Проте, вони мають певні обмеження або значну похибку розпізнавання, тому актуальною є проблема ідентифікації емоцій.

У даній роботі проаналізовано доступні комерційні та некомерційні математичні методи та програмні рішення для розв’язання задачі ідентифікацї емоцій людини за зображенням її обличчя з метою виділення та реалізації технології, що враховувала би природну нечіткість параметрів, які визначають емоції. Оскільки одна емоція має множину виявів у виразах обличчя, а кожному виразу обличчя може відповідати не одна емоція зі своїм ступенем інтенсивності, доцільним є використання підходів, що базуються на математичному апараті нечіткої логіки.

Постановка задачі

Метою даної дипломної роботи є створення математичного та програмного забезпечення для розпізнавання базових людських емоцій за фронтальним статичним зображенням її обличчя.

До множини емоцій, що розпізнаватимуться, віднесено наступні:

здивування;

щастя;

сум;

відраза;

злість.

При розробленні відповідного забезпечення потрібно розв’язати наступні завдання:

проведення порівняльного аналізу існуючих методів розпізнавання емоційного стану людини (РЕСЛ) за зображенням обличчя;

вибір та адаптація існуючого методу для вирішення задачі РЕСЛ;

розробка програмного забезпечення на базі вибраного математичного методу;

тестування розробленої автоматизованої системи.

Реалізована система має задовольняти такі вимоги:

мати високі показники ефективності розпізнавання;

ураховувати нечіткість природи людських емоцій;

бути спроможною навчатися на різних вибірках.

Аналіз існуючих методів розпізнавання емоцій людини

Виділення критеріїв оцінки методів

Універсальним показником переживання людиною емоції, що не залежить ні від віку, ні від раси людини, є міміка — виразний рух м’язів обличчя [1]. Окрім того, емоції людини завжди супроводжуються мікровиразами — короткими мимовільними виразами обличчя. Емоції завжди мають відображення на обличчі людини, при цьому для кожної емоції це відображення має специфічний характер.

Для розв’язання задачі РЕСЛ здебільшого використовують так звані вектори ознак, які формують із параметрів, що характеризують вираз обличчя (ширина рота, висота брів тощо) [2]. Далі проектують системи, які на основі цього вектора приймають рішення про тип емоції та ступінь її прояву. Ці системи підлягають процесу навчання, протягом якого їхні параметри налаштовують за деякою навчальною вибіркою пар «вхідні дані — правильний результат».

Урахувавши особливості поставленої задачі та основні підходи до її розв’язання, можна виділити наступні критерії вибору методу:

ефективність — середня абсолютна величина похибки результату на множині тестових даних:

,	(2.1)

де (average percentage error) — середня похибка;

— обсяг тестових даних;

— очікуваний результат;

— одержаний результат;

розмірність вектора ознак;

обсяг тренувальної вибірки, потрібний для навчання;

адаптація до нечіткого характеру даних — врахування нечіткості як вхідних даних, так і результатів.

Математичні методи розпізнавання емоцій людини

Штучні нейронні мережі

Технологія, описана в [3], полягає в проектуванні багатошарової штучної нейронної мережі зі зворотним поширенням похибки, архітектуру якої представлено на рисунку 2.1. На вхід нейронної мережі, описаної в роботі, подається 21-вимірний вектор ознак.

Синтез вектора ознак потребує використання допоміжного методу (у вказаній роботі використовують гібридний метод геометрії обличчя (HFGA)), що включає застосування певних фільтрів до зображення.

Рисунок 2.1 – Архітектура багатошарової штучної нейронної мережі зі зворотним поширенням похибки

Зазначена нейронна мережа навчається контрольовано, її похибку узагальнення мінімізують за допомогою методу градієнтного спуску.

Системи адаптивного нейронечіткого виведення

Системи адаптивного нейронечіткого виведення (adaptive neuro-fuzzy inference systems, ANFIS) [4] використовуються для задач, що мають нечіткий характер, для яких можна сформулювати нечіткі правила виведення.

Під час застосування цього підходу компоненти відповідного вектора ознак беруть у якості лінгвістичних змінних, що можуть набувати деяких значень, яким відповідають нечіткі множини зі своїми параметризованими функціями належності. Із цих ознак формують нечіткі правила, що відповідають певній емоції. Для кожного вектора вихідних даних система дає результат на основі зважених нормалізованих значень ступенів істинності кожного правила.

[…]

Приховані марківські моделі

Підхід, оснований на застосування прихованих марківських моделей (HMM) [5], базується на ймовірностях переходу між станами, асоційованими з певною емоцією під дією сигналу, яким є результати вимірювання виразу обличчя у відеопотоці.

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

Вадою зазначеного підходу є його нездатність працювати зі статичними зображеннями.

Порівняння математичних методів розв’язання задачі

Результати аналізу математичних методів розв’язання задачі розпізнавання емоцій людини представлено в таблиці 2.1.

Таблиця 2.1 – Порівняння математичних методів

Метод \
Критерій	Метод виділення ознак	Ефективність	К-сть ознак	Урахування нечіткості емоцій	Розмір навчальної вибірки
ANN	HFGA	95,33%	21	+ –	213
ANFIS	LBP	94,29%	12	+ +	213
HMM	–	82,46%	–	– –	–

Огляд існуючих комерційних програмних рішень

FaceReader

[…]

eMotion

[…]

MMER_FEASy — the FacE Analysis System

[…]

Порівняння програмних рішень для розв’язання задачі

Результати аналізу розглянутих комерційних програмних рішень наведено в таблиці 2.2.

Таблиця 2.2 – Порівняння комерційних програмних рішень

Рішення \
Критерій	Метод	Ефектив-ність	К-сть ознак	Урахування нечіткості емоцій	Вартість
FaceReader	Active Template, Active Appearance Model, класифікація	89%	500	+ –	$600
eMotion	Active Appearance Model, класифікація	–	12	+ –	$3500

Продовження таблиці 2.2

Рішення \
Критерій	Метод	Ефектив-ність	К-сть ознак	Урахування нечіткості емоцій	Вартість
MMER-FeasY	Active Appearance Model, класифікація	–	–	+ –	$3000
Affectiva Measuring Emotions	Штучні нейронні мережі, класифікація, вейвлет-перетворення	96%	–	+ –	$2000

Висновки до розділу

На основі порівняльного аналізу (таблиці 2.1–2.2) можна зробити висновок, що підхід із застосуванням системи адаптивного нейронечіткого виведення в середньому краще задовільняє критерії точності та ефективності (швидкості навчання), що може бути зумовлено ліпшим математичним описанням поставленої задачі, оскільки даний підхід найкраще враховує нечіткість даних, із якими працює.

Ефективність обраного методу можна поліпшити за рахунок збільшення розмірності вектора ознак (використовувати реалізовану [3] геометрію обличчя з деякими модифікаціями), використання системи кодування виразів обличчя FACS [14], розроблену Полом Екманом, для формулювання продукційних правил.

Математичне забезпечення

Архітектура ANFIS та її модифікація

ANFIS [7] — клас штучних нейронних мереж, що за своєю функціональністю еквівалентний до системи нечіткого виведення.

Розгляньмо детальніше архітектуру типової ANFIS (рисунок 3.1).

Рисунок 3.1 – Архітектура типової ANFIS

Візьмімо кількість вхідних сигналів , при цьому нехай кількість продукційних правил становить .

Кожний вузол першого шару — це адаптивний штучний нейрон із активаційною функцією

,	(3.1)

де — вхідний сигнал;

— кількість вузлів у першому шарі, ;

— деяке значення лінгвістичної змінної (нечітка множина), асоційоване з -им сигналом;

— кількість таких значень для -го сигналу;

— параметризована функція належності чіткого значення сигналу до відповідної нечіткої множини. У даній роботі використовується функція вигляду

,	(3.2)

де — параметри функції.

Усі параметри першого шару формують множину так званих передумовних параметрів системи.

Кожний вузол другого шару — це фіксований штучний нейрон, вихідний сигнал якого утворюється як добуток вхідних сигналів, отриманих із вузлів попереднього шару:

,	(3.3)

де — номери лінгвістичних значень лінгвістичних змінних, із яких формують продукційні правила в -му вузлі. Операція множення в даному випадку реалізовує нечітку логічну операцію AND.

Кожний -ий вузол третього шару призначено для нормалізації сигналу -го правила відносно всіх правил:

.	(3.4)

Кожний вузол четвертого шару — це адаптивний штучний нейрон із активаційною функцією

,	(3.5)

де — вхідні сигнали мережі;

— параметри -го вузла. Параметри всіх вузлів цього шару складають множину наслідкових параметрів системи.

[…]

Алгоритм навчання ANFIS

[…]

Формування вектора ознак

[…]

Формулювання нечітких правил

[…]

Висновки до розділу

У цьому розділі розроблено математичне забезпечення системи розпізнавання емоцій. Для базових емоцій, які потрібно розпізнавати, спроектовано системи ANFIS, об’єднано їх за спільним шаром вхідних сигналів у MANFIS. Для вхідних сигналів у межах кожної емоції виділено множини нечітких значень, яких ці вхідні сигнали можуть набувати. На множині нечітких значень сформульовано правила продукції для виведення кожної емоції.

Установлення параметрів системи відбувається завдяки гібридному алгоритму навчання, застосованому до кожної підсистеми ANFIS виведення емоції. За критерій зупинки навчання взято погіршення ефективності узагальнення.

Програмне забезпечення

Структура програми

Програмне забезпечення для розв’язання поставленої задачі спроектовано з дотриманням парадигм об’єктно-орієнтованого програмування [16]. Використано шаблон проектування Модель-Подання-Пред’явник, відповідно до якого логіка роботи програми відділяється від візуального відображення даних у різні класи. На рисунку 4.1 представлено схему потоків даних між модулями використаного шаблону.

Рисунок 4.1 – Схема потоків даних між модулями MVP розробленого програмного забезпечення

Усю логіку роботи системи MANFIS зосереджено в модулі «Модель», у зв’язку з чим на нього покладаються такі функції:

зчитування параметрів мережі з файлу;

обчислення вихідних сигналів;

здійснення однієї ітерації навчання;

запис параметрів мережі у файл.

[…]

Опис розроблених алгоритмів

До кожної підсистеми розробленої ANFIS застосовано гібридне навчання, описане в 3.2. Блок-схему алгоритму проведення такого навчання наведено на рисунку 4.2.

Рисунок 4.2 – Блок-схема алгоритму гібридного навчання ANFIS

[…]

Формат вихідних даних

Вихідні дані для ініціалізації системи

Вихідними даними для ініціалізації системи є файл із її параметрами weights.xml, що знаходиться в директорії sources.

Параметри у файлі відформатовано наступним чином:

у перших найглибших чотирьох тегах знаходяться передумовні параметри, у наступних найглибших тегах знаходяться наслідкові параметри;

передумовні параметри згруповано за елементами обличчя, ознаки яких вони описують;

кожний рядок передумовних параметрів містить параметри вузлової функції нейрона першого шару мережі, , та відповідно;

наслідкові параметри згруповано за емоцією, яку вони описують:

здивування;

щастя;

сум;

відраза;

злість;

кожний рядок наслідкових параметрів складений із параметрів вузлової функції нейронів четвертого шару;

усі параметри — дійсні числа, ціла частина відділяється від дробової крапкою.

Вихідні дані для навчання системи

[…]

Формат результуючих даних

[…]

Результати випробування

Навчання ANFIS

[…]

Випробування системи

[…]

Висновки до розділу

У цьому розділі розроблено програмне забезпечення для автоматизованої системи розпізнання емоційного стану людини за статичним фронтальним зображенням її обличчя.

Реалізовану програмно систему навчено на вибірці зі 180 зображень.

У ході тестування обчислено показники ефективності навчання та тестування. Для навчання сукупно він склав 85%, для тестування сукупно — 73%.

Висновки

У роботі розглянуто основні підходи до розпізнавання емоційного стану людини за статичним фронтальним зображенням її обличчя: штучні нейронні мережі, приховані марківські моделі, порівняння з шаблоном та адаптивне нейронечітке виведення. У результаті проведеного порівняльного аналізу за наперед визначеними критеріями для вирішення поставленої задачі обрано модифікацію архітектури системи адаптивного нейронечіткого виведення — MANFIS.

Розглянуто й модифіковано методологію виділення вектора ознак із зображення обличчя. Для кожної з ознак уведено множину нечітких значень, яких вона може набувати. На множині цих нечітких значень побудовано правила продукції для ідентифікації кожної емоції.

Спроектоване математичне забезпечення реалізовано програмно.

Розроблену програмну систему навчено на вибірці зі 180 зображень гібридним алгоритмом із використанням перехресної перевірки для зупинки тренування.

У ході тестування виявлено показники ефективності: у середньому за всіма емоціями показник ефективності навчання склав 85%, а показник ефективності узагальнення 73%.

Перелік посилань

Экман П. Психология эмоций. Я знаю, что ты чувствуешь / П. Экман. — Питер, 2010. — 336 с.

Khandait S. P. Automatic Facial Feature Extraction and Expression Recognition based on Neural Network / S. P. Khandait, R. C Thool, P. D. Khandait // International Journal of Advanced Computer Science and Applications. — 2011. — Vol. 2, No. 1. — P. 113–118.

Khandait S. P. ANFIS and BPNN based Expression Recognition using HFGA for Feature Extraction / S. P. Khandait, R. C. Thool, P. D. Khandait // Bulletin of Electrical Engineering and Informatics. — 2013. — Vol. 2, No. 1. — P. 11–22.

Gomathi V. Human Facial Expression Recognition Using MANFIS Model / V. Gomathi, K. Ramar, A. S. Jeevakumar // Proceedings of World Academy of Science Engineering and Technology. — 2009. — 38. — P. 338–342.

I. Cohen. Emotion Recognition from Facial Expressions Using Multilevel HMM / I. Cohen, A. Garg, T. S. Huang // Neural Information Processing Systems. — 2000.

Єфімов Г. М. Технологія для моделювання та розпізнавання емоційної міміки на обличчі людини / Г. М. Єфімов // Системи обробки інформації. — 2012. — С. 36–39.

Jang J.-S. R. Neuro-Fuzzy and Soft Computing: A Computational Approach to Learning and Machine Intelligence / J.-S. R. Jang, C.-T. Sun, E. Mizutani. — Prentice Hall, 1997. — 614 p.

Хайкин С. Нейронные сети: полный курс : пер. с англ. / C. Хайкин. — [2-е изд.]. — М. : Издательский дом «Вильямс». — 2006. — 1104 с.

N. Tsapatsoulis. A Fuzzy System for Emotion Classification Based on the MPEG-4 Facial Definition Parameter Set / N. Tsapatsoulis, K. Karpouzis, G. Stamou, F. Piat, S. Kollias // EURASIP Journal on Applied Signal Processing. — 2002. — P. 1021–1038.

Noldus Information Technology. Face Reader homepage [Electronic Resource]. — Mode of Access:

http://www.noldus.com/human-behavior-research/products/facereader

Visual Recognition. eMotion homepage [Electronic Resource]. — Mode of Access: http://www.visual-recognition.nl/eMotion.html

Face Analysis and Emotion Recognition [Electronic Resource]. — Mode of Access: http://www.amiproject.org/showcase/still-and-moving-image-processing/emotion-recognition

Affdex homepage [Electronic Resource]. — Mode of Access: http://www.affdex.com/

Ekman P. Manual of the Facial Action Coding System (FACS) / P. Ekman, W. V. Friesen. — Palo Alto : Consulting Psychologists Press, 1978.

Ekman P. Facial Action Coding System: Investigator’s Guide / P. Ekman, W. V. Friesen. — Palo Alto : Consulting Psychologists Press, 1978.

С. Прата. Язык программирования С++. Лекции и упражнения : пер. с англ. / C Прата. — 6-е изд. — М. : Издательский дом «Вильямс». — 2013. — 1248 с.

Лістинги програм

Лістинг файлу presenter.h — прототип пред’явника-вчителя

#ifndef PRESENTER_H

#define PRESENTER_H

#include <QObject>

#include "View/iView.h"

#include "Network/network.h"

//#include <vector>

class Presenter: public QObject

{

Q_OBJECT

public:

Presenter();

Presenter(iView* userInterface);

signals:

void result_returned(QVector<qreal>);

void message_showing(QString str);

void message_sending(QString);

void message_hiding();

private slots:

//from view

void testing(QVector<qreal> features);

void training(QVector<QPair<QVector<qreal>, QVector<qreal> > >& sample);

private:

QVector<qreal> _normed(QVector<qreal>);

QVector<qreal> _trunk(QVector<qreal>);

qreal _effectiveness(Emotions::Emotions em);

QVector<QPair<QVector<qreal>, QVector<qreal> > > _training_data;

QVector<QPair<QVector<qreal>, QVector<qreal> > > _checking_data;

qreal _eps;

Network ANFIS;

static long long int iteration;//

};

#endif // PRESENTER_H

Лістинг файлу presenter.cpp — реалізація пред’явника-вчителя

#include "Presenter/presenter.h"

#include "Presenter/simplex.h"

#include <qmath.h>

#define PARAM_NUMBER 519

long long int Presenter::iteration = 0;

Presenter::Presenter()

{

}

Presenter::Presenter(iView* i_userInterface)

{

QObject *userInterface = dynamic_cast<QObject*>(i_userInterface);

connect(userInterface, SIGNAL(test_inputed(QVector<qreal>)),this, SLOT(testing(QVector<qreal>)));

connect(userInterface, SIGNAL(train_sample_inputed(QVector<QPair<QVector<qreal>,QVector<qreal> > >& )),this, SLOT(training(QVector<QPair<QVector<qreal>,QVector<qreal> > >&)));

connect(this, SIGNAL(result_returned(QVector<qreal>)), userInterface, SLOT(show_results(QVector<qreal>)));

connect(this, SIGNAL(message_showing(QString)), userInterface, SLOT(show_message(QString)));

connect(this, SIGNAL(message_hiding()), userInterface, SLOT(hide_message()));

connect(this, SIGNAL(message_sending(QString)), userInterface, SLOT(show_dlg_message(QString)));

ANFIS.Init();

ANFIS.Deserialize("C:\\Users\\Sersajur\\Documents\\Qt-projects\\Emotion_recognizer\\src\\sources\\weights.xml");

}

QVector<qreal> Presenter::_trunk(QVector<qreal> result)

{

for(auto& it: result)

if (it<0) it=0;

else if(it>1) it=1;

return result;

}

QVector<qreal> Presenter::_normed(QVector<qreal> features)

{

QVector<qreal> result = features;

qreal& Horizontal = features[13];

qreal& Vertical = features[19];

//eye_brows_size_params:

result[0] /= Vertical;

result[1] /= Horizontal;

result[2] /= Vertical;

result[3] /= Horizontal;

//eyes_size_params:

result[4] /= Vertical;

result[5] /= Horizontal;

result[6] /= Vertical;

result[7] /= Horizontal;

//nose_size_params:

result[8] /= Vertical;

result[9] /= Horizontal;

//lips_size_params:

result[10] /= Vertical;

result[11] /= Horizontal;

//distances:

result[12] /= Horizontal;

result[14] /= Vertical;

result[15] /= Vertical;

result[16] /= Vertical;

result[17] /= Vertical;

result[18] /= Vertical;

//result[19] /= Vertical;

return result;

}

void Presenter::testing(QVector<qreal> features)

{

QVector<qreal> result;

result = ANFIS.Check(_normed(features));

emit result_returned(_trunk(result));

}

QString makeLog(int V/*, int N*//*, qreal eps*/, QVector<QString> em, QVector<int> n, QVector<qreal> e)

{

QString log = QString("Об'єм вибірки: %1\n").arg(V);

log += QString("Критерій зупинки: перехресна перевірка \n ");

log += QString("------------------------------------\n");

log += QString("Емоція || Кількість епох || Ефективність \n");

log += QString("%1 %2 %3\n").arg(em[0],-14).arg(n[0],-19).arg(e[0],-9,'f');

log += QString("%1 %2 %3\n").arg(em[1],-14).arg(n[1],-19).arg(e[1],-9,'f');

log += QString("%1 %2 %3\n").arg(em[2],-14).arg(n[2],-19).arg(e[2],-9,'f');

log += QString("%1 %2 %3\n").arg(em[3],-14).arg(n[3],-19).arg(e[3],-9,'f');

log += QString("%1 %2 %3\n").arg(em[4],-14).arg(n[4],-19).arg(e[4],-9,'f');

return log;

}

qreal Presenter::_effectiveness(Emotions::Emotions em)

{

qreal result = 0;

for(auto& it: _checking_data)

{

ANFIS.setInput(it.first);

result += qAbs(it.second[em]-ANFIS.Process(em))/_checking_data.size()/it.second[em];

}

return (1 - result);

}

void Presenter::training(QVector<QPair<QVector<qreal>, QVector<qreal> > > &sample)

{

for (auto& row: sample)

row.first = _normed(row.first);

int k = qRound(sample.size()/qSqrt(PARAM_NUMBER*2));

for(int i=0; i < sample.size() - k; i++)

_training_data.append(sample[i]);

for(int i = _training_data.size(); i < sample.size(); i++)

_checking_data.append(sample[i]);

qreal l_rate_cons = 0.2;

qreal l_rate_prem_a = 0.2;

qreal l_rate_prem_b = 0.2;

qreal l_rate_prem_c = 0.2;

int epoch_counter;

qreal prev_effect;

QVector<qreal> save_param;

QVector<QString> str_status = {"здивування", "щастя", "сум", "відраза", "злість"};

QVector<int> n_epoch;

QVector<qreal> effectivenesses;

for(int i = 0; i < str_status.size(); i++)

{

epoch_counter = 0;

prev_effect = _effectiveness(Emotions::Emotions(i));

while((prev_effect <= _effectiveness(Emotions::Emotions(i))) || !epoch_counter)

{

save_param = ANFIS.getParams();

prev_effect = _effectiveness(Emotions::Emotions(i));

message_showing("Засвоєння емоції: " + str_status[i] + ", " + QString::number(epoch_counter) + ", ефективність" + QString::number(prev_effect,'f'));

for(auto& it: _training_data)

{

ANFIS.setInput(it.first);

ANFIS.One_lesson(Emotions::Emotions(i), it.second[i], l_rate_cons, l_rate_prem_a, l_rate_prem_b, l_rate_prem_c);

}

epoch_counter++;

}

ANFIS.setParams(save_param);

//prev_effect = _effectiveness(Emotions::Emotions(i));//

n_epoch.append(epoch_counter);

effectivenesses.append(prev_effect);

}

emit message_hiding();

emit message_sending(makeLog(_training_data.size()/*,max_epoch_number*//*,_eps*/,str_status,n_epoch,effectivenesses));

ANFIS.Serialize("C:\\Users\\Sersajur\\Documents\\Qt-projects\\Emotion_recognizer\\src\\sources\\weights.xml", 6);

}

Ілюстративний матеріал

Рисунок Б.1 – Слайд 1

Рисунок Б.2 – Слайд 2

20

CHANGE_ME1

2016-08-30

Dan