Описание
NEUROCAM SUPERVISOR — это интеллектуальный супервайзер, который анализирует посетителей и персонал с помощью алгоритмов компьютерного зрения и моментально оповещает сотрудников о событиях из поля их ответственности. Менеджера о предпочтениях клиента, охрану о приходе нежелательных персон, руководителю предоставляет отчеты о посещаемости и аудитории, а также по рабочему времени сотрудников. В качестве источника входных данных используются обычные IP-камеры, установленные на входных группах. Работа с системой осуществляется в облачном личном кабинете.
В основе системы лежат нейросетевые алгоритмы анализа потокового видео собственной разработки: алгоритм поиска лиц в кадре, алгоритм экстракции, построения индекса и сравнения векторных шаблонов лиц, алгоритм оценки качества изображения, алгоритм трекинга объектов, алгоритм детекции подмены лица (антиспуфинг), алгоритмы определения пола, возраста и эмоций по лицу и другие.
Алгоритмы компьютерного зрения реализованы в виде кроссплатформенных библиотек, которые работают в рамках клиентских библиотек для Windows и Linux. Клиентские приложения управляют работой аналитических модулей, а также выполняют следующие дополнительные функции: поиск камер видеонаблюдения и их видеопотоков в локальной сети, проксирование видеопотоков и запись архива в облако, передача событий от аналитики в облако, синхронизация баз лиц между клиентскими приложениями и другие.
Облачная платформа сервиса включает в себя следующие функции: видеосервер и масштабируемое облачное хранилище для видеоданных, система для управления базами персон и их синхронизации между облаком и клиентскими приложениями, обновляемая в реальном времени лента событий, поступающих от модулей видеоанализа, система маршрутизации уведомлений о событиях со с отправкой в мессенджеры, дашборд с визуализированными отчетами на основе данных, полученных от модулей видеоанализа, система биллинга и многое другое.
Продукция осуществляется за счет полученного гранта при поддержке Фондом содействия инноваций в рамках реализации федерального проекта «Искусственный интеллект».
1. Функциональные характеристики программного обеспечения: Программный комплекс состоит из следующих компонентов:
- Компонент компьютерного зрения;
- Серверная часть;
- Клиентская часть;
- Клиентские приложения.
Компонент компьютерного зрения состоит из следующих логических и программных модулей:
- Authentication Компонент криптографии для проверки лицензионного ключа на этапе инициализации библиотек. Проверка лицензии путем сравнения закодированного текста ключа и истинного текста ключа после декодирования.
- Face Detection Компонент компьютерного зрения для анализа поступившего в библиотеку изображения от клиентской программы, инициализировавшей библиотеку. Производит поиск лиц на этом изображении. Взаимодействует с компонентом Tracking. Реализует следующие функции:
- Поиск лиц на изображении;
- Разметка координат лиц на изображении;
- Tracking Компонент компьютерного зрения для трекинга лиц в последовательности кадров с отмеченными областями лиц, получаемых от компонента Face Detection. Группы, сформированные на основе трека, лиц передаются в компонент Quality Estimate. Реализует следующие функции:
- Трекинг лиц в последовательности кадров;
- Группировка лиц на основе трека.
- Quality Estimate Компонент компьютерного зрения для оценки качества изображения и выявления лучшего лица в рамках трека, полученного от компонента Tracking. Передает лучшее по качеству лицо в логический компонент Fake Detection. Реализует следующие функции:
- Оценка четкости (фокуса);
- Оценка степени пикселизации;
- Оценка качества освещенности;
- Вычисление общего показателя качества.
- Fake Detection Компонент компьютерного зрения, предназначен для выявления фактов подмены лица искусственным материалом (фотографией или изображением с электронного устройства). Получает данные от компонента Quality Estimate, отправляет данные в компонент Recognition. Реализует следующие функции:
- Подсчет пульса;
- Формирование 3D карты лиц;
- Классификация полученных карт лиц.
- Recognition Компонент компьютерного зрения, предназначен для распознавания верифицированных лиц, поступающих от компонента Fake Detection. Реализует следующие функции:
- Выявление уникальных признаков лиц;
- Сопоставление признаков лиц;
- Распознавание лица, выявление его принадлежности к индивидууму;
- Если схожесть с лицом в БД, формирование уникального.
- Age/gender estimation Компонент компьютерного зрения, предназначенный для распознавания пола и возраста. Реализует следующие функции:
- Выявление половой принадлежности;
- Выявление возрастных характеристик.
- Emotion estimation Компонент компьютерного зрения, предназначенный для распознавания эмоций. Реализует следующие функции:
- Выявление наибольшей вероятности той или иной эмоции.
- DB update Компонент, предназначенный для добавления в БД признаков новых лиц и выгрузки из БД данных для сравнения в компоненте Recognition. Реализует следующие функции:
- Обновление локальной БД;
- Обновление удаленной БД;
- Выгрузка данных из БД в компонент Recognition.
- Result Компонент для передачи результатов анализа в клиентскую программу, которая работает с библиотекой. Реализует следующие функции:
- Передача изображения в формате Base64 с отмеченным на нем лицом;
- Передача GUID или ID персоны из БД;
- Передача информации о поле, возрасте, эмоции;
- Передача информации о времени детекции и ID камеры.
Серверная часть состоит из следующего набора сервисов:
- API Программный интерфейс для обработки входящих клиентских запросов (вебсайт, мобильное приложение), который также используется как внутренний API для взаимодействия с другими сервисами комплекса. Сервис использует Postgres в качестве основной базы данных. Сервис API выполняет следующие функции:
- Взаимодействие с пользовательским интерфейсом;
- Управление пользователями;
- Регистрация пользователей;
- Авторизация пользователей;
- Восстановление пароля;
- Совместный доступ к камере;
- Управление камерами;
- Управление клиентскими приложениями;
- Активизация клиентских приложений;
- Управление событиями;
- Управление персонами;
- Управление группами персон;
- Управление помещениями;
- Управление уведомлениями.
- Archive Сервис выполняет функцию записи видео фрагментов и мета данных фрагментов. Имеет публичную часть с одним методом для сохранения фрагмента архива по камере. Получает события от сервиса Boxhost, использует сервис Client для получения данных о камерах. Для хранения видео фрагментов используется Minio в качестве системы хранения файлов и база данных Postgres для хранения мета информации о фрагментах и событий. Сервис выполняет следующие функции:
- Запись видео фрагмента;
- Запись события;
- Получение временных маркеров по камере;
- Получение событий по камере;
- Получение новых событий по всем камерам;
- Просмотр архива;
- Экспорт архива;
- Получение изображения события;
- Отметка события как просмотренного;
- Удаление неактуальных данных.
- Boxhost Сервис реализован для взаимодействия с клиентскими приложениями (Neurobox), обеспечивает авторизацию и коммуникацию. Для взаимодействия с клиентскими приложениями используется фреймворк gRPC, в качестве транспорта используется протокол HTTP 2.0, формат protobuf. Все данные передаются в зашифрованном виде, для шифрования используется протокол TLS. Сервис выполняет следующие функции:
- Получение токена;
- Подключение приложения пользователем;
- Health check;
- Очередь задач;
- Отправка задач;
- Получение статистики;
- Получение событий от аналитики;
- Передача списка камер;
- Передача данных о SSH туннеле;
- Получение данных из PersonLog;
- Смещение offset (сдвиг) в PersonLog;
- Добавление записи в PersonLog;
- Проксирование.
- Payments. Сервис для обработки платежей и оплаты тарифов. Для подтверждения платежа пользователя сервис взаимодействует с платежным шлюзом. Для хранения данных о транзакциях сервис использует базу данных Postgres. Основные функции сервиса:
- Отключение записи по камере по истечению тарифа;
- Продление и списание средств по камере, если включено автоматическое продление;
- При отмене тарифа пересчет остатка средств по дням и возврат на счет пользователя;
- Пополнение счета пользователя и подтверждение платежа в платежный шлюз.
- Broadcast Сервис для онлайн трансляций с камер, подключенных к комплексу. Поддерживает следующие типы трансляций:
- HLS трансляция для камер, которые используют RTSP протокол и видео кодек 264. Для генерации видео сегментов и плейлиста используется ffmpeg. Для передачи данных используется HTTP протокол;
- MJpeg трансляция для камер, которые используют MJpeg для передачи видео. Используется Для передачи данных используется HTTP протокол;
- MJpeg трансляция с декодированием только ключевых кадров (i- frame) H.264 используется при просмотре сразу нескольких камер в пользовательском интерфейсе. Декодирование только ключевых кадров позволяет значительно снизить нагрузку на.
- Person Manager Сервис для формирования базы данных лиц персон из фотографий пользователя и синхронизации PersonLog между клиентскими приложениями. Сервис использует компонент компьютерного зрения для получения хэша лица персоны. Сервис взаимодействует с другими сервисами комплекса, используя RabbitMQ. Основные функции:
- Добавление фото персоны;
- Удаление фото из персоны;
- Добавление хэша лица из приложения;
- Получение лога персон по запросу.
- Reports Сервис обеспечивает формирование аналитических отчётов и рекомендательных данных на основе имеющихся событий (Events) в аккаунте пользователя. Для обеспечения высокой скорости вывода отчетов при работе с большим количеством данных используются средства кеширования данных с использованием базы данных Redis. Функционал производит обработку данных, содержащихся в событиях, которые хранятся в базе Postgres, построение аналитических отчетов и формирование рекомендаций на основе этих данных.
- Courier Внутренняя библиотека, используемая множеством сервисов серверной части. Библиотека обеспечивает интерфейс для простого обмена сообщениями и выполнения RPC запросов между сервисами. Библиотека представляет из себя программный интерфейс с несколькими функциями, при этом данный интерфейс может быть реализован с использованием любой системы обмены сообщений. Основной интерфейс Courier реализован с помощью протокола AMQP для работы с RabbitMQ.
- Telegram bot Сервис для отправки уведомлений о событиях в мессенджер Telegram, а также приема пользовательских данных для построения отчета по конверсии. Для привязки аккаунта Neurocam к Telegram используется одноразовый токен, который пользователь может получить в любой момент в личном кабинете. Сервис реализован в виде Telegram-бота — это позволяет использовать бота как в личном диалоге, так и в группе / канале для массового оповещения.
- Logs Сервис представляет собой систему централизованного хранения и сбора логов и предназначен для обеспечения контроля и анализа работы комплекса, реализован на основе свободного программного обеспечения Graylog. Логи из всех сервисов собираются в единую базу логов. Централизованное хранение логов обеспечивает легкость при поиске ошибок или анализе выполнения запроса между несколькими сервисами. Все сервисы внутри серверной части используют JSON формат для записи лога, что обеспечивает легкий поиск по полям лога.
- Monitoring Сервис реализован с использованием свободного программного обеспечения для сбора метрик и отправку уведомлений Prometheus. Для хранения метрик используется собственная база данных временных рядов (TSDB), оптимизированная для хранения значений по времени. Для сбора метрик используется polling model — система с заданным интервалом выполняет HTTP запросы к сервисам, для которых настроен мониторинг и получает данные метрик для последующей записи в базу данных. Для получения и агрегации данных был использован имеет собственный язык запросов Prometheus PromQL. Для построения дашборда с визуализацией метрик для обеспечения простого и удобного мониторинга различных компонентов системы было использовано свободное программное обеспечение Grafana, которое работает со множеством источников, включая TSDB Prometheus.
- Neurobox Основное кроссплатформенное приложение комплекса «Neurobox», которое предоставляется в виде отдельных приложений с пользовательским интерфейсом для Windows и MacOS, а также без интерфейса для Linux. Для коммуникации с серверной частью используется фреймворк gRPC. В качестве транспорта используется протокол HTTP 2, формат protobuf. Выполняемые функции:
- Обнаружение камер;
- Проксирование видеопотока;
- Запись в архив;
- Взаимодействие с аналитикой;
- Синхронизация базы лиц;
- Передача событий;
- Проверка подписи сервера;
- Запуск SSH туннеля по требованию;
- Передача логов.
- Клиентская часть Клиентская программа взаимодействует с библиотекой компьютерного зрения путем инициализации последней, используя функции библиотеки. На этапе инициализации происходит проверка лицензионного ключа, а также загрузка файлов с параметрами библиотек. После инициализации происходит запуск функций библиотеки:
- Вызов функции с передачей байтов изображения;
- После получения данных библиотекой, происходит анализ полученного изображения или серии изображений;
- Клиентская программа запрашивает результат. В этот момент в библиотеке происходит выделение отдельного потока, который производит запись результата программы в очередь, которую затем считает клиентская программа;
- Клиентская программа с заданным интервалом времени запрашивает из библиотеки данные о новых неизвестных персонах, при получении новых данных выполняется запрос в серверную часть для вставки данных в лог персон. После успешной вставки остальные приложения пользователя обновят данные своих локальных баз, обеспечивая согласованность данных.
- Клиентское приложение Клиентское приложение взаимодействует напрямую с двумя сервисами серверной части:
- Основной сервис для взаимодействия и получения команд;
- Запись архива и событий. Для взаимодействия с Boxhost сервисом используется защищенный протокол HTTP 2.0 с SSL шифрованием. Обмен данными осуществляется в формате Protobuf с использованием фреймворка gRPC.
- Запись фрагментов на диск;
- Запись фрагментов в оперативную память, по достижению установленного лимита запись продолжается запись на диск. В случае потери соединения с Boxhost фрагменты продолжают локально записываться и при восстановлении соединения будут переданы в архив.
При запуске Neurobox устанавливает постоянное соединение с Boxhost и ожидает получения команд. Каждые N секунд выполняется проверка состояния соединения, если удовлетворительный ответ не будет получен соединение отмечается как разорванное и запускается процесс автоматического переподключения. Если новый Neurobox не имеет присвоенного токена (уникальный идентификатор) тогда будет сгенерирован новый, далее отправлен в Neurobox и сохранен локально.
Обнаружение камер Процесс поиска внутри локальной сети камер, используется два способа обнаружения камер: ONVIF и перебор по словарям. Обнаруженные камеры передаются в серверную часть для последующего взаимодействия с пользователем.
Проксирование При получении задачи MEDIA_PROXY начинается процесс проксирования — осуществляется подключение к камере и создается двунаправленный стрим (bidirectional stream) с Boxhost сервером. Все полученные байты из стрима передаются в соединение с камерой, также все полученные байты от камеры передаются в стрим. При получении задачи HTTP_PROXY используется аналогичный алгоритм. Все данные передаются по защищенному TLS каналу.
Архив От сервиса Boxhost с интервалом N минут происходит получение списка камер, для которых включена запись в архив. Для полученных камер запускается процесс создания MPEG-TS фрагментов с помощью библиотеки ffmpeg. Для хранения фрагментов используется один из двух алгоритмов:
События Получение от системы аналитики уведомления о событии в кадре и последующая передача данных в Boxhost. При потере соединения данные о событиях накапливаются в локальной очереди.
Синхронизация базы лиц Приложение с заданным интервалом запрашивает в сервисе Boxhost обновление по логу персон, Boxhost выполняет запрос в базу с логом персон с последним offset (сдвигом) для этого приложения. При наличии новых записей данные передаются в приложение, которое в свою очередь передает данные в библиотеку компьютерного зрения, которая обновляет локальную базу данных. После успешного выполнения метода библиотеки приложение передает новый offset в серверную часть (id последней прочитанной записи), тем самым отмечая уже прочитанные данные.
Проверка подписи сервера При запуске приложением библиотеки компьютерного зрения выполняется запрос к серверу для получения уникального подписанного сообщения. После получения сообщения и его подписи выполняется проверка подписи с использованием публичного ключа, который встроен в приложение. Если подпись неправильная, библиотека компьютерного зрения не инициализируется.
Если вы обнаружили ошибку, пожалуйста, уведомите нас — выделите текст с ошибкой и нажмите клавиши Ctrl+Enter. Отключите блокировщик рекламы, если после нажатия комбинации кнопок не срабатывает всплывающее окно.