В качестве примера были запущены два экземпляра сервиса на разных портах и к ним подключились с помощью панели (рис. 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