Спонсор: Intel
Опубликован: 23.08.2014 | Уровень: для всех | Доступ: платный | ВУЗ: Северный (Арктический) федеральный университет им. М.В. Ломоносова
Лабораторная работа 2:

Интеграция возможностей модулей Intel Perceptual Computing SDK для реализации многоуровневой системы информационной безопасности, основанной на биометрической информации

< Лекция 4 || Лабораторная работа 2: 123 || Лекция 5 >
Аннотация: В данной лабораторной работе рассматривается процесс создания пользовательского приложения по информационной защите и контролю доступа с помощью биометрических методов возможностями Intel Perceptual Computing SDK. Предполагается, что читатель уже знаком с основными терминами и принципами работы с SDK.

Дополнительные материалы к работе можно скачать здесь.

Описание прототипа приложения. Возможности SDK для применения биометрических методов

Поставим перед собой задачу - создание простого приложения с контролем доступа. То есть пользователю необходимо пройти несколько проверок чтобы доказать, что перед компьютером сидит именно он. Приложение будет позволять создавать нового пользователя и авторизоваться. Процесс авторизации похож на авторизацию на сайте, где пользователю необходимо ввести логин и пароль. Но кроме пароля приложение проверяет изображение с камеры, а также проводит проверку на "речевой" пароль - кодовое слово или короткую фразу, которые необходимо будет произнести. Только в случае совпадения всех характеристик (лицо пользователя идентифицировано, кодовое слово и пароль совпадают с исходными) авторизация завершается успехом. Создание нового пользователя представляет собой процесс создания исходных экземпляров, с которыми происходит сравнение в последующей авторизации: изображение с камеры для идентификации человека по лицу, произнесенного в микрофон кодового слова, пароль. Все данные будут храниться в локальной базе данных.

Определим модули Intel Perceptual Computing SDK, которые участвуют в работе приложения. Для создания и идентификации человека по лицу используется модуль Face Recognition интерфейса FaceAnalysis. Для распознавания кодового слова, которое пользователь продиктовал в микрофон, используется модуль Voice Recognition.

Создание приложения: Начало

Для экономии времени возьмем существующий пример приложения Face Tracking из папки /PCSDK/framework/CSharp/face_tracking.cs. Скопируем папку с проектом и запустим. Программа представляет собой приложение по отслеживанию лица человека. Так как в нашей программе требуется не отслеживание, а именно распознание лица, то удалим лишние части, оставив пункты меню Device - для выбора камеры, с помощью которой будет транслироваться видеопоток, Module - модуль Face Analysis, который понадобиться для реализации идентификации человека по лицу. Также оставим CheckBox Location, кнопки Start/Stop и StatusStrip Status2. Теперь, чтобы проект смог скомпилировался без ошибок, необходимо подкорректировать код: в MainForm.cs - удалим или закомментируем функции DrawLandmark, Live_Click, Playback_Click, GetPlaybackState, Recod_Click, GetRecordState, GetPlaybackFile, GetRecordFile, PopulateProfileMenu()

а также изменим функции Panel_Paint, UpdatePanel, Module_Item_Click, DoTracking следующим образом:

private void Panel_Paint(object sender, PaintEventArgs e)
        {
            lock (this)
            {
                if (bitmap == null) return;
                    e.Graphics.DrawImageUnscaled(bitmap, 0, 0);
                
            }
        }
private delegate void UpdatePanelDelegate();
public void UpdatePanel()
        {
            Panel2.Invoke(new UpdatePanelDelegate(delegate() 
                {
                    
                    Panel2.Invalidate();
                }));
        }
private void Module_Item_Click(object sender, EventArgs e)
        {
            RadioCheck(sender, "Module");            
        }

private void DoTracking()
        {
            FaceTracking ft = new FaceTracking(this);           
            
            ft.AdvancedPipeline();
           
            this.Invoke(new DoTrackingCompleted(
                delegate
                {
                    Start.Enabled = true;
                    Stop.Enabled = false;
                    MainMenu.Enabled = true;
                    if (closing) Close();
                }
            ));
        }
    

в FaceTracking.cs: удалим или закомментируем функцию SimplePipeline, класс MyUtilMPipeline и изменим функцию AdvancedPipeline, удалив оттуда следующее условие:

if (form.GetRecordState())
            {
                capture = new UtilMCaptureFile(session, form.GetRecordFile(), true);
                capture.SetFilter(form.GetCheckedDevice());
            }
            else if (form.GetPlaybackState())
            {
                capture = new UtilMCaptureFile(session, form.GetPlaybackFile(), false);
            }
            else
            {
                capture = new UtilMCapture(session);
                capture.SetFilter(form.GetCheckedDevice());
            }
    

Вместо него вставим строки:

capture = new UtilMCapture(session);
capture.SetFilter(form.GetCheckedDevice());
    

После этого программа должна успешно скомпилироваться и приложение будет выглядеть следующим образом:

