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

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

2.1.4 Ограничения проектирования

1. Операционные системы: Windows NT, Ubuntu 18.04;

2. Языки: Python (3.6), JavaScript (ES6);

3. Реляционные базы данных;

2.2 Взаимодействие с системой

Пользователь имеет возможность работать с системой с помощью любых доступных ему средств. Рассмотрим на двух примерах, где возможно использование данной системы:

1) Осуществление проверки личности перед тем, как пройти через турникет. Обычных пропусков может быть недостаточно, поскольку не всегда это оказывается именно этот человек, который является владельцем пропуска. Данную проблему предположительно можно решить, осуществив дополнительную проверку личности по лицу при использовании пропуска. Для этого камера должна отослать запрос на распознавание соответствующей системе.

2) Запрос на дополнительную проверку при смене пароля на каком-либо онлайн ресурсе. Чтобы окончательно убедиться в подлинности пользователя, запрашивается его фотография лица, которую достать злоумышленнику, зная лишь логин и пароль пользователя, очень проблематично.

2.3 Архитектура

Проанализировав вышеуказанные требования и подходы к проектированию веб-приложения, была спроектирована и реализована следующая архитектура (Рис. 7), которая состоит из 6 компонентов:

Рисунок 7. Архитектура системы

1. База данных;

2. Веб сервис;

3. Worker pool;

4. Брокер сообщений;

5. Контрольная панель;

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

В анализе архитектур веб-приложения (Гл. 1 п. 1.6) очередь задач находилась на отдельном сервере. В данном случае было принято решение иметь очередь задач и worker процессы на каждом сервере, поскольку веб сервис не требует больших вычислительных ресурсов. Что касается серверов кэширования, то в них нет необходимости, поскольку сервисам не требуется отслеживать сессии пользователей.

2.4 Используемые языки программирования

Таблица 1. Языки программирования

Язык

Описание

Python

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

Javascript

Мультипарадигменный язык программирования.

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

2.5 Используемые библиотеки

2.5.1 Python

Таблица 2. Инструменты для Python

Библиотека

Описание

flask

Простой, гибкий фреймворк для создания веб приложений

flask_jwt_extended

Поддержка jwt для flask

flask_socketio

Поддержка websockets для flask

psutil

Сбор системной информации. Например, количество ядер процессора.

PIL

Обработка изображений

dlib

Нейронные сети и детекторы лиц, написанные на с++ с доступным интерфейсом на питоне

psycopg2

Адаптер для базы данных PostgreSQL

mysqlclient

Адаптер для базы данных MySQL

numpy

Эффективная работа с объектами линейной алгебры

base64

Кодирование и декодирование изображений

redis

Адаптер для Redis базы данных

keras

Библиотека для программирования нейронных сетей

asyncio

Асинхронное программирование. Используются для отправки асинхронных запросов на сервер для тестирования.

aiohttp

Асинхронные http запросы

pytest

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

celery

Асинхронная очередь задач

Главными инструментами являются Flask, Celery. Flask идеально подходит для небольших сервисов, которые требуют базовую функциональность с небольшими дополнениями, в то время как Django нацелен на решения более сложных задач и проблем. Flask работает на WSGI сервере, для которого существует множество доступных решений вроде UWSGI, Gunicorn и другие. Celery был выбран поскольку данный фреймворк предоставляет надежное взаимодействие с кластерами рабочих процессов, а также качественную обработку ошибок, возможность использования приоритетов и многих других полезных инструментов.

2.5.2 JavaScript

Таблица 3. Инструменты для JavaScript

Библиотека

Описание

React

Библиотека для разработки пользовательских интерфейсов в компонентном стиле

socket.io-client

Поддержка websockets на стороне браузера

react-dropzone

Графический элемент, позволяющий “скидывать” файлы в окно компонента

react-chartjs-2

Библиотека, позволяющая по данным строить большое количество графиков

material-ui

Material компоненты для react

React нацелен больше на разработку интерфейсов, в отличие от Angular, который предоставляет инструменты не только для разработки UI. Помимо этого, Angular по умолчанию использует TypeScript вместо JavaScript. React оставил реализацию инструментов и выбор языка самим разработчикам. Именно простота React стала причиной выбора этой библиотеки.

2.6 Базы данных

Таблица 4. Базы данных

База данных

Описание

PostgreSQL

Свободная объектно-реляционная система управления базами данных(СУБД).

MySQL

Свободная реляционная система управления базами данных

Redis

Резидентная система управления базами данных класса NoSQL с открытым исходным кодом, работающая со структурами данных типа «ключ -- значение». Используется как для баз данных, так и для реализации кэшей, брокеров сообщений.

Существует полноценный сервер очередей, который называется RabbitMQ. Однако, в данной работе использование подобного сервера можно заменить Redis базой данных, поскольку требуется передавать только лишь данные. PostgreSQL и MySQL были выбраны как две базы данных, использующие разные подходы к сохранению многомерных данных.

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

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

Глава 3. Особенности реализации системы

3.1 Базы данных

База данных взаимодействует с worker процессом. При поступлении фотографий лиц на сервер, они кодируются в n-мерный вектор, который в дальнейшем можно использовать для определения степени сходства. Для сравнения векторов используются обычное расстояние между векторами в евклидовом пространстве. Пусть - исходные закодированные лица. Тогда - мера сходства между закодированными лицами.

