Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
6
1.7 Обзор игрового процесса ................................................................................ 23
1.7.1 Автономный режим ................................................................................... 25
1.7.2 Режим редактора ........................................................................................ 25
1.8 Распознавание ключевых точек лица............................................................. 25
1.8.1 Использованные инструменты ................................................................. 25
1.8.2 Вывод формул для распознавания жестов лица ..................................... 26
2 Разработка модуля.................................................................................................. 30
2.1 Файловая структура модуля............................................................................ 30
2.2 Связка UE 4 и OpenCV .................................................................................... 30
2.3 Реализация работы плагина в системе Unreal Engine 4 ............................... 31
2.4 Система валидации жестов ............................................................................. 35
2.5 Описание работы класса считывания и обработки изображения с веб-
камеры ..................................................................................................................... 36
2.6 Реализация пользовательского интерфейса .................................................. 38
2.6.1 Описание элементов пользовательского интерфейса ............................ 39
2.6.2 Взаимодействие пользовательского интерфейса с системой ................ 39
2.7 Реализация симуляции мыши ......................................................................... 40
3. Эксперименты........................................................................................................ 41
3.1 Выборка пороговых значений ........................................................................ 41
3.2 Калибровка........................................................................................................ 43
ЗАКЛЮЧЕНИЕ ......................................................................................................... 45
СПИСОК ЛИТЕРАТУРЫ......................................................................................... 46
7
CПИСОК СОКРАЩЕНИЙ И УСЛОВНЫХ ОБОЗНАЧЕНИЙ
ИИ – искусственный интеллект
BAR – brows aspect ratio
EAR – eye aspect ration
MAR – mouth aspect ration
PIE - Play In Editor
SIE - Simulate In Editor
UBT – UnrealBuildTool
UE 4 – Unreal Engine 4
8
ТЕРМИНЫ И ОПРЕДЕЛЕНИЯ
Актёры – экземпляры класса AActor
Пешки – экземпляры класса APawn
Персонажи – экземпляры класса ACharacter
Blueprint - система визуального программирования в Unreal Engine
UnrealBuildTool - это настраиваемый инструмент, который управляет процессом
создания исходного кода UE4 в различных конфигурациях сборки
9
ВВЕДЕНИЕ
В настоящее время не редкостью являются случаи, когда человек не может
управлять своим компьютером посредством стандартных решений вроде
клавиатуры и мыши. На данный момент таким людям приходится пользоваться
самодельными устройствами или находить нетривиальные способы
использования стандартных решений. Моя работа предлагает одно из решений
данной проблемы, которая поможет облегчить управление компьютером во
время игры.
10
1 ОБЗОР ПРЕДМЕТНОЙ ОБЛАСТИ
1.1 Постановка задачи
Реализовать плагин для UE 4, чтобы использовать его в дипломном
проекте. Реализовать систему настройки работы, автокалибровки и валидации
работы плагина.
13
Camera - - + + +
Mouse
Head + + + + +
Mouse
Tobii + - - - -
EyeX
Tobii + - - - -
Pro
Glasses
Enable + + + + +
Viacam
14
Модули объявляются через файлы C# с расширением .build.cs и хранятся в
папке с исходным кодом вашего модуля. Исходный код C++, принадлежащий
модулю, хранится рядом с файлом .build.cs или в его подкаталогах. Каждый файл
.build.cs объявляет класс, производный от базового класса ModuleRules, и задает
свойства, управляющие тем, как он должен быть построен из его конструктора.
Эти файлы .build.cs (Листинг 1) компилируются с помощью UBT и создаются
для определения общей среды компиляции.
using UnrealBuildTool;
using System.Collections.Generic;
public class MyModule : ModuleRules
{
public MyModule(ReadOnlyTargetRules Target) :
base(Target)
{
// Settings go here
}
}
У модуля есть параметр, который определяет куда следует включать
модуль, а куда нет:
1. Runtime,
2. RuntimeNoCommandlet,
3. Developer,
4. Editor,
5. EditorNoCommandlet,
6. Program.
Также у модуля есть параметр LoadingPhase, который определят стадию
загрузки модуля:
1. Default,
2. PostDefault,
3. PreDefault,
4. PostConfigInit,
5. PreLoadingScreen,
6. PostEngineInit.
Unreal Engine находит ваш плагин путем поиска файлов. uplugin на диске.
Эти файлы называются дескрипторами плагинов. Это текстовые файлы,
содержащие основную информацию о вашем плагине. Дескрипторы плагинов
обнаруживаются и загружаются автоматически движком, редактором и UBT при
каждом запуске этих программ.
17
Плагины могут иметь любое количество исходных каталогов модулей. У
большинства плагинов будет только один модуль, но можно создать несколько,
например, если плагин содержит некоторые функции, доступные только для
редактора, и другой код, который предназначен для запуска во время игры.
По большей части макет исходного файла плагина такой же, как и у любого
другого модуля C++ в движке.
18
Рисунок 4 - Иерархия уровней зависимости между проектами и модулями
Стрелки указывают на возможную зависимость. Каждый тип плагина или
модуля может зависеть от других на своем уровне или выше.
19
1.5.5 Плагины проекта
Плагины находятся в подпапке Plugins в каталоге вашего проекта и будут
обнаружены и загружены во время запуска игры или редактора.
20
Рисунок 5 - Диаграмма классов UML основных классов гемплейного
фреймворка UE 4
1.6.1 UObject
Базовый класс всех объектов UE4. Он обеспечивает дополнительные
методы для создания и использования объектов, а также виртуальные функции,
которые следует переопределить в дочерних классах.
1.6.2 AActor
AActor — это базовый класс для объекта, который может быть размещен
на уровне. Актёры могут содержать набор компонентов типа ActorComponent,
которые можно использовать для управления перемещением актёров, их
рендерингом и т. д. Другой основной функцией Actor является репликация
свойств и вызовов функций по сети во время игры.
1.6.3 APawn
APawn - это базовый класс всех актеров, которыми могут владеть игроки
или ИИ. Они являются физическими представлениями игроков и существ на
уровне.
1.6.4 ACharacter
Персонажи — это пешки, у которых есть 3д модель, форма коллизии и
встроенная логика движения. Они несут ответственность за всё физическое
взаимодействие между игроком или ИИ и миром, а также реализуют базовые
сетевые модели и модели ввода. Они предназначены для вертикально
21
ориентированного представления игрока, который может ходить, прыгать,
летать и плавать по миру с помощью CharacterMovementComponent.
1.6.3 UActorComponent
ActorComponent - это базовый класс для компонентов, определяющих
многократно используемое поведение, которое может быть добавлено к
различным типам AActor’ов. Компоненты, у которых есть расположение
относительно корня AActor, известны как SceneComponents, а те, которые можно
визуализировать, - PrimitiveComponents.
1.6.4 APlayerController
PlayerController’ы используются игроками-людьми для управления
пешками.
1.6.5 AHUD
Базовый класс дисплея. У него есть холст и холст отладки, на котором
можно рисовать примитивы. Он также содержит список простых хит-боксов,
которые можно использовать для простого обнаружения щелчка по элементам.
Также включен метод рендеринга отладочного текста. Предоставляет несколько
простых методов визуализации текста, текстур, прямоугольников и материалов,
к которым также можно получить доступ из Blueprint.
1.6.6 UGameInstance
Объект-менеджер высокого уровня для экземпляра запущенной игры.
Создается при создании игры и не уничтожается, пока экземпляр игры не будет
закрыт. Запуск в standalone (автономном) режиме, создаст один экземпляр этого
класса. Запуск в PIE (воспроизведение в редакторе) будет генерировать для
каждого экземпляра PIE свой экземпляр UGameInstance.
22
1.7 Обзор игрового процесса
Здесь показаны два основных пути запуска игрового процесса: путь
редактора и автономный путь. Общий порядок событий - инициализация
движка, создание и инициализация GameInstance, затем загрузка уровня и,
наконец, начало игры. Однако между автономным режимом и режимом
редактора есть различия, как в точном порядке вызова некоторых функций, так
и в том, в каком режиме они вызываются. Таким образом есть два способа
запуска проекта:
1. через редактор,
2. автономно.
23
Рисунок 6 - Порядок старта игрового процесса
24
1.7.1 Автономный режим
В автономном режиме, который используется в играх, в которые играют
вне редактора, объекты, необходимые для игры, создаются и инициализируются
сразу же после инициализации движка при запуске. Такие объекты, как
GameInstance, создаются и инициализируются перед запуском движка (в отличие
от создания и инициализации движка), а начальная карта загружается сразу
после вызова функции запуска движка. Официально игровой процесс начинается
с этого момента, когда уровень создает соответствующий игровой режим и
игровое состояние, а затем и других актеров.
25
Для детекции ключевых точек лица был использован Facemark API (Рис. 7)
из модуля OpenCV Face. Он имеет три различных реализации обнаружения
ориентиров:
27
Формула соотношения положения бровей (3):
Действие Значение
Активация/деактивация контроля
мышью
(Открытие рта)
28
Продолжение таблицы 3
(Моргание)
X2
Активация/деактивация режима
прокрутки
(Прищурить глаза)
Активация/деактивация режима
кликов мыши
(Поднятие бровей)
(Движение головой)
29
2 Разработка модуля
2.1 Файловая структура модуля
Проект состоит из основного геймплейного модуля, который необходим
для запуска проекта и плагина FLDPlugin (Рис. 11). Все методы не связанные
непосредственно с игровой логикой вынесены в статическую библиотеку
FLD_BPL для уменьшения числа зависимостей.
30
Рисунок 12 - UML-диаграмма вынесенных в dll функций
31
Рисунок 13 - EPC (Event-driven process chain – диаграмма
32
Для реализации плагина был создан класс AWebcamReader,
унаследованный от класса AActor, в котором, с помощью методов библиотеки
UFLD_BPL, управлял логикой поведения. Для начала работы системы требуется,
чтобы пользователь самостоятельно выбрал положение своей головы и
активировал режим контроля мыши однократным открытием рта. С этого
момента игрок может управлять движениями мыши отводя нос от центра
выделенной области. Для переключения режимов работы мыши используются
соответствующие жесты (Табл. 3). Для симуляции мыши была создана Blueprint
библиотека UCursor_BPL (Рис. 14), это позволяет избежать излишнего
копирования кода. UCursor_BPL симулирует клики и движения мыши, это
означает, что все настройки пользовательского ввода и событий для мыши в игре
будут работать также, как если бы мы управляли игровым процессом
стандартной мышью. Для гибкой настройки движения курсора по экрану был
создан класс FGameAnalogCursor. Он реализует ускорение скорости по мере
движения, учитывание минимального значения сигнала ввода для движения
мыши. Однако такой класс не доступен для настройки значений по умолчанию в
редакторе Unreal Engine 4, для решения данной проблемы в плагине реализован
класс UCamMouseCursorSettings, который содержит значения по умолчанию,
график ускорения и указатель на экземпляр класса FGameAnalogCursor (Рис. 15).
33
Рисунок 14 - UML-диаграмма классов AWebcamReader, UCursor_BPL,
FGameAnalogCursor
34
Рисунок 15 - Скриншот настроек UCamMouseCursorSettings в редакторе UE 4
35
Рисунок 16 - Блок-схема работы алгоритма
36
1. DoProcessing – метод класса, который обрабатывает
полученные данные после валидации. Реагирует на жесты и работает с
вводом/выводом для симуляции мыши,
2. ValidateFunction – метод, который инициирует просчёт
ключевых точек лица и обрабатывает поступающие данные с веб-камеры
для избегания ложных срабатываний,
3. UpdateTexture – метод, которые берёт изображения с веб-
камеры и обновляет текстуру, после чего она передаётся в материал в
качестве параметра.
37
Рисунок 18 - IDEF3 PFDD. Диаграмма работы класса AWebcamReader
2.6 Реализация пользовательского интерфейса
Blueprint BP_HUD в моём проекте – это стартовая точка для
инициализации пользовательского интерфейса. На момент BeginPlay HUD ищет
экземпляры класса BP_WebcamReader, если находит, то создаёт виджет и
38
передаёт в параметры указатель на BP_WebcamReader, иначе создаёт
BP_WebcamReader самостоятельно и передаёт указатель на него далее.
40
3 Эксперименты
3.1 Выборка пороговых значений
Для выбора пороговых значений были построены графики для каждого
значения соотношения сторон, описанные в главе 1.8.2.
41
Рисунок 21 - Зависимость BAR от времени во время тестирования
Экспериментально выяснилось, что для порогового значения BAR оптимально
значение 1.58.
42
Рисунок 22 - Зависимость MAR от времени во время тестирования
Экспериментально выяснилось, что для порогового значения BAR оптимально
значение 0.5.
3.2 Калибровка
Калибровка пороговых значений соотношений сторон позволила найти
наиболее подходящие значения для лучшей работы модуля. В целом, во время
тестирования с разными людьми результаты по умолчанию показали свою
универсальность, однако для улучшения опыта использования было введено
меню автокалибровки (Рис. 23). Пользователь за отведённое время выполняет
соотвествующий жест, показатели записываются и по ним вычисляется среднее
значение. После чего оно выставляется, как пороговое значение для
соответствующего жеста.
43
Рисунок 23 - Виджет калибровочного режима
44
ЗАКЛЮЧЕНИЕ
По результатам работы были соблюдены условия для наиболее простого
развертывания плагина в других проектах, а также полностью перенесён
функционал мыши на использование веб-камеры. Были выявлены недостатки,
при определении точек лица, при большом угле поворота головы точки
начинают “дребезжать” или занимать неправильное место. Однако, в целом,
данное решение работоспособно, как показала практика, полноценное
использование подходит лучше всего для игровых жанров, где не требуется
быстрота и точность управления, например, пошаговые стратегии.
45
СПИСОК ЛИТЕРАТУРЫ
1. Kazemi V., Sullivan J. One millisecond face alignment with an ensemble of
regression trees //Proceedings of the IEEE conference on computer vision and pattern
recognition. – 2014. – С. 1867-1874.
2. Tzimiropoulos G., Pantic M. Optimization problems for fast aam fitting in-the-wild
//Proceedings of the IEEE international conference on computer vision. – 2013. – С.
593-600.
3. Ren S. et al. Face alignment at 3000 fps via regressing local binary features
//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition.
– 2014. – С. 1685-1692.
4. Soukupova T., Cech J. Eye blink detection using facial landmarks //21st computer
vision winter workshop, Rimske Toplice, Slovenia. – 2016.
46