Дипломная работа: Разработка системы контроля доступа на основе распознавания лиц с помощью нейронной сети

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

В качестве примера были запущены два экземпляра сервиса на разных портах и к ним подключились с помощью панели (рис. 11).

3.6 Брокер сообщений

Рассмотрим шаблон проектирования Producer-Consumer. В данном паттерне используются следующие концепции:

· Producer - поток, который генерирует задание на выполнение

· Consumer- поток, который берет задание из очереди и отправляет результаты куда ему нужно

· Queue - буфер заданий с фиксированной вместимостью.

Процесс распознавания и обнаружения лиц требует достаточно больших вычислительных ресурсов, и поскольку является синхронным вызовом, то блокирует главный поток. В случае данной работы веб сервисы выступают в роли Producer, а процесс с нейронной сетью является Consumer. Чтобы соединить их используется очередь задач на основе Redis базе данных. Она хранит свое содержимое в оперативной памяти со структурой типа “ключ - значение”, что подходит для реализации очереди задач между процессами. Взаимодействие с Redis осуществляется с помощью Celery.

Начиная с версии 4 Celery официально больше не поддерживает платформы Windows. Однако, с объявляя дополнительную переменную окружения среды FORKED_BY_MULTIPROCESSING=1 решает данную проблему.

Рисунок 12. Шаблон проектирования Producer-Consumer

3.7 Балансировщик нагрузки

В качестве балансировщика нагрузки используется Nginx. Чтобы запустить балансировщик, нужно написать в специальном конфигурационном файле некоторые поля, описывающие сервера и способ балансировки. Пример минимальных конфигураций, с помощью которых можно запустить балансировку:

В качестве примера были запущены 3 экземпляра сервиса на разных портах. В блоке upstream указаны их адреса, а в блоке server указывается информация для самого балансировщика. В блоке location указывается, что все запросы будут перенаправляться на указанные в upstream сервисы. По умолчанию используется round robin балансировка.

3.8 Тестирование

3.8.1 Функциональное тестирование

В ходе тестирования использовались модульные и интеграционные тесты с помощью библиотеки pytest. Была протестирована следующая функциональность:

1. Создание таблиц в базах данных;

2. Добавление векторов в таблицу;

3. Поиск в таблице;

4. Распознавание;

5. Требование jwt аутентификации при включенной опции использования токенов;

6. Сервер корректно отвечает на запросы с неправильными/искаженными jwt токенами;

3.8.2 Use case тестирование

Были протестированы следующие юз-кейсы:

1. Пользователь создает worker процесс;

2. Пользователь удаляет worker процесс;

3. Пользователь запрашивает идентификацию;

4. Пользователь запрашивает сохранение вектора в базе данных;

3.8.3 Нагрузочное тестирование

В ходе нагрузочного тестирования проводились эксперименты с базами данных MySQL, PostgreSQL и разным количеством worker процессов. Тест представляет из себя 80 запросов на распознавание с интервалом от 0 до 2 секунд между ними. Для достижения этой задачи использовались asyncio и aiohttp с целью отправки асинхронных запросов. Тестирование провелось на 1 сервере с размерностью вектора в 128 чисел. Результаты отображены в таблицe №8.

Таблица 8. Результаты теста

База данных

Кол-во worker процессов

Среднее время ожидания ответа на идентификацию(сек)

PostgreSQL

1

8.8

PostgreSQL

2

1.4

PostgreSQL

3

1.4

MySQL

1

5.3

MySQL

2

1.27

MySQL

3

1.34

3.9 Подход к разработке

В данной работе применялась итеративная модель разработки. Ход разработки шел небольшими этапами, после которых анализировались полученные результаты, корректировались требования и предыдущие этапы работы.

Выводы по главе

В заключительной главе были описаны особенности реализации программной системы. Были рассмотрены основные компоненты, их предназначение и структура, а также тестирование.

идентификационный интеллект лицо алгоритм

Заключение

В работе была поставлена задача разработать автоматизированную систему идентификации личности. В ходе реализации утвержденных требований был спроектирован и реализован вариант системы.

Были выполнены все поставленные задачи:

1. Проведен анализ существующих решений;

2. Проанализированы подходы к задаче распознавания лиц;

3. Проанализирована архитектура веб-приложения;

4. Сформированы требования к системе;

5. Выбран подход к разработке;