В системе на текущий момент поддерживаются две базы данных: PostgreSQL и MySQL.

3.1.1 PostgreSQL

PostgreSQL реляционная база данных имеет встроенную поддержку многомерных векторов. В качестве колонок используются тип Cube, который предоставляет встроенные математические операции над векторами. Стоит учитывать, что cube по умолчанию поддерживает лишь 100 значений, поэтому при большом вектора лиц его следует дробить на несколько колонок.

3.1.2 MySQL

В отличие от PostgreSQL, у MySQL нет встроенной поддержки многомерных векторов. Однако не составляет сложности создать столько колонок, сколько составляет размерность вектора лиц.

3.1.3 Оптимизация поиска

При необходимости оптимизации поиска среди векторов в таблицах при большом количестве данных можно использовать сегментирование базы данных (рис. 8, 9).

Рисунок 8. Сегментирование по половому признаку

Рисунок 9. Сегментирование по зданиям

3.2 Веб сервис

Главная задача веб сервиса состоит в том, чтобы отвечать на запросы с данными, поступающие с камер или других источников, и отправлять задания worker процессам через Redis очередь с помощью Celery. Сервис опрашивает очередь о полученном результате с определенным интервалом и отправляет ответ обратно, как только получает результат.

Чтобы обеспечить возможность использовать любые алгоритмы распознавания и детектирования, пользователю предлагается реализовать собственный класс, унаследованный от интерфейса FaceProcessor:

Также доступна возможность использовать свою собственную обработку фотографий, для чего нужно реализовать производный класс от Preprocessing:

От пользователя требуется лишь реализовать алгоритмы детектирования, распознавания и некую предварительную обработку фотографий при необходимости. Написанный модуль будет динамически импортирован в worker процессе. Далее требуется написать следующий конфигурационный файл:

В пунктах model и preprocessing нужно вписать путь по модулям к классу относительно корневого каталога, а также имя созданного класса. В пунктах database, redis требуется ввести необходимые настройки для установления соединения с базами данных. Кроме того, у сервиса есть поддержка jwt токенов, которую можно включить при передаче секретного ключа.

В данной работе использовались алгоритмы из библиотеки dlib. Она включает себя множество алгоритмов компьютерного зрения. В качестве алгоритма распознавания лиц используется ResNet с выходным слоем в 128 чисел, а обнаружение лиц происходит с помощью HOG дескрипторов.

3.3 API

Таблица 5. Точки доступа на сервере

Ресурс

Http методы

Описание

workers/<worker_id>

DELETE

удалить worker процесс с идентификатором worker_id

workers/create

POST

создать worker процесс

/image/recognize

POST

распознать человека на фотографии

/image/store

POST

сохранить векторное представление в базу данных

Таблица 6. Точки доступа Websockets на сервере

Событие

Namespace

Описание

poll_data

/

Запрос на обновление данных о компьютере (занятость процессора в процентах и т.д)

poll_workers

/

Запрос на обновление списка текущих worker процессов

debug

/debug

Включить/Отключить режим отладки

Таблица 7. Точки доступа Websockets на клиенте

Событие

Namespace

Описание

Data

/

Получение информации о запросах

workers

/

Получение активных рабочих процессов

recognition

/debug

Получение обработанных фотографий

3.4 Worker pool

Поскольку методы распознавания и обнаружения лиц являются достаточно длительным по времени, то необходимо запускать их в отдельных процессах, чтобы обеспечивать своевременную обработку запросов на стороне серверов. Worker pool управляется с помощью библиотеки Celery. Сервисы имеют возможность создать или удалить такие процессы при необходимости. Рабочие процессы опрашивают очередь задач, зарегистрированную в Celery как брокер сообщений, на наличие каких-либо доступных работ и выполняет их, попутно обращаясь к базе данных при необходимости.

Рисунок 10. Процесс обработки фотографии

3.5 Контрольная панель

Была реализована контрольная панель, позволяющая взаимодействовать c серверами. На данный момент контрольная панель позволяет делать следующее:

1. Контролировать количество worker процессов на стороне сервера. Со стороны панели имеется возможность отослать любому из известных серверов запрос на удаление или создание рабочего процесса с нейронной сетью.

2. Средства для отладки. Каждому сервису можно отправлять фотографии и получать результаты обработки изображения.

Кроме того, для каждого сервера отображается статистика полученных запросов и некоторой информации об оперативной памяти и занятости процессора.

Рисунок 11. Интерфейс панели

При запуске панели предлагается ввести сервера, к которым требуется установить соединение. Панель изначально проверяет можно ли подключиться к серверу путем отправления на него эхо-запроса. После получения ответа панель устанавливает Websocket соединение с сервером, с помощью которого получаются необходимые сведения об характеристиках компьютера и количестве запросов за некоторый промежуток времени. Далее появляется возможность управления пулом рабочих процессов и отладки. При нажатии на Debug вкладку устанавливается еще одно Websocket соединение на прослушку поступивших запросов на распознавание, а также дается возможность отправить свою фотографии через графический веб интерфейс.

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