Разработка нейросетевой технологии и программного продукта авторизации пользователя
Общие принципы работы систем биометрической идентификации личности. Программные инструменты для разработки приложения, осуществляющего идентификацию пользователя на основе его клавиатурного почерка. Проектирование базы данных и структуры нейронной сети.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 20.12.2013 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
2.5.1 Разработка графического интерфейса
С целью упрощения разработки пользовательского интерфейса использовалась кросс-платформенная среда Qt Designer, которая входит в состав дистрибутива Qt framework. Она позволяет разрабатывать графические интерфейсы пользователя при помощи ряда инструментов. Существует панель инструментов «Панель виджетов», в которой доступны для использования элементы интерфейса - виджеты, такие как, например, «выпадающий список» ComboBox, «поле ввода» LineEdit, «кнопка» PushButton и многие другие. Каждый виджет имеет свой набор свойств, определяемый соответствующим ему классом библиотеки Qt. Свойства виджета могут быть изменены при помощи «Редактора свойств». Для каждого класса свойств виджета существует свой специализированный редактор [16]. Характерной особенностью Qt Designer является поддержка визуального редактирования сигналов и слотов.
Созданное в Qt Designer представление сохраняется в файл в XML-формате, который подлежит конвертации в C++ код при помощи утилиты uic. В результате будет получен модуль, содержащий код создания и инициализации элементов графического интерфейса. Для того чтобы воспользоваться полученным модулем в собственной программе, необходимо его импортировать и вызвать метод класса, содержащегося в методе, передав ему в качестве параметра собственную реализацию виджета Qt.
В качестве примера рассмотрим реализацию главного окна приложения. В библиотеке Qt существует класс QMainWindow, предназначенный для реализации главного приложения. Главное окно предоставляет структуру для создания пользовательского интерфейса приложения. QMainWindow имеет собственный компоновщик, в который можно добавлять панель инструментов, строку меню и строку состояния. Компоновщик имеет центральную область, которая может быть занята любым стандартным или пользовательским виджетом.
Для того чтобы получить разработать собственный виджет (в частности, главное окно приложения), необходимо наследовать класс, обладающий базовой функциональностью, а затем реализовать необходимую функциональность, добавляя новые методы или переопределяя существующие.
class VisKeyRec : public QMainWindow
{
Q_OBJECT
public:
VisKeyRec(QWidget *parent = 0, Qt::WFlags flags = 0);
~VisKeyRec();
// собственные методы и поля …
private:
Ui::VisKeyRecClass ui;
// приватные методы и поля …
private slots:
void on_actionAddUser_triggered();
signals:
void dbSelected(QString);
};
В коде, представленном выше, осуществляется объявление собственного класса, реализующего функциональность главного окна. Скрытое поле с класса Ui::VisKeyRecClass является классом, полученным с помощью Qt Designer. Объект ui содержит метод setipUi(QWidget*), который должен быть вызван в конструкторе класса главного окна, в результате чего произойдет наполнение класса виджетами, указанными при конструировании пользовательского интерфейса.
В результате указанных операций будет получен класс, содержащий необходимые элементы пользовательского интерфейса. В дальнейшем от программиста требуется разработка поведения размещенных элементов интерфейса, осуществления взаимодействия объектов между собой.
Механизм сигналов и слотов Qt предназначен для связывания объектов друг с другом, коммуникации между собой. Связанным объектам нет необходимости что-либо "знать" друг о друге. Сигналы и слоты гораздо удобнее механизма функций обратного вызова (callbacks) и четко вписываются в концепцию ООП.
Для использования этого механизма объявление класса должно содержать специальный макрос Q_OBJECT на следующей строке после ключевого слова class:
class MyClass {
Q_OBJECT
public:
//...
};
Сигнал срабатывает в том момент, когда происходит определенное событие. Слот - это функция, которая вызывается в ответ на определенный сигнал. Виджеты Qt имеют большое количество предопределенных сигналов и слотов, при этом разработчик всегда можем создать собственные сигналы и слоты в своих классах.
Например, собственный сигнал может быть определен следующим образом:
class MyClass: public QObject {
Q_OBJECT
public:
//...
signals:
void mySignal();
};
Для того чтобы инициировать сигнал (выслать сигнал) нужно использовать ключевое слово emit.
void MyClass ::sendMySignal()
{
emit mySignal();
}
Также, сигналы могут использовать параметры для передачи дополнительной информации.
Для соединения сигналов и слотов можно использовать статический метод connect, определенный в классе QObject. В общем виде соединение выглядит следующим образом:
connect(sender, SIGNAL(signal), receiver, SLOT(slot));
sender и receiver - это указатели на QObject, signal и slot - сигнатуры сигнала и слота.
Пример соединения:
QObject::connect(spinBox, SIGNAL(valueChanged(int)),slider, SLOT (setValue(int)));
В приведенном выше примере, сигнал, возникающий при каждом изменении объекта spinbox, связывается с соответствующим слотом объекта slider. Вызов слота slider.setValue(int) происходит автоматически при каждом возникновении сигнала spinBox.valueChanged(int).
Существует множество различных вариантов соединения сигналов и слотов.
Один сигнал может быть соединен со многими слотами:
connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue (int)));
connect(slider, SIGNAL(valueChanged(int)),this, SLOT(updateStatusBar Indicator(int)));
При возникновении сигнала, слоты вызываются один за другим, порядок не определен.
Множество сигналов могут быть соединены с единственным слотом:
connect(sender0, SIGNAL(overflow()),receiver1, SLOT(handleMath Error()));
connect(sender1, SIGNAL(divisionByZero()),receiver1, SLOT(handleMath Error()));
Сигналы могут быть соединены между собой:
connect(sender1, SIGNAL(function1()),receiver, SIGNAL(function2()));
При возникновении первого сигнала, автоматически генерируются все связанные сигналы. Не считая этого, соединение сигнал-сигнал неотличимо от соединения сигнал-слот.
Любой элемент графического интерфейса в Qt может быть отдельным окном. Разработка остальных модулей приложения осуществляется аналогичным образом. Для них в качестве контейнеров были использованы собственные классы-наследники qt-классов QWidget и QDialog.
Класс QWidget является базовым для всех объектов пользовательского интерфейса.
Виджет - это элементарный объект пользовательского интерфейса: он получает события мыши, клавиатуры и другие события от оконной системы и рисует свое изображение на экране. Виджет, не встроенный в родительский виджет, называется окном. Обычно окно имеет рамку и полосу с заголовком, хотя используя соответствующие флаги окна можно создать окно без такого внешнего оформления. В Qt QMainWindow и разнообразные подклассы QDialog являются наиболее распространёнными типами окон.
Каждый конструктор виджета принимает один или два стандартных аргумента:
QWidget *parent = 0 является родителем нового виджета. Если он равен 0 (по умолчанию), новый виджет будет окном. Если нет, то он будет потомком для parent, и будет подчиняться геометрии родителя parent (за исключением случая, когда вы назначите ему флаг Qt::Window, как флаг окна).
Qt::WindowFlags f = 0 (там, где это возможно) устанавливает флаги окна; значение по умолчанию подходит почти для всех виджетов, но, например, чтобы получить окно без рамки, предусмотренной системой, необходимо использовать специальные флаги.
2.5.2 Работа с базами данных средствами Qt
Qt дает возможность создания платформо-независимых приложений для работы с базами данных, используя стандартные СУБД. Qt включает драйвера для Oracle, Microsoft SQL Server, Sybase Adaptive Server, IBM DB2, PostgreSQL, MySQL и ODBC-совместимых баз данных.
Работа с базами данных в Qt происходит на различных уровнях:
Слой драйверов - Включает классы QSqlDriver, QSqlDriverCreator, QSqlDriverCreatorBase, QSqlDriverPlugin и QSqlResult. Этот слой предоставляет низкоуровневый мост между определенными базами данных и слоем SQL API.
Слой SQL API - Этот слой предоставляет доступ к базам данных. Соединения устанавливаются с помощью класса QSqlDatabase. Взаимодействие с базой данных осуществляется с помощью класса QSqlQuery. В дополнение к классам QSqlDatabase и QSqlQuery слой SQL API опирается на классы QSqlError, QSqlField, QSqlIndex и QsqlRecord.
Например, следующий код демонстрирует установку соединения с базой данных SQLite, где переменная name хранит адрес файла базы данных:
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(name);
if (!db.open()) {
// код обработки ошибки соединения
}
Слой пользовательского интерфейса - этот слой связывает данные из базы данных с дата-ориентироваными виджетами. Сюда входят такие классы, как QSqlQueryModel, QSqlTableModel и QSqlRelationalTableModel.
При разработки приложения был использован класс QSqlQueryModel. Этот класс предоставляет модель данных в режиме только для чтения для результата SQL-запроса. Модель используется как источник данных для виджетов отображения информации в табличном виде. В частности, такой подход в приложении использовался для отображения информации об имеющихся в базе данных пользователях и нейронных сетях.
Для того чтобы отобразить набор записей, соответствующий результату запроса, необходимо предварительно настроить модель:
QSqlQuerModel usersModel->setQuery(getUsersQuery());
// set model columns view
usersModel->setHeaderData(1, Qt::Horizontal, tr("Имя пользователя"), Qt::DisplayRole);
// прочая настройка модели
После чего нужно указать созданный объект в качестве модели представления данных:
userTableView->setModel(usersModel);
userTableView->show();
Класс QSqlQuery обеспечивает интерфейс для выполнения SQL запросов и навигации по результирующей выборке.
Для выполнения SQL запросов, просто создают объект QSqlQuery и вызывают QSqlQuery::exec(). Например, вот так:
QSqlQuery query;
query.prepare("SELECT COUNT(*) FROM KeyCombinations");
query.exec();
Конструктор QSqlQuery принимает необязательный аргумент QSqlDatabase, который уточняет, какое соединение с базой данных используется. Если его не указать, то используется соединение по умолчанию. Если возникает ошибка, exec() возвращает false. Доступ к ошибке можно получить с помощью QSqlQuery::lastError().
QSqlQuery предоставляет единовременный доступ к результирующей выборке одного запроса. После вызова exec(), внутренний указатель QSqlQuery указывает на позицию перед первой записью. Если вызвать метод QSqlQuery::next() один раз, то он переместит указатель к первой записи. После этого необходимо повторять вызов next(), чтобы получать доступ к другим записям, до тех пор пока он не вернет false. Вот типичный цикл, перебирающий все записи по порядку:
while (query.next())
{
int combination = query.value(0).toInt();
int count = query.value(0).toInt();
qDebug() << combination << count;
}
QSqlQuery может выполнять не только SELECT, но также и любые другие запросы. Следующий пример вставляет запись в таблицу, используя INSERT:
QSqlQuery query;
query.exec("INSERT INTO NeuralNetDetails (netId, layerNum, neuronCount) VALUES (1, 2, 3)");
2.5.3 Многопоточная работа приложения
Поскольку обучение нейронной сети - достаточно долгий процесс, требующий существенных затрат процессорного времени, то во избежание замораживания графического интерфейса во время обучения нейронной сети были применены возможности потоков Qt. Qt предоставляет поддержку потоков в виде платформо-независимых потоковых классов, потокобезопасного способа отправки событий и возможности установки соединений сигнал-слот между потоками. Это облегчает создание переносимых многопоточных приложений и использование преимуществ многопроцессорных машин.
Экземпляр QThread представляет собой поток и предоставляет средства для запуска потока функцией start(), которая будет выполнять переопределенный QThread::run(). Реализация run() для потока - такая же точка входа, что и функция main() для приложения. Весь код выполняется в стеке вызовов, который начинается в функции run(), выполняющей новый поток, а заканчивается при завершении потока, когда происходит возврат из функции. QThread испускает сигналы, сообщающие о начале или окончании выполнения потока.
Для создания потока создается подкласс QThread и переопределяется его функция run().
class NeuralNetTeachThread : public QThread
{
Q_OBJECT
public:
void setNet(NeuralNetBP* value)
{
net = value;
}
private:
NeuralNetBP *net;
void run()
{
net->TeachOffLine();
int epochCount;
int res = net->GetTeachStatus(epochCount);
emit(netTeached(res == 0));
}
signals:
void netTeached(bool);
};
Таким образом, обучение нейронной сети было вынесено в отдельный поток, выполняющийся параллельно и позволяющий пользователю продолжить работу с графическим интерфейсом, работающим в основном потоке.
2.6 Основные принципы взаимодействия пользователя с системой
Для начала работы с программой необходимо указать местоположение файла базы данных, в котором хранится необходимая для работоспособности приложения информация, а также записи о существующих пользователях и их характеристиках, если работа с приложением осуществлялась ранее.
Для этого необходимо выбрать пункт меню «Файл» - «Указать местоположение БД», либо нажать «Ctrl-O». На рисунке 2.2 отображен диалога открытия файл базы данных.
Рисунок 2.2 - Диалог открытия файла базы данных
До тех пор, пока не будет выбран нужный файл, работа с приложением невозможна, поскольку все пункты меню, кроме пункта «Указать местоположение БД» и «Выход», будут оставаться недоступными.
После того, как необходимый файл будет выбран, в главном окне приложения отобразится список зарегистрированных пользователей, если они существуют.
На рисунке 2.3 отображено главное окно приложения после выбора базы данных.
Рисунок 2.3 - Главное окно приложения после открытия файла базы данных
Для каждого пользователя отображается такая информация как имя пользователя, количество успешных авторизаций, дата последней авторизаций и такой параметр как «надежность», которая означает количество завершенных сессий набора текста, т.е. групп параметров, характеризующих особенности клавиатурного почерка пользователя.
Для того, чтобы добавить нового пользователя, необходимо выбрать пункт меню «Пользователи» - «Добавить», либо нажать «Ctrl-N». После этого в появившемся диалоговом окне нужно ввести имя добавляемого пользователя и нажать кнопку «Ok». После этого зарегистрированный пользователь будет отображен в списке пользователей.
Рисунок 2.4 - Окно модуля предъявления клавиатурного почерка
Для того чтобы отредактировать имя пользователя нужно выбрать пункт меню «Пользователи» - «Редактировать», либо нажать «Ctrl-E». Пункт меню будет доступен только в том случае, если выбран конкретный пользователь в списке.
Для того чтобы пользователь мог быть в дальнейшем идентифицирован программой, ему необходимо предоставить фрагменты собственного клавиатурного почерка. Для этого предназначен модуль «Идентификация», который доступен при выборе пункта меню «Пользователи» - «Идентификация», либо по нажатию «Ctrl-I», либо по нажатию пиктограммы с изображением клавиши на панели инструментов.
На рисунке 2.4 отображено окно модуля предъявления клавиатурного почерка.
В данном окне отображается текст для набора и информацию о прогрессе. Для того чтобы осуществить идентификацию биометрической системой, пользователю необходимо набрать как минимум 4 сессии, что отображено в графе «Необходимо».
Рисунок 2.5 - Модуль работы с нейронными сетями
Текст, отображаемый в верхней части окна, можно сменить. Для этого нужно нажать на кнопку «Показать другой текст».
Для завершения работы с модулем нужно нажать кнопку «Закрыть».
После того, как пользователь ввел необходимый объем текста, можно приступить к процедуре его идентификации, т.е. обучению нейронной сети. Список обученных нейронных сетей доступ по выбору пункта меню «Нейронные сети» - «Открыть список».
В новом окне отображается список обученных ранее нейронных сетей. Существует возможность их удаления по нажатию на кнопку «Удалить». Для обучения новой сети нужно нажать на кнопку «Обучить новую». После чего в диалоговом окне необходимо выбрать пользователей, идентификация которых должна быть выполнена.
На рисунке 2.5 представлено окно со списком обученных ранее нейронных сетей, а также диалог выбора пользователей.
После того, как новая нейронная сеть будет обучена, она будет добавлена в список.
Для того, чтобы иметь возможность выполнить аутентификацию пользователей на основе одной из обученных сетей, необходимо выбрать одну из сетей в списке и нажать кнопку «Активировать».
После выбора нейронной сети в главном окне приложения станет доступен пункт меню «Пользователи» - «Авторизация». При выборе этого пункта откроется окно с текстом, в котором пользователю необходимо набрать небольшое количество текста. Данные от пользователя поступают на входы нейронной сети, отклик которой интерпретируется как успешная либо не успешная попытка авторизации, по результатам которой на экран будет выведено информационное сообщение.
Заключение
В рамках данной дипломной работы автором был разработан программный продукт, предназначенный для осуществления идентификации и аутентификации личности на основе ее клавиатурного почерка. С целью разработки графического интерфейса пользователя были изучены и применены возможности современной кросс-платформенной библиотеки Qt, что существенно упростило процесс разработки, позволило получить практически полностью платформо-независимый программный код.
В процессе работы над приложением была применена объектно-ориентированная парадигма программирования. Такой подход позволил реализовать принцип модульности программного кода, что должно положительно сказаться на удобстве и скорости дальнейшей разработки и простоте поддержки реализованного программного продукта.
Разработанное программное обеспечение позволяет наглядно продемонстрировать перспективность применения биометрии в задачах увеличения безопасности хранения и доступа к персональным данным.
Дальнейшая работа над разработанным приложением должна решать такие задачи, как обеспечение фоновой аутентификации во все время работы пользователей с персональным компьютером, а также интеграция модуля авторизации пользователей с системой авторизации операционной системы.
Список использованных источников
1. Иванов А.И. Нейросетевые алгоритмы биометрической идентификации личности. - М.: Радиотехника, 2004. - 144 с.: ил.
2. Яхъяева Г.Э. Нечеткие множества и нейронные сети: Учебное пособие. - Интернет-Университет Информационных Технологий; БИНОМ. Лаборатория знаний, 2006. - 316 с.: ил., табл.
3. Хайкин С. Нейронные сети: полный курс, 2-е издание. : Пер. с англ. - М. : Издательский дом "Вильямс", 2006. - 1104 с. : ил. - Парал. тит. англ.
4. Осовский С. Нейронные сети для обработки информации / Пер. с польского И.Д. Рудинского. - М.: Финансы и статистика, 2002. - 344 с.: ил.
5. Распознавание образов: состояние и перспективы. / Верхаген К., Дейн Р., Йостен Й., Вербак П. - М.: Радио и связь, 1985. - 104с.
6. Гмурман В.Е. Теория вероятностей и математическая статистика: Учеб. пособие для вузов. - 10 изд., стер. - М.: Высш. шк., 2004. - 479 с.: ил.
7. Коэффициенты Стьюдента [Электронный ресурс] / Статья - Электрон. дан.
8. Белман Р. Введение в теорию матриц. - М.: Наука, 1969
9. Розенблат Ф. Принципы нейродинамики. - М.: Мир, 1965, 196с.
10. Уоссермен Ф. Нейрокомпьютерная техника: Теория и практика. - М.: Мир, 1992, 240с.
11. Горбань А.Н. Обучение нейронных сетей. - М.: СП ПараГраф, 1990, 156 с.
12. Qt Documentation Archive [Электронный ресурс] / Документация Qt- Электрон. дан. - Режим доступа: http://doc.qt.digia.com/, свободный - Загл. с экрана - Яз. англ.
13. Клавиатурные шпионы. Варианты реализации кейлоггеров в ОС Windows. Часть II [Электронный ресурс] / Документация Qt- Электрон. дан. - Режим доступа: http://www.securelist.com/ru/analysis/204007541/ Klaviaturnye_shpiony_Varianty_realizatsii_keyloggerov_v_OS_Windows_Chast_II, свободный - Загл. с экрана - Яз. рус.
14. Raw Input [Электронный ресурс] / Документация прямого ввода - Электрон. дан. - Режим доступа: http://msdn.microsoft.com/en-us/library/windows/desktop/ ms645536(v=vs.85).aspx свободный - Загл. с экрана - Яз. англ.
15. Частотность двухбуквенных сочетаний [Электронный ресурс] / Статья - Электрон. дан. - Режим доступа: http://dict.ruslang.ru/freq.php?act= show&dic=freq_2letters, свободный - Загл. с экрана - Яз. рус.
16. Qt Designer Manual [Электронный ресурс] / Документация Qt Designer - Электрон. дан. - Режим доступа: http://qt-project.org/doc/qt-4.8/designer-manual.html, свободный - Загл. с экрана - Яз. англ.
17. Рекуррентные соотношения для дисперсии и математического ожидания [Электронный ресурс] / Статья - Электрон. дан. - Режим доступа: http://www.nntu.ru/RUS/fakyl/VECH/metod/metod9/part5.htm, свободный - Загл. с экрана - Яз. англ.
18. Ильин В.А. Линейная алгебра / В.А. Ильин, Э.Г. Позняк М.: Наука - Физматлит, 1999
Размещено на Allbest.ru
Подобные документы
Общие требования и этапы разработки автоматизированных информационных систем. Особенности работы, технологии доступа и проектирование структуры базы данных. Разработка клиентского программного обеспечения для магазина, защита и сохранность данных.
курсовая работа [650,9 K], добавлен 27.02.2013Рассмотрение инфологической и даталогической модели базы данных кинотеатров города. Разработка базы данных в программе MS Access. Описание структуры приложения и интерфейса пользователя. Изучение SQL-запросов на вывод информации о кинотеатре и о фильме.
курсовая работа [1,1 M], добавлен 04.09.2014Составление схемы концептуальной модели данных. Разработка структуры реляционной базы данных и интерфейса пользователя. Особенности главных этапов проектирования базы данных. Способы реализации запросов и отчетов. Специфика руководства пользователя.
курсовая работа [186,9 K], добавлен 18.12.2010Выбор языка программирования. Требования к информационному и техническому обеспечению. Реализация базы данных. Разработка алгоритма работы программного обеспечения. Форма идентификации пользователя. Руководство пользователя. Типы элементов диалога.
дипломная работа [1,3 M], добавлен 05.07.2013Инфологическая и даталогическая модели предметной области. Проектирование функциональной структуры приложения, защиты базы данных. Алгоритмы решения задачи и их реализация. Разработка инструкций для сопровождающего программиста и для пользователя.
курсовая работа [2,5 M], добавлен 20.11.2013Основы биометрической идентификации. Возможность использования нейросетей для построения системы распознавания речи. Разработка программного обеспечения для защиты от несанкционированного доступа на основе спектрального анализа голоса пользователя.
дипломная работа [2,8 M], добавлен 10.11.2013Описание предметной области, техническое задание на разработку программного продукта. Проектирование структуры базы данных: ER-диаграмм, диаграммы функциональных зависимостей, набор основных таблиц и описание полей. Разработка руководства пользователя.
курсовая работа [2,9 M], добавлен 25.11.2013Проектирование реляционной базы данных с помощью прикладного программного средства MS ACCESS. Описания особенностей использования запросов для извлечения, изменения и удаления информации из базы данных. Характеристика структуры интерфейса пользователя.
курсовая работа [1,6 M], добавлен 19.11.2012Изучение информационной базы клиента "Управление торговлей". Выбор и изучение платформы для построения сайта. Выбор технологии и среды разработки. Разработка основных алгоритмов решения задач и хранения данных. Проектирование интерфейса пользователя.
дипломная работа [1,1 M], добавлен 20.05.2017Разработка информационной системы для ветеринарной клиники, позволяющей осуществлять хранение и управление информацией. Разработка интерфейса программного продукта. Проектирование базы данных, приложений для работы с ней и руководство пользователя.
курсовая работа [1,7 M], добавлен 23.02.2014