6. Выбраны инструменты для реализации;

7. Реализованы компоненты;

8. Проведено тестирование.

В качестве дальнейших шагов можно рассматривать: увеличение числа поддерживаемых СУБД, брокеров сообщений (RabbitMQ), добавление дополнительных возможностей на стороне контрольной панели, реализация автоматического контроля worker процессов.

Список литературы

[1] A. Vedaldi, O.M. Parkhi, A. Zisserman. Deep Face Recognition British Machine Vision Conference, 2015.

[2] P.J.P. et al. An introduction to the good, the bad, and the ugly face recognition challenge problem. FG, 2011.

[3] D. Chen, F. Wen, X. Cao, J. Sun. Blessing of dimensionality: High-dimensional feature and its efficient compression for face verification. CVPR, 2013.

[4] H. Aronowitz, J. Weill, O. Barkan, L. Wolf. Fast high dimensional vector multiplication face recognition. ICCV, 2013.

[5] James Philbin, Florian Schroff,Dmitry Kalenichenko. FaceNet: A Unified Embedding for Face Recognition and Clustering. CVPR, 2015.

[6] Roy Thomas Fielding. Architectural Styles and the Design of Network-based Software Architectures. 2000.

[7] N. Dalal, B. Triggs. Histogram of oriented gradients for human detection. In CVPR, 2005.

[8] Rekha N, Dr. M.Z.Kurian. Face Detection in Real Time Based on HOG. IJARCET, 2014.

[9] D. Snow, M.J. Jones, P. Viola. Detecting pedestrians using patterns of motion and appearance. Int. Journal of Computer Vision, 2005.

[10] R. Benenson, M. Mathias, L. Van Gool, M. Pedersoli. Face detection without bells and whistles. ECCV, 2014.

[11] M. Abbott, "Biometric technology use for security is growing rapidly, but privacy and data protection remain a concern," 12 December 2017.

[12] B. Violino, "Biometrics has growing, but not sole, role in authentification security," 23 March 2018.

[13] J. Szymanski, "Impact Analysis: Biometric Authentication," 12 June 2017.

[14] Google Cloud Platform, "CLOUD VISION API," Google Cloud Platform

[15] Amazon Web Services, Inc., "Amazon Rekognition," Amazon Web Services, Inc.

[16] Microsoft, "Face API"

[17] Celery

[18] Redis

[19] PostgreSQL

[20] MySQL

[21] React - A Javascript library for building user interfaces

[22] Flask - a micro web framework for Python

[23] Dlib - computer vision library

[24] Systems and software engineering - Life cycle processes - requirements engineering, ISO / IEC / IEEE 29148

[25] Архитектура высоких нагрузок: Архитектура высоких нагрузок, свободный. - Загл. c экрана.

[26] Мартин Фаулер, Архитектура корпоративных программных приложений, - 2006. - С. 33-35.

Приложения

1. Github

С реализацией можно ознакомиться по следующей ссылке: https://github.com/SergeyBazhmin/face-recognition-service

2. Инструкции по запуску сервера

1. Установить PostgreSQL / MySQL, Redis, необходимые библиотеки из requirements.txt;

2. Создать базу данных и таблицу, в которой будут храниться вектора лиц вручную или с помощью скрипта init_tables.py;

3. Написать в конфигурационном файле необходимые сведения;

4. Запустить Redis сервер;

5. Запустить веб сервис и свой OAuth сервис (при необходимости);

6. Запустить Celery;

3. Инструкции по работе с контрольной панелью

1. Перейти в каталог с контрольной панелью и запустить с помощью команды npm start;

2. Откроется вкладка в браузере по адресу http://localhost:3000;

3. Ввести хоста (одного или несколько);

Рисунок 13. UI элемент для ввода сервера

4. Появится отдельный компонент для введенного хоста;

5. Нажав на кнопку spawn добавляется один worker процесс с указанной в конфигурационном файле моделью;

6. Появится окно, в котором отображаются текущие worker процессы. Можно удалить любой из них, нажав на кнопку Kill;

Рисунок 14. UI элемент для отдельного сервера

7. Переход во вкладку Debug позволяет отправить фотографию на сервер или посмотреть на несколько предыдущих запросов;

Рисунок 15. UI элемент для отображения активных процессов

Рисунок 16. UI элемент вкладки debug

Источник: https://otherreferats.allbest.ru/download/1176324/