Рис. 4.1. Приложение Face Tracking до и после преобразований

После этого добавим в проект форму, которая будет выполнять роль главного меню. Для этого через вкладку "Проект" необходимо выбрать "Добавить форму Windows", назовем ее mainmenu.cs. Добавим на нее два объекта label1 и label2 в свойствах Text, которых пропишем "текущий пользователь" и "Гость" соответсвенно. Также добавим две кнопки: button1, у которого свойство Text равно "Создать пользователя" и button2, со свойством Text равным "Авторизоваться".

Замечание: не путайте свойство Text и Name, первое отвечает за текст, связанный с элементом управления, а второе отвечает за имя, используемое для идентификации объекта в коде.

Примерный вариант формы mainmenu

Рис. 4.2. Примерный вариант формы mainmenu

Для того чтобы при запуске программы у нас появлялась форма mainmenu, а не MainForm необходимо открыть файл Program.cs (можно найти через "Обозреватель решений" в вкладке "Вид") и заменить часть кода в функции Main:

До: После:
PXCMSession session;
pxcmStatus sts= PXCMSession.CreateInstance(out session);
if (sts >= pxcmStatus.PXCM_STATUS_NO_ERROR)
{
  Application.Run(new MainForm(session));
  session.Dispose();
 }
        
Application.Run(new mainmenu());
        

Для начала опишем процесс создания нового пользователя: добавим в mainmenu.cs 3 глобальные переменные: username - уникальное имя пользователя, password - пароль, secretword - кодовое слово.

private string secretword = null;
private string username = null;
private string password = null;
    

Обработаем событие нажатия на кнопку button1 так, чтобы при нажатии форма увеличивалась, и появлялись дополнительные элементы, необходимые для создания нового пользователя. Предварительно добавим на форму label3, label4, с текстами "Имя" и "Пароль", textBox1,textBox2 и 3 кнопки button3, button4, button5 с текстами "Добавить изображение", "Добавить кодовое слово", "Создать" соответственно.

private void button1_Click(object sender, EventArgs e)
        {          
            textBox1.Text = "";
            textBox2.Text = "";
            username = null;
            password = null;
            secretword = null;
            this.Width = 580;
        }
    
Обработчик события нажатия на кнопку button1

Рис. 4.3. Обработчик события нажатия на кнопку button1

Создание приложение: Подключение базы данных

Для создания и авторизации пользователей нам потребуется хранить данные о пользователей в базе данных. Для этого подойдет любая база данных, в этой работе используется база данных SQLCE (SQL Compact Edition). SQLCE может хранить данные используя язык С# и .NET фреймворк версии 3.5 и выше. Для того чтобы создать базу данных найдите в вкладке "Data" ("Данные") пункт "Add New Data Source" ("Добавить новый источник данных"). Затем выберите тип "Database" ("База данных") и нажмите "Далее", в типе модели выберите "Набор данных".


Рис. 4.4.

Нажмите "Создать подключение", выберите источник данных Microsoft SQL Server Compact 3.5 (Поставщик данных среды .NET для Microsoft SQL Server Compact 3.5) используя "Мой компьютер". В свойствах подключения нажмите "Создать". Напишите имя файла в конце пути, например dataname.sdf, затем "OK". Используя кнопку "Проверить подключение" в левом нижнем углу: если проверка успешно закончилась, то нажимайте "Далее" и "Да", когда мастер-настройки спросит, копировать ли базу данных в проект. Когда база данных добавлена ее можно увидеть в "Обозревателе серверов" (пункт меню "Вид" или сочетание клавиш Ctrl+Alt+S). Нажмите на созданную базу данных и щелчком правой кнопки на пункте "Таблицы" выберите "Создать таблицу". Укажите имя таблицы "users" и добавьте следующие столбцы:

Столбцы таблицы users

увеличить изображение
Рис. 4.5. Столбцы таблицы users

Создайте таблицу models, в которой будем хранить изображения пользователей со следующими столбцами:

Столбцы таблицы models

увеличить изображение
Рис. 4.6. Столбцы таблицы models

Попробуйте вручную вставить несколько записей для того чтобы убедиться, что все работает верно.

< Лекция 4 || Лабораторная работа 2: 123 || Лекция 5 >
Дмитрий Юнушкин
Дмитрий Юнушкин

В лабораторной работе №2 (идентификация лица) сказано:

в FaceTracking.cs: удалим или закомментируем функцию SimplePipelineкласс MyUtilMPipeline и изменим функцию AdvancedPipeline...

Класса MyUtilMPipeline  нет в проекте вообще;

Функции AdvancedPipeline так же нет. Материалов к лабораторной  №2 в начале работы (по ссылке открывается та же страница) тоже нет.Это ошибки или используется другая версия примера?

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Дмитрий Юнушкин
Дмитрий Юнушкин
Россия, г. Пенза