Интерфейс пользователя представляет собой реализацию окна приложения. Содержит обработчики взаимодействия с элементами управления, обработчики событий мыши и графического планшета.
Интерфейс создан на технологии WinForms.
3.3 Модуль ядра
Модуль, который отвечает за логику программы, за сохранение подписей в базу и их верификацию.
Рассмотрим каждый класс более подробно и опишем их методы и свойства.
Класс Sign является классом для хранения информации о подписи.
Основные свойства:
− X - массив x-координат;
− Y - массив y-координат;
− P - массив давлений;
− T - массив для хранения времен;
− PartsSize - массив для хранения мест, где штрихи были соединены в длинную линию;
− Vx - массив для хранения изменения скорости X;
− Vy - массив для хранения изменения скорости Y;
− CriticalPoints - критические точки подписи;
− InternalAngles - внутренние углы подписи;
− ExternalAngles - внешние углы подписи.
Методы класса Sign по большей части вспомогательные:
− Сount() - возращает количество точек;
− MinX(), MaxX(), MeanX() - минимальное, максимальное и среднее значение X соответственно;
− MinY(), MaxY(), MeanY() - минимальное, максимальное и среднее значение Y соответственно.
Класс Normalizer отвечает за нормализацию подписи. Содержит следующие методы:
− ApplyRotation() - нормализация по вращению;
− ApplySize() - нормализация по размеру;
− Merge() - отвечает за соединение штрихов в линию.
Класс Extractor отвечает за извлечение локальных особенностей. Метод CalculateVelocities отвечает сразу за подсчет скорости X и Y координат, а так же за извлечение критических точек. Метод CalculateAngles за подсчет внешних и внутренних углов.
Класс GMath является вспомогательным для подсчета математики.
Класс DynamicTimeWarping содержит методы, реализующие DTW-алгоритм.
Класс DTWCalculator cодержит методы для подсчета различных расстояний:
− CoordsDTW() - считает расстояние между координатами;
− VelDTW() - считает расстояние между скоростными особенностями;
− CriticalPointsDTW() - считает расстояние между критическими точками;
− InternalAnglesDTW(), ExternalAnglesDTW() - считают расстояния между углами;
− PressionDTW() - считает расстояние для давлений двух подписей.
Класс ReferenceSet является одним из основных для верификации. Хранит массив подписей из R множества. Основные методы здесь:
− Add() - добавить подпись в R-множество;
− CalculateDtwPairwise() - метод, отвечающий за подсчет расстояний между подписями;
− GetAverageByMinDtw() - возвращает среднее минимальное значение расстояний;
− GetAverageByMaxDtw() - возвращает среднее максимально значение расстояний;
− SetTemplateSign() - устанавливает шаблонную подпись из множества;
− GetAverageByTempDtw() - возвращает среднее расстояние от подписи-шаблона до всех остальных подписей из набора;
− CalculateDtwWithSign() - возращает расстояния от Y подписи до подписей из набора;
− GetFeatureVector() - возвращает FeatureVector для Y подписи.
Класс Saver сохраняет и восстанавливает подписи в файл и из файла соответственно.
Класс Verificator имеет один метод Verificate, который, используя функционал всех предыдущих классов, считывает подписи из файлов, занимается подсчетом векторов особенностей, а затем посылает эти значения на сторону Matlab компонента, который, в свою очередь, подсчитывает QDA стандартными средствами, и возращает true или false.
3.4. Модуль Matlab
Интеграция С# кода с.m файлом матлаба не является сложной задачей. Достаточно.m файл скомпилировать в dll и подключить эту dll в программу.
3.5. Модуль, отвечающий за работу с графическим планшетом
Компонент предназначен для организации обработки ввода с графического планшета. Он позволяет использовать привычный способ обработки ввода, основанный на реализации обработчиков событий. В реализации класса компонента инкапсулирована вся работа с библиотекой WinTab. Компонент предоставляет набор функций для открытия и закрытия контекста, изменения параметров контекста, получения информации об устройстве и обработки оконных сообщений.
Класс CWintabContext нужен для обеспечения доступа к управлению контекстом Wintab. Основные методы:
− Open() - открывает Wintab контекст, который будет отправлять пакетные события в окне сообщений;
− Сlose() - закрывает контекст для объекта;
− Enable() - возвращает значение доступен ли Wintab контекст или нет.
И основные поля:
− LogContext - логический контекст Wintab управляется этим объектом;
− HCtx - хэндл для идентификации контекста;
− Name - имя контекста;
− Options - опции для контекста. Опции могут комбинироваться оператором OR. Опции для комбинации находяться в стркуктуре ECTXOptionValues;
− Status - статус, значения которого находятся в ECTXStatusValues;
− Locks - определяет какие атрибуты контекста будут заблокированы. Локи могут меняться только в том процессе, который принадлежит контексту;
− MsgBase - определяет диапазон номеров сообщений, которые будут использоваться для составления отчета о работе контекста;
− Device - определяет устройство для ввода.
Основными структурами для работы являются Axis и Packet.
Структура Packet описывает пакет данных и содержит информацию о нажатии кнопок на пере планшета, координатах пера и степени нажатия. Опишем поля более подробно:
− pkContext - контекст, генерируемый события;
− pkStatus - статус контекста;
− pkTime - в абсолютном режиме предоставляет системное время, в относительном время после получения последнего пакета;
− pkChanged - указывает, какой пакет данных изменился после последнего события;
− pkSerialNumber - идентификатор пакета контекста;
− pkCursor - курсор, генерируемый контекстом;
− pkButtons - в абсолютном режиме содержит статус текущей кнопки, в относительном первые 4 байта - номер кнопки, последние 4 - код из структуры EWintabPacketButtonCode;
− pkX - в абсолютном режиме местоположение вдоль оси X, в относительном - изменение X относительно оси;
− pkY - в абсолютном режиме местоположение вдоль оси Y, в относительном - изменение Y относительно оси;
− pkNormalPressure - давление на перо;
− pkTangentPressure - тангециальное давление на перо;
− pkOrientation - cодержит информацию об ориентации курсора.
Структура Axis содержит данные диапазона и разрешения оси координат графического планшета. Этой структурой описываться не только оси X и Y плоскости ввода, но и другие параметры, например, «ось» нажатия на перо.
Опишем поля более подробно:
− axMin - определяет минимальное значение элемента данных в родных координат планшета;
− axMax - определяет максимальное значение элемента данных в родных координат планшета;
− axUnits - указывает единицы, используемые при расчете разрешения для элемента данных;
− axResolution - разрешающая способность.