Введение#
Данный документ описывает:
- аппаратные и программные требования
- общее описание работы приложения и рекомендации по настройке
- процесс взаимодействия с LUNA Streams
- перечень основных настроек, необходимых для запуска FaceStream
- детальное описание всех настроек
- использование FaceStream с LUNA Configurator
- использование FaceStream с конфигурационными файлами
- ошибки API для FaceStream и LUNA Streams
- информацию о совместимости с моделями камер
Подробную информацию по запуску приложения см. в руководстве по установке FaceStream.
Обзор#
Приложение FaceStream осуществляет несколько функций:
- Чтение потоков
В качестве источников данных могут выступать веб-камеры, USB и IP-камеры (посредством протокола RTSP), видеофайлы и фотоизображения.
- Обработка потоков
Выполняется поиск и сопровождение лиц или тел в потоке, пока они не покинут кадр или не будут перекрыты.
- Проверка на Liveness
Выполняется проверка на Liveness по одному или нескольким кадрам трека.
- Отсылка лучших снимков лиц или тел в виде HTTP-запросов во внешний сервис
В качестве внешнего сервиса выступает ПО компании VisionLabs LUNA PLATFORM 5.
Работа FaceStream зависит от пяти настроек.
-
Настройки управления потоками, задаваемые в LUNA Streams.
Здесь задаются настройки, касающиеся источников потоков, такие как тип источника, адрес источника, настройки фильтрации и др. Настройки задаются с помощью отправки запросов с телом в формате JSON в сервис LUNA Streams. FaceStream забирает настройки из LUNA Streams для дальнейшей обработки. Подробное описание работы FaceStream с LUNA Streams приведено в разделе "Взаимодействие FaceStream с LUNA Streams".
-
Настройки FaceStream, задаваемые в LUNA Configurator.
Здесь задаются общие настройки FaceStream, такие как логирование, настройка отправки готовых изображений из FaceStream во внешние сервисы, отладка и т.п.
-
Настройки TrackEngine, задаваемые в LUNA Configurator.
Здесь задаются настройки, касающиеся детекции и трекинга лица или тела.
-
Настройки LUNA Streams, задаваемые в LUNA Configurator.
Здесь задаются общие настройки сервиса LUNA Streams, такие как логирование, настройки БД, адрес сервиса LUNA Licenses и т.п.
-
Настройки FaceEngine, задаваемые в конфигурационном файле "faceengine.conf" и передаваемые во время запуска контейнера FaceStream.
Здесь задаются параметры, касающиеся глубокой настройки распознавания лица и тела. Изменять параметры рекомендуется только по согласованию с сотрудниками VisionLabs.
При работе с FaceStream также доступны следующие возможности:
- Динамическое создание, изменение, удаление источников потоков посредством запросов API
- Просмотр потоков в браузере с указанными параметрами в режиме реального времени
- Получение метрик по потоку (количество потоков, количество ошибок, количество необработанных кадров, FPS)
FaceStream можно настроить на работу либо с лицами, либо с телами. Одновременная обработка лиц и тел невозможна.
Работа FaceStream с лицами и телами#
FaceStream может обрабатывать как лица, так и тела. Для каждого объекта предусмотрена своя схема работы и свой набор параметров, описанных ниже.
Одновременная обработка лиц и тел невозможна, необходимо включить обработку либо лиц, либо тел (см. раздел Параметры «use-face-detector» и «use-body-detector»).
Необходимый минимум параметров для работы с обоими объектами можно найти в разделе "Перечень приоритетных настроек".
Работа с лицами#
Схема работы FaceStream с лицами представлена на рисунке ниже.
-
В FaceStream отправляется видео с камеры видеонаблюдения, веб-камеры, видеофайл или фотоизображения. FaceStream может работать сразу с несколькими источниками потока (количество задается лицензией). Источники и дополнительные настройки обработки потока указываются в теле HTTP-запроса к сервису LUNA Streams. Затем данные настройки извлекаются приложением FaceStream.
-
FaceStream выполняет декодирование кадров видео.
-
Из кадра вырезается зона ROI, если задан параметр "roi" (настройки управления потоками).
-
Полученное изображение масштабируется до размера "scale-result-size" (настройки TrackEngine) если задан параметр "detector-scaling" (настройки TrackEngine).
-
Выполняется детекция лиц на кадре.
-
Вместо детекции может выполняться редетекция лица в кадре, если задан параметр "detector-step" (настройки TrackEngine).
-
Для каждого нового лица в потоке создается трек, который подкрепляется новыми детекциями данного лица с последующих кадров. Трек прерывается, если лицо исчезает из кадра. Можно задать параметр "skip-frames" (настройки TrackEngine), чтобы трек не прерывался сразу. Система будет ждать появления лица в области указанное количество кадров.
-
FaceStream отсекает кадры плохого качества и выбирает лучшие снимки. Существует несколько алгоритмов выбора лучшей детекции/детекций в треке. См. описание группы параметров "filtering" (настройки управления потоками).
-
Если кадр является лучшим снимком, он добавляется в коллекцию лучших снимков. В зависимости от настройки "number_of_bestshots_to_send" (настройки управления потоками) для каждого трека выбирается лучшая детекция в треке или несколько детекций.
-
Опционально. Если в настройке "portrait_type" (настройки управления потоками) указан параметр "warp", то лучшие снимки приводятся к формату LUNA PLATFORM и создаются биометрические образцы. Биометрический образец лучше подходит для обработки с помощью LUNA PLATFORM.
-
Лучшие снимки, исходные изображения (опционально) и дополнительная информация из настроек управления потоком отправляется в LUNA PLATFORM в виде HTTP-запроса к ресурсу "/6/handlers/{handler_id}/events/raw" для генерации события.
Основные параметры видеопотока (протокол передачи данных, путь к источнику, область интереса на кадре и др.) задается в разделе "data" (настройки управления потоками).
Адрес LUNA PLATFORM задается в разделе "event_handler" (настройки управления потоками).
Частота отправки кадров задаётся в секции "sending" (настройки управления потоками).
Работа с телами#
Схема работы FaceStream с телами представлена на рисунке ниже.
-
В FaceStream отправляется видео с камеры видеонаблюдения, веб-камеры, видеофайл или фотоизображения. FaceStream может работать сразу с несколькими источниками потока (количество задается лицензией). Источники и дополнительные настройки обработки потока задаются с помощью отправки HTTP-запроса в сервис LUNA Streams, которые в дальнейшем извлекаются приложением FaceStream.
-
FaceStream выполняет декодирование кадров видео.
-
Полученное изображение масштабируется до размера "scale-result-size" (настройки TrackEngine) если задан параметр "detector-scaling" (настройки TrackEngine).
-
Выполняется детекция тел на кадре.
-
Вместо детекции может выполняться редетекция тела в кадре, если задан параметр "detector-step" (настройки TrackEngine).
-
Для каждого нового тела в потоке создается трек, который подкрепляется новыми детекциями данного тела с последующих кадров. Трек прерывается, если тело исчезает из кадра. Можно задать параметр "skip-frames" (настройки TrackEngine), чтобы трек не прерывался сразу. Система будет ждать появления тела в области указанное количество кадров.
-
FaceStream отсекает кадры плохого качества и выбирает лучшие снимки. См. описание параметра "min_score" (настройки управления потоками).
-
Если кадр является лучшим снимком, он добавляется в коллекцию лучших снимков. В зависимости от параметра "number_of_bestshots_to_send" (настройки управления потоками) для каждого трека выбирается лучшая детекция в треке или несколько детекций.
-
Лучшие снимки приводятся к формату LUNA PLATFORM и создаются биометрические образцы.
-
Лучшие снимки, исходные изображения (опционально) и дополнительная информация из настроек управления потоком отправляется в LUNA PLATFORM в виде HTTP-запроса к ресурсу "/6/handlers/{handler_id}/stream_events" для генерации события. Вместе с лучшими снимками отправляются детекции с координатами тела человека. Количество отправляемых детекций задается в параметре "minimal_body_track_length_to_send" (настройки управления потоками).
Основные параметры видеопотока (протокол передачи данных, путь к источнику, область интереса на кадре и др.) задается в разделе "data" (настройки управления потоками).
Адрес LUNA PLATFORM задается в разделе "event_handler" (настройки управления потоками).
Частота отправки кадров задаётся в секции "sending" (настройки управления потоками).
Взаимодействие FaceStream с LUNA Streams#
Для работы FaceStream необходимо предварительно запускать дополнительный сервис - LUNA Streams (порт по умолчанию - 5160). В теле запроса "create stream" к сервису LUNA Streams задаются настройки для управления потоками. После отправки запроса создается поток, чьи настройки забирает FaceStream для дальнейшей обработки. Примеры запросов можно найти в спецификации OpenAPI LUNA Streams.
LUNA Streams имеет собственный пользовательский интерфейс, предназначенный для работы с потоками. См. подробную информацию в разделе "Пользовательский интерфейс сервиса LUNA Streams".
Для использования сервиса LUNA Streams необходимо использовать сервисы LUNA PLATFORM 5 - LUNA Licenses и LUNA Configurator, а также базы данных PostgreSQL или Oracle и Influx.
База данных Influx нужна для целей мониторинга состояния сервисов LUNA PLATFORM. При необходимости мониторинг может быть отключен.
В документации FaceStream не описывается использование базы данных Oracle.
При необходимости можно запустить LUNA Streams без LUNA Configurator. Данный способ не описывается в документации.
FaceStream лицензируется с помощью ключа LUNA PLATFORM 5, в котором содержится информация о максимальном количестве потоков, которые может обработать LUNA Streams. Лицензия регулируется сервисом LUNA Licenses.
См. подробную информацию по активации лицензии LUNA Streams в руководстве по установке FaceStream.
В базе данных PostgreSQL/Oracle хранятся все данные потоков LUNA Streams.
Диаграмма последовательности создания и обработки потока#
Диаграмма последовательности создания и обработки потока приведена ниже:
1․ Пользователь задает настройки FaceStream, TrackEngine и настройки сервиса LUNA Streams в сервисе LUNA Configurator.
Настройки сервиса LUNA Streams содержат только настройки сервиса (адрес БД LUNA Streams, адрес InfluxDB и пр.) и не содержат настроек управления видеопотоком (параметры отправки лучших снимков, адрес LP, идентификаторы обработчиков и др.). Такие настройки задаются с помощью отдельного HTTP-запроса после запуска FaceStream (см. п.4).
При необходимости пользователь может задать настройки FaceEngine в отдельном конфигурационном файле.
2․ При запуске FaceStream, приложение считывает настройки из сервиса LUNA Configurator.
3․ FaceStream переходит в режим ожидания появления потока.
4․ Пользователь отправляет HTTP-запрос "create stream" к сервису LUNA Streams, содержащий настройки управления потоком в теле запроса.
5․ Сервис LUNA Streams проверяет наличие лицензируемой функции, регулирующей количество потоков для работы LUNA Streams, в сервисе LUNA Licenses. Если на данный момент уже обрабатываются какие-либо потоки, то дополнительно проверяется количество уже обрабатываемых потоков на момент запроса с помощью отчета FaceStream (не отражено на диаграмме, см. п. 17).
6․ Сервис LUNA Licenses возвращает ответ.
7․ Если лицензируемая функция отсутствует или на момент создания потока обрабатывается максимальное количество доступных потоков, то пользователю возвращается соответствующая ошибка.
8․ Если лицензируемая функция присутствует и на момент создания потока еще не обрабатывается максимальное количество доступных потоков то сервис LUNA Streams создает поток и записывает настройки управления потоком в БД LUNA Streams.
9․ Сервис LUNA Streams получает идентификатор "stream_id".
10․ Сервис LUNA Streams возвращает пользователю уникальный идентификатор "stream_id".
11․ Сервис LUNA Streams добавляет поток во внутреннюю очередь.
Очередь реализована в самом сервисе LUNA Streams и не является внешней.
12․ Сервис LUNA Streams обновляет статус потока на "pending".
13․ Сервис LUNA Streams обновляет статус потока в БД LUNA Streams.
14․ Сервис LUNA Streams получает ответ.
Если на момент создания потока FaceStream отключен, то может быть создано только то количество потоков со статусом "pending", которое оговорено лицензией. После запуска FaceStream будут приняты в обработку потоки, созданные в порядке очереди.
Посмотреть потоки в очереди, отфильтровав их определенным образом, можно с помощью GET-запроса к ресурсу "streams/processing/queue".
Потоки можно создавать со статусом "pause". В таком случае они будут добавлены в базу данных и будут ожидать ручного обновления статуса до "pending".
15․ FaceStream извлекает поток(и) из очереди со статусом "pending".
16․ FaceStream начинает оправлять данные в основные сервисы LUNA PLATFORM 5 для дальнейшей обработки кадров по заданным обработчикам и генерации событий.
17․ FaceStream начинает отправку отчетов об обработке потоков в LUNA Streams.
Время отправки отчетов является фиксированным и не может быть изменено.
18․ Сервис LUNA Streams обновляет статус обрабатываемых потоков на "in_progress".
19․ Сервис LUNA Streams удаляет обрабатываемый поток из очереди.
20․ Сервис LUNA Streams обновляет статус потока в БД LUNA Streams.
21․ Сервис LUNA Streams получает ответ.
Завершение обработки для набора изображений, видеофайла или конечного видеопотока:
22․ FaceStream прекращает отправлять данные в LUNA PLATFORM.
Если необходимо, чтобы видеопоток воспринимался как конечный, то необходимо включить параметр "endless".
23․ FaceStream отправляет последний отчет в сервис LUNA Streams.
Если в отчёте сказано, что какой-то поток был обработан, то FaceStream забирает следующие параметры потока со статусом "pending" из очереди LUNA Streams, и сервис меняет статус потока с "pending" на "in_progress", удаляя из очереди. Если по неизвестным причинам отчет не был передан, то потоки заново помещаются в очередь.
24․ Сервис LUNA Streams обновляет статус потока на "done" в БД Streams.
25․ Сервис LUNA Streams обновляет статус потока в БД LUNA Streams.
26․ Сервис LUNA Streams получает ответ.
Бесконечный видеопоток:
27․ FaceStream будет отправлять данные в LUNA PLATFORM и отчеты в LUNA Streams до тех пор, пока видеопоток не будет прерван.
Более подробное описание обработки потока LUNA Streams см. в разделе "Процесс обработки потоков в LUNA Streams".
Запросы к сервису LUNA Streams#
Доступны следующие запросы к сервису LUNA Streams для работы с потоками:
- задание настроек для управления потоком (запрос "create stream")
- получение существующих потоков по их "stream_id" с описанием данных каждого потока (запрос "get streams")
- получение всей информации по потоку по его "stream_id" (запрос "get stream")
- удаление существующих потоков по их "stream_id" (запрос "delete streams")
- удаление потока по его "stream_id" (запрос "remove stream")
- получение числа созданных потоков (запрос "count streams")
- обновление полей "description" и "status" потока по его "stream_id" (запрос "update stream")
- замена всех данных потока на новые по его "stream_id" (запрос "put stream")
- получение ссылки на последний кадр (запрос "get last frame preview")
- получение ссылки на поток, запущенный в реальном времени (запрос "get live preview")
- получение логов потока (запрос "get streams logs")
- удаление логов потока (запрос "delete streams logs")
Подробное описание запросов и примеры запросов можно найти в спецификации OpenAPI LUNA Streams.
Распределение потоков в LUNA Streams#
Как было сказано ранее, доступна возможность обработки нескольких потоков одновременно.
Для каждого потока предполагается его текущий статус:
- pending - поток взят в работу, но пока не найдено ни одного "рабочего процесса"
- in_progress - поток обрабатывается
- done - поток полностью обработан (актуально для типов передачи потока "videofile"/"images" или ["tcp/udp"] с параметром "endless" равным "false")
- pause - пользователь остановил обработку потока (не применимо для типов передачи потока "videofile" или "images")
- restart - сервер перезапустил обработку потока
- cancel - пользователь отменил обработку потока
- failure - при обработке потока произошла ошибка
- handler_lost - "рабочий процесс" FaceStream потерян, следует передать другому (не применимо для типов передачи потока "videofile" или "images")
- not_found - поток был в обработке, но в процессе выполнения был удалён
- deleted - намеренное удаление потока
Статусы "pause" и "cancel" можно указать при обновлении потока с помощью запроса "update stream".
Статусы "restart", "handler_lost" являются временными. При данных статусах невозможно получить поток, однако переход через эти статусы регистрируется в обычном режиме. Статус "restart" может появиться только при использовании группы настроек "autorestart" (см. раздел "Автоматический перезапуск потоков" ниже).
Статус "not_found" является внутренним и будет отправлен для обратной связи, если поток был удален во время обработки. При данном статусе невозможно получить поток.
Статус "deleted" является виртуальным. Поток с таким статусом не может существовать, но этот статус можно увидеть в логах потоков.
Таблица переходов от статуса к статусу#
Следующая таблица показывает статусы, которые могут быть получены после каждого из перечисленных статусов.
Символ «+» означает, что статус, указанный в первой строке, может стоять после статуса в первом столбце. Пустое поле означает, что нет случаев, когда может возникнуть данный статус.
Символ «-» означает, что в системе нет потока (он не создан или уже удален).
- | pending | in_progress | done | restart | pause | cancel | failure | handler_lost | |
---|---|---|---|---|---|---|---|---|---|
- | + | + | |||||||
pending | + | + | + | + | + | ||||
in_progress | + | + | + | + | +* | + | + | + | |
done | + | + | + | + | |||||
restart | + | + | |||||||
pause | + | + | + | + | |||||
cancel | + | + | + | + | |||||
failure | + | + | + | + | |||||
handler_lost | + |
* не поддерживается для типов передачи потока "videofile" или "images"
Процесс обработки потоков в LUNA Streams#
По умолчанию новый поток создается со статусом "pending" и сразу же попадает в очередь обработки. Обработку потока можно отложить, указав статус "pause" при создании.
Как только появляется "рабочий процесс" свободного потока с запросом на пул из очереди, поток принимается к обработке и ему присваивается статус "in_progress".
После того, как поток был обработан "рабочим процессом" FaceStream, ему присваивается статус "done" в случае успеха (актуально для типов передачи потока "videofile"/"images" или "tcp/udp" с параметром "endless" равным "false") или "failure", если произошли какие-либо ошибки. Однако статус обработки потока может быть понижен с "in_progress" по следующим причинам:
-
отсутствие обратной связи от "рабочего процесса" потока: сервер понизит рейтинг процесса, а запись со статусом "handler_lost" будет добавлена в логи потока
-
замена потока: запись со статусом "restart" будет добавлена в логи потока
Для типов передачи потока "tcp" или "udp" с параметром "endless" равным "true", статус не может измениться на "done".
Во время процедуры обработки любое изменение статуса потока регистрируется. Таким образом, можно восстановить процесс обработки потоков из логов.
Количество одновременных обработок потоков (статусы "pending" и "in_progress") регулируется лицензией, однако в БД LUNA Streams может храниться бесконечное множество потоков, имеющих иной статус, например, "pause".
Потоки со статусом "failure" могут быть автоматически перезапущены.
Автоматический перезапуск потоков#
Возможность автоматического перезапуска потоков актуальна только для потоков со статусом "failure". Параметры автоматического перезапуска (возможность перезапуска, максимальное количество попыток перезапуска, задержка между попытками) задаются пользователем для каждого потока в разделе "autorestart" настроек управления потоками. Параметры и статус автоматического перезапуска можно получить с помощью запроса "get stream".
Ниже перечислены статусы автоматического перезапуска:
- "disabled" - автоматический перезапуск отключен пользователем (отключен параметр "restart")
- "enabled" - автоматический перезапуск включен, но в данный момент не активен поскольку поток не находится в статуса "failure"
- "in_progress" - автоматический перезапуск в процессе
- "failed" - превышено допустимое количество попыток автоматического перезапуска и ни одна попытка не увенчалась успехом
- "denied" - автоматический перезапуск разрешен пользователем, но не разрешен из-за критической ошибки*, полученной в отчете FaceStream.
* критической ошибкой считается ошибка Failed to authorize in Luna Platform
. В будущих версиях список критических ошибок может пополняться.
Ниже описан процесс обработки потоков с включенным автоматическим перезапуском.
Когда происходит попытка автоматической перезагрузки потока данных, происходят следующие изменения:
- статус потока изменяется сначала на "restart", а затем на "pending";
- счетчик попыток автоматической перезагрузки "current_attempt" увеличивается на 1;
- запись времени последней попытки "last_attempt_time" обновляется, чтобы отразить актуальное время.
Для того чтобы произошла перезагрузка, должны соблюдаться следующие условия:
- статус потока должен находиться в состоянии "failure";
- должен быть включен автоматический перезапуск потока (параметр "restart");
- значение текущей попытки автоматической перезагрузки "current_attempt" должно быть равно "null" или меньше, чем максимальное число попыток "attempt_count";
- время последней попытки автоматической перезагрузки "last_attempt_time" должно быть равно "null" или разница между текущим временем и временем последней попытки должна быть больше или равна задержке "delay".
Если соблюдаются условия ниже, то произойдет сбой автоматического перезапуска потока (прекращение попыток перезапуска):
- статус потока находится в состоянии "failure";
- статус автоматического перезапуска потока находится в состоянии "in_progress";
- значение текущей попытки автоматической перезагрузки "current_attempt" равно значению максимального числа попыток "attempt_count".
Если соблюдаются условия ниже, то произойдет завершение работы автоматического перезапуска потока:
- статус потока не равен статусу "failure";
- статус автоматической перезагрузки потока находится в состоянии "in_progress";
- время последней попытки автоматической перезагрузки "last_attempt_time" равно "null" или разница между текущим временем и временем последней попытки больше или равна задержке "delay".
Завершение работы автоматического перезапуска потока означает смену статуса автоматической перезагрузки потока на "enabled" и сброс значений текущей попытки автоматической перезагрузки "current_attempt" и времени последней попытки автоматической перезагрузки "last_attempt_time".
Автоматическое удаление логов потоков#
При необходимости можно запустить автоматическое удаление логов потоков. Автоматическое удаление логов помогает очистить таблицу "log" базы данных LUNA Streams от большого количества ненужных логов.
Самая последняя запись для каждого потока удалена не будет.
Автоматическое удаление логов потоков настраивается с помощью нижеописанных параметров из группы параметров "LUNA_STREAMS_LOGS_CLEAR_INTERVAL":
- "interval". Задает интервал удаления логов. Логи, старше чем данный интервал, будут удалены.
- "interval_type". Задает тип интервала (недели, дни, часы, минуты, секунды).
- "check_interval". Задает частоту проверки логов на удаление (секунды).
- "active". Включает/выключает автоматическое удаление логов потоков.
По умолчанию автоматическое удаление логов выключено ("active" = false).
Значения настроек по умолчанию включают автоматическое удаление логов ("active" = true) с проверкой потоков логов в базе данных каждые 180 секунд ("check_interval" = 180) и удаляют логи старше 7 дней ("interval" = 7 и "interval_type" = days).
Пример проверки логов на удаление каждые 5 минут и удаления логов старше 4 недель:
{
"interval": 4,
"interval_type": "weeks",
"check_interval": 300,
"active": true
}
Группировка потоков#
Потоки можно группировать. Группировка призвана объединять потоки с множеством камер в логические группы. Например, можно группировать потоки по территориальному признаку.
Поток может привязан к нескольким группам.
Группа создается с помощью запроса "create group". Для создания группы нужно указать обязательные параметры "account_id" и "group_name". При необходимости можно указать описание группы.
Поток может быть привязан к группе двумя способами:
- с помощью параметров "group_name" или "group_id" во время создания потока (запрос "create stream").
- с помощью запроса "linker". В запросе необходимо указать идентификаторы потоков и группу, к которой их необходимо привязать.
С помощью запроса "linker" также можно отвязать потоки от группы.
Если поток был привязан к группе, то при запросе "get stream" или "get streams" группа будет отражена в поле "groups".
Описание базы данных LUNA Streams#
Общая схема базы данных LUNA Streams приведена ниже.
Описание данных приведено в разделе "Настройки управления потоками".
Рекомендации по настройке FaceStream#
Данный раздел содержит общие рекомендации по настройке FaceStream.
В разделе указаны названия настроек, в которых настраиваются описываемые параметры.
Рекомендации перед началом настройки#
Настройку FaceStream следует выполнять для каждой используемой камеры отдельно. FaceStream должен работать с потоком камеры, находящейся в стандартных рабочих условиях. Данные требования обусловлены следующими причинами:
- Кадры с разных видеокамер могут отличаться по:
- уровню шума,
- размеру кадра,
- освещённости,
- размытости и т. п.
- Настройки FaceStream зависят от условий освещения, поэтому будут отличаться для камер, расположенных в тёмном и светлом помещении;
- Производительность FaceStream зависит от количества лиц или тел, одновременно находящихся в кадре. Поэтому настройки для камеры, которая детектирует одно лицо в 10 секунд, будут отличаться от настроек для камеры, которая детектирует 10 лиц в секунду;
- Количество детекций лиц или тел и качество этих детекций зависят от правильного расположения камеры. Если камера расположена под неправильным углом, то объекты не будут детектироваться на кадрах или не могут быть использованы для дальнейшей обработки, например, из-за слишком больших углов поворота головы на кадрах;
- Лица или тела в зоне видимости камеры могут быть частично или полностью перекрыты посторонними предметами или на фоне могут располагаться объекты, мешающие алгоритмам распознавания.
Камера может быть расположена так, что освещение или условия съёмок изменяются в течение дня. Рекомендуется протестировать работу FaceStream при разных условиях и выбрать оптимальный режим, обеспечивающий надёжную работу FaceStream при любых условиях.
Скорость обработки кадров для видео можно задать с помощью параметра "real_time_mode_fps".
Настройка производительности FaceStream#
Описанные ниже настройки оказывают наибольшее влияние на производительность FaceStream.
Уменьшение области поиска лиц#
Не все области кадра содержат лица. Кроме того, не все лица в кадре имеют необходимый размер и качество. Например, размер лиц на заднем фоне может быть меньше допустимого, а лица по краям кадра могут иметь слишком большие углы поворота.
Параметр "roi" (настройки управления потоками, группа параметров "data"), позволяет задать прямоугольную область, в которой будет выполняться поиск лиц.
Указанная прямоугольная область вырезается из кадра и именно это изображение в дальнейшем обрабатывает FaceStream.
Чем меньше зона поиска, тем меньше ресурсов потребляется на обработку каждого кадра.
Правильное использование параметра "roi" существенно повышает производительность работы FaceStream.
Параметр необходимо использовать только при работе с лицами.
Масштабирование кадра#
Масштабирование кадра перед началом обработки позволяет значительно увеличить производительность FaceStream. Масштабирование кадра можно включается в следующих настройках:
Режим работы | Название параметра | Значение по умолчанию | Состояние по умолчанию |
---|---|---|---|
Только с детектором лиц | "minFaceSize" настроек FaceEngine | 50 (уменьшить в 2.5 раза) | Включено |
Только с детектором тел | "imageSize" настроек FaceEngine | 640 (уменьшить до 640 пикс. по наибольшей стороне) | Включено |
С детектором лиц и с детектором тел | "detector-scaling" и "scale-result-size" настроек TrackEngine | 640 (уменьшить до 640 пикс. по наибольшей стороне) | Включено |
Определение области с движением#
За определение области с движением отвечают три параметра, задаваемые в настройках TrackEngine:
- frg-subtractor - включение режим учёта перемещений в кадре;
- frg-regions-alignment - задание выравнивания для областей с движением;
- frg-regions-square-alignment - установка равных ширины и высоты области с движением.
Ниже приведены рекомендуемые значения для данных параметров при использовании CPU и GPU:
frg-subtractor | frg-regions-alignment | frg-regions-square-alignment | |
---|---|---|---|
Рекомендованное значение при использовании CPU | 1 | 0 | 0 |
Рекомендованное значение при использовании GPU | 1 | 360 | 0 |
Обработка пакетов кадров#
За пакетную обработку кадров отвечают три параметра, задаваемые в настройках TrackEngine:
- batched-processing - включение пакетной обработки кадров;
- min-frames-batch-size - минимальное количество кадров, которое следует накопить со всех камер перед обработкой;
- max-frames-batch-gather-timeout - время между обработкой пакетов кадров.
Общая информация о настройке#
Работа с треком#
Для каждого найденного лица или тела создаётся новый трек. В рамках этого трека определяются и отправляются лучшие кадры.
В общем случае трек прерывается, когда объект больше не может быть найден на кадре.
Если трек был прерван, а человек вновь появился в кадре, то для него будет создан новый трек.
Возможна ситуация, когда два лица или тела пересекаются в кадре (один человек проходит за спиной другого). В этом случае треки для обоих людей обрываются и создаются новые треки.
Возможна ситуация, когда человек отворачивается или его лицо или тело временно перекрывается. В этом случае трек можно не обрывать сразу, а указать параметр "skip-frames" в настройках TrackEngine. Он задаёт количество кадров, в течение которых система будет ожидать повторного появления объекта в области, где он исчез.
При работе с треком также полезно использовать параметр "detector-step", позволяющий указать количество кадров, на которых будет выполняться редетекция лица или тела в заданной области до выполнения детекции лица или тела.
Отправка лучшего кадра#
Группа параметров "sending" (настройки управления потоками) позволяет задать параметры для отправки лучшего кадра. FaceStream отправляет полученные лучшие снимки в LUNA PLATFORM (см. "Перечень приоритетных настроек").
Для увеличения точности распознавания можно отправлять для одного лица или тела не один, а сразу несколько лучших снимков. Для этого нужно включить параметр "number_of_bestshots_to_send" (настройки управления потоками).
LUNA PLATFORM позволяет агрегировать данные лучшие снимки и создавать на их основе биометрический шаблон более высокого качества.
Если за указанный период или до окончания трека не набралось необходимое количество лучших снимков, то отправляются только те лучшие снимки, которые были собраны.
Значения параметров "time_period_of_searching" (настройки управления потоками) и "silent_period" (настройки управления потоками) могут быть заданы в секундах или кадрах. Для выбора единиц измерения используется параметр "type".
Далее перечислены основные варианты настроек параметров "time_period_of_searching" и "silent_period" группы "sending" из настроек управления потоками.
-
Лучший снимок отправляется только после того, как трек закончился и человек вышел из зоны видимости камеры.
Таким образом анализируются все кадры с лицом или телом человека и выбирается лучший кадр.
time_period_of_searching = -1 silent_period = 0
-
Требуется получить лучший кадр как можно быстрее и отправлять лучшие снимки с указанной периодичностью.
Например, если злоумышленник зашёл в супермаркет, требуется сразу отправить лучший кадр для сравнения с чёрным списком.
Данный режим так же используется для демонстрации работы FaceStream в реальном времени.
В конце трека лучший кадр будет отправлен, даже если заданный период не закончился.
time_period_of_searching = 3 silent_period = 0
-
Требуется быстро отправить лучший кадр, а потом отправить заново, только если человек долго находится в кадре.
time_period_of_searching = 3 silent_period = 20
-
Требуется быстро отправить лучший кадр и больше никогда не отправлять с этого трека лучший кадр.
time_period_of_searching = 3 silent_period = -1
Фильтрация кадров#
Фильтрация кадров лиц выполняется по трём основным критериям (задаются в настройках для управления потоками"):
- Углам наклона головы ("detection_yaw_threshold", "detection_pitch_threshold", "detection_roll_threshold").
Для угла поворота (yaw) задаются два дополнительных параметра "yaw_number" и "yaw_collection_mode", которые позволяют уменьшить вероятность возникновения ошибки, когда вместо большого угла наклона возвращается угол "0";
-
Качеству кадра для его дальнейшей обработки ("min_score");
-
Перекрытию области рта ("mouth_occlusion_threshold").
Если кадр не прошёл фильтрацию хотя бы по одному из указанных фильтров, то он не может быть выбран в качестве лучшего кадра.
Если задан параметр "number_of_bestshots_to_send", то кадр, прошедший фильтрацию, добавляется в массив лучших снимков для отправки. Если уже набрано необходимое количество лучших снимков для отправки, то один из этих снимков, имеющий худшее качество кадра (score), будет заменён новым лучшим кадром, если его качество выше.
Фильтрация кадров тел выполняется только по одному критерию - "min_score".
Работа со СКУД#
Работа со СКУД ведется только с лицами.
При работе со СКУД используются настройки "primary_track_policy" из настроек управления потоками. Они позволяют включить режим работы только с одним лицом, размер которого является самым большим. Предполагается, что интересующее лицо находится близко к камере.
Трек самого большого лица в кадре становится главным треком. Все остальные лица в кадре детектируются, но не обрабатываются. Лучшие снимки для них не отправляются.
Как только другое лицо достигнет большего размера, чем лицо главного трека, трек этого лица станет новым главным треком и обработка будет выполняться для него.
Включение режима выполняется настройкой "use_primary_track_policy".
Определение лучшего кадра начинается только когда лицо достигает размера (по вертикали), заданного в параметре "best_shot_min_size". Кадры с лицами меньшего размера не могут стать лучшими снимками.
Когда размер детекции лица по вертикали достигает значения установленного в "best_shot_proper_size", сразу же выполняется отправка лучшего кадра.
Значения "best_shot_min_size" и "best_shot_proper_size" задаются в зависимости от используемой видеокамеры и её расположения.
Далее приведены примеры настройки параметров группы "sending" из настроек управления потоками для работы со СКУД.
- Турникет откроется только один раз. Для повторного открытия турникета потребуется оборвать трек (отойти из зоны видимости видеокамер).
time_period_of_searching = -1
silent_period = 0
- Турникет будет открываться с некоторой периодичностью (в данном случае каждые три секунды), если человек встал прямо перед ним.
time_period_of_searching = 3
silent_period = 0
При включённом параметре "use_primary_track_policy" лучший кадр никогда не отправляется при окончании трека.
Форматы, стандарты сжатия видео и протоколы#
FaceStream использует библиотеку FFMPEG для конвертации видео и получения потока с использованием различных протоколов. Далее перечислены все основные форматы, стандарты сжатия видео и протоколы, которые были протестированы при работе с FaceStream.
FFMPEG поддерживает большее количество форматов и стандартов сжатия видео. Они не перечислены в данном разделе, т. к. крайне редко используются при работе с FaceStream.
Форматы видео#
Основные форматы видео, обрабатываемые FaceStream:
- AVI,
- MP4,
- MOV,
- MKV,
- FLV.
Стандарты сжатия видео (кодеки)#
Основные стандарты сжатия видео, с которыми работает FaceStream:
- MPEG1, MPEG2, MPEG3, MPEG4,
- MS MPEG4,
- MS MPEG4v2,
- MJPEG,
- H.264,
- H.265,
- VC1,
- HEVC,
- VP8,
- VP9,
- AV1,
- другие.
Протоколы#
Основные протоколы транспортного уровня, используемые FaceStream для получения данных:
- TCP,
- UDP.
Основные протоколы прикладного уровня, используемые FaceStream для получения данных:
- HTTP (основывается на протоколе транспортного уровня TCP)
- HTTS (основывается на протоколе транспортного уровня TCP)
- RTP (основывается на протоколе транспортного уровня UDP)
- RTSP (основывается на протоколах транспортного уровня TCP или UDP)
- RTMP (основывается на протоколе транспортного уровня TCP)
- HLS (основывается на протоколе транспортного уровня TCP)
Для использования протоколов прикладного уровня, необходимо указать соответствующий протокол транспортного уровня в параметре "type" настроек управления потоками.
Потребление памяти при работе FaceStream#
В данном разделе перечислены причины увеличения потребления оперативной памяти при работе FaceStream.
-
Каждый подключенный поток даёт прирост потребления памяти. Количество потребляемой памяти зависит от настроек, заданных для FaceStream:
-
числа Ffmpeg потоков в параметре "ffmpeg_threads_number" (настройки управления потоками),
- размера кэша изображений в параметре "stream_images_buffer_max_size" (настройки FaceStream),
-
размеров буферов в параметре "frames-buffer-size" (настройки TrackEngine).
-
Если количество потоков, заданных в параметре "ffmpeg_threads_number", больше "1", то значительно увеличивается потребляемая память. При этом прирост потребления происходит крайне медленно и заметен лишь через несколько часов работы.
Для RTSP потоков можно выставить значение параметра "ffmpeg_threads_number" равным "0" или "1". В этом случае рост памяти не выявлен.
-
Потребление памяти растет после запуска FaceStream. Рост происходит в течение 1-2 часов. Это связано с наполнением кэшей (см. пункт 1). Если новые потоки не создаются и не выполняется пункт 2, то потребление памяти перестаёт расти.
-
Потребление памяти растёт при включённых настройках в секции Debug (настройки FaceStream и TrackEngine).
Интерфейс воспроизведения потока#
В FaceStream доступна возможность просмотра потока в режиме реального времени. Для просмотра потока необходимо ввести следующий адрес в браузерную строку после начала обработки потока приложением FaceStream:
http://127.0.0.1:34569/api/1/streams/preview/<stream_id>.
При появлении объектов в поле видимости камеры, FaceStream отображает их определенным образом.
Ограничивающий прямоугольник желтого цвета возникает если для детекции не пройден хотя бы один порог из "detection_yaw_threshold", "detection_pitch_threshold" или "detection_roll_threshold".
Ограничивающий прямоугольник красного цвета возникает если оценка приемлемости детекции ниже, чем значение, заданное в параметре «min_score».
Ограничивающий прямоугольник синего цвета возникает при детекции (редетекции) или трекинге объекта.
Ограничивающий прямоугольник зеленого цвета возникает во всех остальных случаях при соблюдении всех условий.
Перечень приоритетных настроек#
Для отправки фотоизображений в LUNA PLATFORM в первую очередь необходимо настроить FaceStream на работу с лицами или телами (см. настройки для переключения режима обнаружения ниже), а также настроить основные параметры, необходимые для корректной работы приложения. Все настройки разделены следующим образом:
-
Настройки FaceStream - задаются в секции "FACE_STREAM_CONFIG" в Configurator или в конфигурационном файле "fs3Config.conf".
-
Настройки управления потоками - задаются в запросе с телом в формате JSON к ресурсу "/streams" в сервис LUNA Streams.
-
Настройки TrackEngine - задаются в секции "TRACK_ENGINE_CONFIG" в Configurator или в конфигурационном файле "trackengine.conf".
См. подробное описание нижеперечисленных параметров в соответствующих разделах.
Доступны следующие общие параметры для отправки и лиц и тел:
Настройки FaceStream
Параметр | Описание |
---|---|
sending > async_requests | Позволяет переключаться между режимами асинхронной и синхронной отправки запросов в LUNA PLATFORM |
sending > send_source_frame | Позволяет включить отправку исходного кадра в LUNA PLATFORM |
sending > jpeg_quality_level | Позволяет задать степень сжатия исходного кадра |
Настройки управления потоками
Параметр | Описание |
---|---|
event_handler > frame_store | Позволяет задать URL сервиса Image Store для отправки исходного кадра |
Настройки для работы с лицами#
Основные параметры, которые должны быть указаны для отправки фотоизображений лиц в соответствующий сервис, указаны ниже.
Настройки TrackEngine
Параметр | Описание |
---|---|
use-face-detector | Позволяет обнаруживать лица - "1" |
use-body-detector | Позволяет обнаруживать тела - "0" |
Настройки FaceStream
Параметр | Описание |
---|---|
lunastreams > api_version | Позволяет задать версию API сервиса LUNA Streams для отправки запросов в LP - "1" |
lunastreams > origin | Полный сетевой путь до сервиса LUNA Streams |
sending > request_type | Тип запроса для отправки изображений в LP - "jpeg" |
sending > portrait_type | Формат передачи изображения - "warp" |
sending > aggregate_attr_requests | Позволяет включать агрегацию лучших кадров для получения одного биометрического шаблона в LUNA PLATFORM - "true" или "false" |
Настройки управления потоками
Параметр | Описание |
---|---|
data > type | Тип источника сигнала (tcp, udp, videofile, images) - "строка" |
account_id | "Luna_account_id", к которому относится выполняемый запрос - "строка в формате UUID" |
event_handler > origin | полный сетевой путь до LP 5 - "http:// |
event_handler > api_version | версия API LP 5. Поддерживается версия API - 6 |
event_handler > bestshot_handler > handler_id | обработчик LP, позволяющий гибко настроить обработку лиц - "строка в формате UUID" |
Подробную информацию об обработчиках можно найти в документации APIReferenceManual.html в комплекте поставки LUNA PLATFORM 5.
Настройки для работы с телами#
Основные параметры, которые должны быть указаны для отправки фотоизображений тел в соответствующий сервис, указаны ниже.
Настройки TrackEngine
Параметр | Описание |
---|---|
use-face-detector | Позволяет обнаруживать лица - "0" |
use-body-detector | Позволяет обнаруживать тела - "1" |
Настройки FaceStream
Параметр | Описание |
---|---|
lunastreams > api_version | Позволяет задать версию API сервиса LUNA Streams для отправки запросов в LP - "1" |
lunastreams > origin | Полный сетевой путь до сервиса LUNA Streams |
sending > aggregate_attr_requests | Позволяет включать агрегацию лучших кадров для получения одного биометрического шаблона в LUNA PLATFORM - "true" или "false" |
sending > minimal_body_track_length_to_send | Данный параметр включает отправку детекций с координатами тела человека - x, y, width и height и устанавливает количество детекций, меньше значения которого они не будут отправляться - "3" |
sending > detection_path_length | Устанавливает максимальное количество детекций для параметра "minimal_body_track_length_to_send" - "100" |
Настройки управления потоками
Параметр | Описание |
---|---|
data > type | Тип источника сигнала (tcp, udp, videofile, images) - "строка" |
account_id | "Luna_account_id", к которому относится выполняемый запрос - "строка в формате UUID" |
event_handler > origin | полный сетевой путь до LP 5 - "http:// |
event_handler > api_version | версия API LP 5. Поддерживается версия API - 6 |
event_handler > bestshot_handler > handler_id | обработчик LP, позволяющий гибко настроить обработку тел - "строка в формате UUID" |
Подробную информацию об обработчиках можно найти в документации APIReferenceManual.html в комплекте поставки LUNA PLATFORM 5.
Настройки управления потоками#
Приложение поддерживает одновременную работу с несколькими источниками потоков.
Параметры для управления потоками задаются сервисе LUNA Streams. Сервис позволяет создавать и хранить потоки в базе данных LUNA Streams.
Поддерживаются несколько типов источников:
-
tcp, udp – источники видеосигнала реального времени. Это могут быть как usb-камеры, так и IP-камеры (посредством протокола RTSP);
-
videofile – видеофайлы;
-
images – набор кадров в виде отдельных файлов изображений.
Обратите внимание, что настройки управления потоками не хранятся в сервисе LUNA Configurator и могут быть заданы только с помощью HTTP запросов к сервису LUNA Streams. Подробное описание запросов и примеры запросов можно найти в спецификации Open API LUNA Streams. Настройки LUNA Streams, задаваемые в LUNA Configurator, описаны в разделе "Настройки LUNA Streams".
account_id#
Параметр задаёт значение обязательного поля “account_id”, которое передаётся в заголовке запроса в LUNA PLATFORM 5 в сервис API.
Account ID задаётся в формате UUID4. Требования в Account ID можно найти в документации LUNA PLATFORM 5.
Параметр используется для привязки получаемых данных к конкретному пользователю.
name#
Имя потока. Служит для идентификации источника отправляемых кадров.
Записывается в поле "source" генерируемого события LP.
description#
Пользовательское описание потока.
Данный параметр не записывается в генерируемое событие LP.
data#
Ниже перечислены основные параметры, необходимые для настройки потока.
type#
Тип передачи потока. После выбора типа передачи потока, необходимо указать путь к источнику/изображениям/USB-устройству и тд. в настройке "reference".
Приложение может использовать один из следующих типов передачи потока:
- tcp - сетевой протокол транспортного уровня для приема видеоданных
- udp - сетевой протокол транспортного уровня для приема видеоданных
- images - набор кадров в виде отдельных файлов изображений
- videofile - видеофайл
В FaceStream указываются только протоколы транспортного уровня (TCP или UDP). Необходимо понимать на каком протоколе транспортного уровня базируется протокол прикладного уровня (HTTP, RTSP, HLS и др.). См. подробную информацию в разделе "Протоколы".
Протокол TCP реализует механизм контроля ошибок, позволяющий минимизировать потерю информации и пропуски опорных кадров ценой увеличения сетевой задержки. Опорные кадры являются основой различных алгоритмов сжатия, используемых в видеокодеках (например, h264). Только опорные кадры содержат достаточное количество информации для полного восстановления (декодирования) изображения, в то время как промежуточные кадры содержат лишь отличия между соседними опорными кадрами.
В условиях вещания по сети существует риск потери пакетов из-за несовершенства каналов связи. В случае потери пакета, содержащего данные опорного кадра, невозможно корректно декодировать фрагмент потока. Как следствие, возникают характерные артефакты, легко различимые визуально. Эти артефакты не позволяют детектору лиц работать в штатном режиме.
Протокол UDP не реализует механизма контроля ошибок, поэтому поток не защищен от повреждения. Использование данного протокола рекомендуется только при наличии высококачественной сетевой инфраструктуры.
При большом количестве потоков (10 и более) настоятельно рекомендуется использовать протокол UDP. При использовании протокола TCP могут возникнуть проблемы с чтением потоков.
FaceStream обрабатывает данные из типов images и videofile только один раз. После обработки всех изображений или видеофайла в логи FaceStream будет выведено сообщение о завершении обработки. Если набор изображений или видеофайлы были изменены, то необходимо перезапустить обработку потока, после чего FaceStream снова единоразово выполнит обработку всех изображений или видеофайла.
reference#
Полный путь к источнику (для типа "tcp"/"udp"):
"reference": "rtsp://some_stream_address"
Номер USB устройства (для типа "tcp"/"udp"):
"reference": "/dev/video0"
Для использования USB устройства, необходимо указать флаг
--device
с адресом USB устройства при запуске Docker-контейнера FaceStream. См. раздел "Ключи запуска" в руководстве по установке FaceStream.
Полный путь к видеофайлу (для типа "videofile"):
"reference": "/example/path/to/video/video.mp4"
Полный путь к директории с изображениями (для типа "images"):
"reference": "/example/path/to/images/"
Для использования видеофайлов и изображений необходимо их предварительно перенести в Docker-контейнер.
roi#
Данный параметр используется только для работы с лицами.
ROI задаёт область интереса в которой происходит детекция и сопровождение лица на кадре.
Указанная прямоугольная область вырезается из кадра и именно это изображение в дальнейшем обрабатывает FaceStream.
Правильное использование параметра "roi" существенно повышает производительность работы FaceStream.
Область интереса ROI на исходном кадре задается параметрами "x", "y", "width", "height" и "mode", где:
- "x" и "y" – координаты верхней левой точки области интереса ROI;
- "width" и "height" - ширина и высота обрабатываемой области кадра;
- "mode" – режим указания "x", "y", "width" и "height". Доступно два режима:
- "abs" - параметры "x", "y", "width" и "height" задаются в пикселях;
- "percent" - параметры "x", "y", "width" и "height" задаются в процентах от текущего размера кадра.
Если поле "mode" не указывается в теле запроса, то будет использовано значение "abs".
При значениях ширины и высоты, равных "0", областью интереса считается весь кадр.
Система координат на изображении задается аналогично рисунку ниже.
Ниже приведен пример расчета ROI в процентах:
droi#
Данный параметр используется только для работы с лицами.
Параметр задаёт область интереса внутри области ROI. Детектирование лиц выполняется в области ROI, но лучший кадр выбирается только в области DROI. Детекция лица должна полностью находиться внутри области DROI, чтобы кадр рассматривался в качестве лучшего. Ни одна сторона детекции не должна выступать из области DROI даже на миллиметр.
DROI рекомендуется использовать при работе со СКУД и при включённом режиме "use_mask_liveness_filtration".
Например, если рядом стоит несколько турникетов и каждый из них должен искать лицо только в небольшой зоне и одновременно осуществлять проверку Liveness. Использование DROI позволяет ограничить область для определения лучшего кадра и при этом не терять информацию о заднем плане.
Область интереса DROI на исходном кадре задается параметрами "x", "y", "width", "height" и "mode", где:
- "x" и "y" – координаты верхней левой точки области интереса DROI;
- "width" и "height" - ширина и высота обрабатываемой области кадра;
- "mode" – режим указания "x", "y", "width" и "height". Доступно два режима:
- "abs" - параметры "x", "y", "width" и "height" задаются в пикселях;
- "percent" - параметры "x", "y", "width" и "height" задаются в процентах от текущего размера кадра.
Если поле "mode" не указывается в теле запроса, то будет использовано значение "abs".
При расчете DROI нужно учитывать то, что данная область интереса рассчитывается относительно исходного кадра, а не относительно ROI.
Если размер ROI изменяется, а размер DROI остаётся в значении по умолчанию (0, 0, 0, 0), то DROI не учитывается. Если изменить размер DROI, то он будет учитываться при выборе лучшего кадра.
Ниже приведен пример расчета DROI в процентах:
rotation#
Угол поворота изображения с источника. Используется в случае, если входящий поток повернут, например, если камера установлена на потолке. Поворот выполняется по часовой стрелке.
preferred_program_stream_frame_width#
Данный параметр используется только для типов tcp или udp и предназначен для работы с протоколами, в которых подразумевается наличие нескольких каналов с разными битрейтами и разрешением (например, HLS).
Если у потока существует несколько таких каналов, то данный параметр позволит выбрать из всех каналов цельного потока тот канал, ширина кадра которого ближе к значению, указанному в данном параметре.
Например, имеется 4 канала, ширины кадров которых равны 100, 500, 1000 и 1400. Если параметр "preferred_program_stream_frame_width" равен "800", то будет выбран канал, ширина кадра которого равняется 1000.
Если у потока всего один канал, то данный параметр будет игнорироваться.
Значение по умолчанию равно 800.
endless#
Данный параметр позволяет управлять перезагрузкой потока при получении ошибки сети (ошибка определяется системой как маркер конца файла eof
).
Параметр доступен только для типов источника сигнала "udp" и "tcp".
Если параметр endless
принимает значение true
, то в случае получения eof
и успешного переподключения, обработка потока будет продолжена. Если все попытки переподключения не удались (см. группу параметров "healthcheck"), то поток примет статус "failure". Если же параметр принимает значение false
, то обработка потока не будет продолжена и поток примет статус "done".
При трансляции видеофайла предполагается использование значения false
. Это позволит избежать повторной обработки уже обработанного фрагмента видеофайла при получении eof
. Если же при трансляции видеофайла значение параметра endless
будет true
, то после окончания обработки видеофайл начнет обрабатываться с начала.
mask#
Параметр Mask используется только для типа images и является обязательным параметром.
Маска имён файлов в директории с изображениями. Маска позволяет FaceStream понять, какие файлы из указанной директории следует использовать и в каком порядке.
Если задать маску “Img_%02d.jpg”, то FaceStream будет обрабатывать файлы, имена которых состоят из: Префикс (Img_) + двузначное число (%02d) + формат (.jpg)
Изображения, подходящие под маску, будут обрабатываться по очереди изображения:
- Img_00.jpg
- Img_01.jpg
- Img_02.jpg
- Img_03.jpg
Другой пример маски – Photo-%09d.jpg. Подходящие под маску файлы:
- Photo-000000000.jpg
- Photo-000000001.jpg
- Photo-000000002.jpg
- Photo-000000003.jpg
FaceStream обрабатывает файлы по порядку нумерации и не пропускает несуществующие файлы. Если следующий по нумерации файл отсутствует, FaceStream прекращает обработку.
Указанная в примере маска “example1_%04d.jpg” приведёт к обработке изображений, название которых состоит из префикса example1_ и порядкового номера кадра размером в 4 символа (например: example1_0001.jpg, example1_0002.jpg и т. д.).
"mask": "example1_%04d.jpg"
event_handler#
Данная группа параметров определяет параметры обработчика, создаваемого в LUNA PLATFORM, с помощью которого будут обрабатываться потоки. Для лиц и тел следует использовать различные обработчики. Обработчик должен быть создан в LP 5 заранее.
Подробную информацию об обработчиках см. в руководстве администратора LUNA PLATFORM.
origin#
Полный сетевой путь к сервису API развернутой LUNA PLATFORM, включающую сервисы LUNA Handlers и LUNA Events, необходимые для генерации события по обработчику.
"origin": "http://luna_address:port/"
luna_address
- адрес сервиса LUNA API,
port
- порт, используемый сервисом API. По умолчанию - 5000.
api_version#
Версия API для генерации события в LUNA PLATFORM. На настоящий момент поддерживается 6 версия API.
bestshot_handler > handler_id#
Параметр позволяет использовать внешний статический "handler_id" LUNA PLATFORM для обработки биометрических образцов лиц или тел по заданным правилам. При использовании данного обработчика, LUNA PLATFORM генерирует событие, которое содержит всю информацию, полученную из FaceStream и обрабатывает её в соответствии с правилами обработки.
Обработчик должен быть создан в LP 5 заранее.
frame_store#
В данном параметре задаётся URL для сохранения исходных кадров лиц или тел в LUNA PLATFORM 5.
В качестве URL можно указать либо адрес до бакета сервиса LUNA Image Store, либо адрес к ресурсу "/images" сервиса LUNA API. При указании адреса к ресурсу "/images", исходный кадр будет сохранен под идентификатором "image_id".
Для отправки кадра следует включить опцию send_source_frame.
Пример адреса до бакета сервиса LUNA Image Store:
"frame_store": "http://127.0.0.1:5020/1/buckets/<frames>/images"
127.0.0.1
- IP адрес, где развернут сервис LUNA Image Store;
5020
- порт сервиса LUNA Image Store по умолчанию;
1
- версия API сервиса LUNA Image Store;
<frames>
- имя бакета сервиса LUNA Image Store, в котором нужно сохранить изображение лица или тела. Бакет должен быть создан пользователем предварительно.
Пример команды создания бакета с именем "source-images":
curl -X POST http://127.0.0.1:5020/1/buckets?bucket=source-images
Пример адреса к ресурсу "/images" сервиса LUNA API:
"frame_store": "http://127.0.0.1:5000/6/images"
127.0.0.1
- IP адрес, где развернут сервис LUNA API;
6
- версия API сервиса LUNA API;
5000
- порт сервиса API по умолчанию.
См. дополнительную информацию о бакетах и ресурсе "/images" в руководстве администратора LUNA PLATFORM 5.
authorization#
В данной группе параметров задаются либо token, либо account_id для выполнения запросов к сервису LUNA API.
Параметр event_handler
> authorization
> account_id
должен совпадать с параметром account_id
, задаваемом в запросе. Если поле авторизации не заполнено, то будет использован идентификатор account_id
, задаваемый при создании потока (см. account_id).
См. подробную информацию об авторизации LUNA PLATFORM в руководстве администратора LUNA PLATFORM 5.
policies#
sending#
В данной группе параметров определяется период, в течении которого будет проводиться анализ кадров для выбора лучшего кадра, а также определяются все параметры, связанные с составлением коллекции лучших кадров.
"sending": {
"time_period_of_searching": -1,
"silent_period" : 0,
"type" : "sec",
"number_of_bestshots_to_send": 1
"send_only_full_set": true
"delete_track_after_sending" false
},
time_period_of_searching#
Период анализа кадров, по истечении которого будет отправлен лучший кадр (период начинается с момента появления человека в кадре - первой детекции). Уменьшение этого параметра позволяет быстрее определять личность, но с большей погрешностью.
Тип измерения задается в параметре "type" (см. ниже). Если значение равно "-1" (по умолчанию), то анализ кадров проводится по всем кадрам до конца трека. По окончании трека (когда объект покидает пределы кадра) лучший кадр будет отправлен во внешний сервис.
silent_period#
Период ожидания, когда предыдущий анализ кадров завершился, а новый ещё не начался.
Тип измерения задается в параметре "type (см. ниже). Если значение равно "-1", то период ожидания будет длиться бесконечно.
type#
Параметр задаёт тип измерения для параметров "silent_period" и "time_period_of_searching". Может принимать два значения - "frames" (кадры) или "sec" (секунды).
number_of_bestshots_to_send#
Количество лучших снимков, которое пользователь хочет получить с трека или с какого-то промежутка времени на этом треке. Использование данного параметра предполагает создание коллекции из лучших снимков трека или временного отрезка трека, заданном в параметре "time_period_of_searching". Эта коллекция будет отправлена в LP.
Увеличение значения повышает вероятность правильного распознавания объекта, но сказывается на загруженности сети.
send_only_full_set#
Данный параметр используется только для работы с телами.
Позволяет отправлять данные только если набрано требуемое количество лучших снимков (параметр "number_of_bestshots_to_send" настроек FaceStream) и детекций с координатами тела человека (параметр "minimal_body_track_length_to_send" настроек FaceStream).
delete_track_after_sending#
Данный параметр используется только для работы с телами.
Позволяет удалять лучшие кадры и детекции с координатами тела человека после отправки данных. Если значение равно "false" (по умолчанию), то данные останутся в памяти.
primary_track_policy#
Данная группа параметров используется только для работы с лицами.
Данная группа параметров предназначена для работы с Системами Контроля Управления Доступом (СКУД, турникеты на входах в банки/ офисные здания) для упрощения контроля и внедрения технологии распознавания лиц при входе на охраняемую территорию. Данная группа параметров не используется для типа "images".
Часто вместе с политикой Главного Трека используется Liveness. См. диаграмму активности FaceStream при использовании Liveness и Primary Track Policy.
use_primary_track_policy#
Если значение этого параметра "true", то включается режим реализации Главного Трека (Primary Track). Логика работы заключается в следующем:
Из всех детекций на кадре выбирается максимальная по размеру детекция и её трек становится главным. На основе этого трека выполняется дальнейший анализ. Лучший кадр из этого трека отправляется в LUNA PLATFORM.
Все остальные треки обрабатываются в обычном режиме, но отправка лучшего кадра в LUNA PLATFORM происходит только для главного трека.
Как только другое лицо достигнет большего размера, чем лицо главного трека, трек этого лица станет новым главным треком и обработка будет выполняться для него.
При использовании параметра на контрольно-пропускном пункте будут отправляться лучшие снимки только того человека, который находится ближе всего к турникету (выполняется условие возникновения самой большой детекции).
best_shot_min_size#
Параметр используется при включенном параметре "use_primary_track_policy".
Задаёт минимальную высоту детекции в пикселях, при котором начинается анализ кадров и определение лучшего кадра.
best_shot_proper_size#
Параметр используется при включенном параметре "use_primary_track_policy".
Задаёт высоту детекции в пикселях для Главного Трека. Когда размер детекции достигает указанного значения, FaceStream определяет лучшие снимки до окончания трека, а затем отправляет их в LP.
liveness#
Данная группа параметров используется только для работы с лицами.
Liveness используется для проверки наличия живого человека в кадре и предотвращает использование распечатанного фото или фото с телефона для прохождения проверки.
Данную группу параметров рекомендуется использовать только по согласованию с сотрудниками VisionLabs.
Данная группа параметров не используется для типа "images".
Общие рекомендации по использованию Liveness#
Liveness предназначен для применения только на автоматических контрольно-пропускных пунктах. Это сценарий, когда человек не задерживается перед камерой дольше десяти секунд.
Liveness позволяет минимизировать шанс прохода мошенника, использующего распечатанное фотоизображение другого человека или фотоизображение другого человека на телефоне.
В процессе работы Liveness возвращает значение, которое определяет степень уверенности системы в том, что в кадре живой человек. Значение находится в интервале от 0 до 1.
Требования к установке камеры
Для стабильной работы Liveness при установке камеры должны быть выполнены следующие условия:
-
Лицо не должно выходить за пределы кадра. При этом расстояние от левого и правого краёв кадра должно быть больше или равно ширине найденного лица, а расстояние от верхнего и нижнего краёв кадра должно быть больше или равно высоте найденного лица;
-
Кадр должен включать не только лицо, но и область груди;
-
Камера должна быть расположена на уровне пояса и направлена на человека снизу вверх;
-
Желательно, чтобы в кадр не попадали прямоугольные объекты (такие как оконные и дверные проёмы), обрамляющие область лица с четырёх сторон.
Пример правильного расположения камеры приведён на изображении ниже.
При правильном расположении камеры уже на расстоянии в 3-4 метра FS начнёт собирать кадры и выбирать лучший снимок.
Посторонние объекты и люди, не проходящие через турникет, не попадают в зону видимости камеры.
FS выполнит отправку лучшего снимка, когда человек находится на расстоянии 1 метр от камеры. На этом расстоянии лицо достигнет необходимого размера для отправки.
Ниже приведён пример неправильного расположения камеры.
При неправильно настроенной камере:
- Человек попадает в кадр слишком поздно. FS не успевает получить необходимое количество кадров для обработки;
- Человек смотрит в камеру сверху вниз. Это ухудшает качество кадра для последующей обработки;
- В зону видимости камеры попадает пространство за пределами зоны интереса. В этом пространстве могут находиться люди или объекты, мешающие корректной работе FS.
Рекомендации по настройке FS
Рекомендуемые значения параметров секции "Liveness" приведены ниже.
"use_mask_liveness_filtration": true,
"use_flying_faces_liveness_filtration": true,
"liveness_mode": 1,
"number_of_liveness_checks": 10,
"liveness_threshold": 0.8,
"livenesses_weights": [0.0, 0.25, 0.75],
"mask_backgrounds_count": 300
Данные настройки не рекомендуется изменять.
Параметр "best_shot_min_size" следует устанавливать из расчета, что человек находится на расстоянии 3-4 метра до турникета.
Параметр "best_shot_proper_size" следует устанавливать из расчета, что человек находится на расстоянии 1 метр до турникета.
Для контроля выбора нужного человека используется параметр "droi". Прямоугольник выбирается так, чтобы люди, имеющие намерение подойти к данному турникету, попали в прямоугольник как можно раньше. Это актуально для турникетов, расположенных близко к друг другу. Люди из соседних очередей могут попадать в зону видимости камер таких турникетов.
FAQ Liveness
При использовании Liveness обработка потока работает медленно
При разрешении камеры 1920х1080 и выше Mask Liveness работает медленно.
Для решения проблемы следует вручную уменьшить разрешение в камере до 720p. Это не скажется на качестве распознавания и работе Liveness, т.к. они работают без потери качества с лицами, размер которых примерно равен 100 пикселям.
Люди не могут пройти проверку Liveness при настройках FS по умолчанию
Возможные причины:
- Настройки в секции Liveness по умолчанию были изменены.
Не следует изменять настройки в секции Liveness, кроме настройки "liveness_threshold".
Значение параметра "liveness_threshold" можно уменьшить, но оно не должно быть ниже "0.6".
- Liveness применяется не для целевого случая.
FS Liveness не предназначен для процессов авторизации и случаев долгого нахождения перед камерой.
- В зону видимости камеры попадают недопустимые объекты.
Например, если на заднем фоне находится экран, транслирующий видео, Liveness работать не будет.
- Для камеры задано неподходящее разрешение.
Проверьте разрешение камеры. См. "При использовании Liveness обработка потока работает медленно".
- Происходит задержка передачи кадров.
Если камера не передаёт кадры в реальном времени, то кадры могут поступать с задержкой.
- Значение "best_shot_min_size" задано неправильно.
При завышенном параметре "best_shot_min_size" Liveness не успевает накопить нужное число разнообразных кадров.
Часто вместе с Liveness используется политика Главного Трека. См. диаграмму активности FaceStream при использовании Liveness и Primary Track Policy.
use_mask_liveness_filtration#
Параметр включает режим проверки наличия человека в кадре, основанный на работе с фоном.
Скорость выполнения проверки зависит от размера кадров потока. Если при включённом параметре скорость обработки уменьшается, необходимо уменьшить разрешение видео в настройках камеры (например, до 1280х720).
use_flying_faces_liveness_filtration#
Параметр включает режим проверки наличия человека в кадре, основанный на работе с окружением лица.
liveness_mode#
Параметр позволяет задать, для каких кадров трека будет проводиться проверка Liveness. Есть три варианта выбора кадров:
-
0 - Первые N кадров;
-
1 - Последние N кадров перед отправкой лучшего кадра (рекомендуемое значение);
-
2 - Все кадры трека.
Значение N задаётся в параметре number_of_liveness_checks.
number_of_liveness_checks#
Параметр позволяет задать количество кадров в треке для проверки Liveness при использовании параметра liveness_mode.
Не рекомендуется выставлять значение меньше 10.
liveness_threshold#
В данном параметре можно задать пороговое значение, при котором система будет считать, что в кадре живой человек. Система выдаст вердикт, что в кадре присутствует настоящий человек, только если Liveness вернул значение выше заданного порогового значения.
Рекомендуемое значение - "0.8". Не рекомендуется задавать значение ниже "0.6".
livenesses_weights#
Параметр определяет коэффициент влияния проверки каждого типа (mask и flying_faces) на итоговую оценку наличия живого человека в кадре.
Пользователь указывает две величины, относящихся к разным типам liveness в следующем порядке:
- Use_shoulders_liveness_filtration (Deprecated. Любое значение будет считаться 0.0),
- Use_mask_liveness_filtration,
- Use_flying_faces_liveness_filtration.
Величины указываются в долях единицы. В приведенном ниже примере (являющимся настройкой по умолчанию) цифра 0.0 ни на что не указывает, т.к. проверка Use_shoulders_liveness_filtration объявлена как Deprecated, 0.25 - 25% на mask_liveness и 0.75 - 75% на flying_faces_liveness. Соотношение всегда масштабируется исходя из данных цифр вне зависимости от того составляют ли они единицу и какие из методов liveness включены.
"livenesses_weights": [0.0, 0.25, 0.75]
mask_backgrounds_count#
Количество кадров фона, которые используются для соответствующей проверки.
Изменение данного параметра запрещено.
filtering#
Группа параметров описывает объекты фильтрации изображений и отправки результирующих лучших кадров.
"filtering": {
"min_score": 0.5187,
"detection_yaw_threshold": 40,
"detection_pitch_threshold": 40,
"detection_roll_threshold": 30,
"yaw_number": 1,
"yaw_collection_mode": false,
"mouth_occlusion_threshold" : 0.0
},
min_score#
Параметр задает порог для фильтрации отправляемых детекций лиц или тел.
Значение данного параметра зависит от сценария работы FaceStream - с лицами или с телами.
Режим работы с лицами
Для каждой детекции вычисляется AGS (Approximate Garbage Score) и общее качество.
Детекции, у которых значение AGS меньше, чем значение, указанное в пороге "min_score" не будут считаться приемлимыми для дальнейшей работы. Далее по отфильтрованным детекциям будут выбраны лучшие снимки в соответствии с общим качеством детекции.
Если в параметре "min_score" задано значение "0", то лучшие снимки будут определены по общему качеству детекций.
Значение по умолчанию - 0.5187.
Режим работы с телами
Для каждой детекции вычисляется общее качество.
Детекции, у которых общее качество меньше, чем значение, указанное в пороге "min_score" не будут считаться приемлимыми для дальнейшей работы. Далее по отфильтрованным детекциям будут выбраны лучшие снимки.
Если в параметре "min_score" задано значение "0", то лучшие снимки будут определены по качеству детекций.
Значение по умолчанию - 0.5.
Рекомендуемые значения порогов были выявлены путем проведения исследований и анализа детекций на различных изображениях лиц и тел.
detection_yaw_threshold#
Данный параметр используется только для работы с лицами.
Параметр задаёт максимальное значение угла поворота головы вправо и влево относительно камеры.
Если угол поворота головы на кадре больше заданного значения, то кадр считается неприемлемым для дальнейшей обработки.
Для отключения фильтрации необходимо задать значение "180".
detection_pitch_threshold#
Данный параметр используется только для работы с лицами.
Параметр задаёт максимальное значение угла наклона головы вниз и вверх относительно камеры.
Если угол наклона головы на кадре больше заданного значения, то кадр считается неприемлемым для дальнейшей обработки.
Для отключения фильтрации необходимо задать значение "180".
detection_roll_threshold#
Данный параметр используется только для работы с лицами.
Параметр задаёт максимальное значение угла наклона головы влево и вправо относительно камеры.
Если угол наклона головы на кадре больше заданного значения, то кадр считается неприемлемым для дальнейшей обработки.
Для отключения фильтрации необходимо задать значение "180".
yaw_number#
Данный параметр используется только для работы с лицами.
Параметр определяет количество кадров, используемых для фильтрации фотоизображений по углу поворота (yaw angle) головы. Фильтрация отсекает изображения с сильно повернутыми от камеры лицами.
Как это работает:
В параметре задаётся количество кадров. Специальный алгоритм анализирует угол поворота головы на каждом из этих кадров. Если угол резко отличается от среднего значения в группе, то кадр не будет рассматриваться в качестве лучшего кадра.
Пример: Установим значение параметра "7", то есть будут рассмотрены 7 кадров. Представим, что на шести кадрах из семи посчитали, что угол поворота головы относительно камеры находится в диапазоне 50 - 60 градусов, а на седьмом кадре значение угла равно 0. Такое резкое изменение угла поворота головы за такой короткий промежуток времени невозможно, и, скорее всего, угол на седьмом кадре определен неверно. Седьмой кадр будет отсечен и не будет отправлен на внешний сервис в качестве лучшего кадра.
По умолчанию параметр выключен, значение равно "1". Рекомендуемое значение – "7".
yaw_collection_mode#
Данный параметр используется только для работы с лицами.
Параметр указывает системе, что необходимо собрать заданное в параметре "yaw_number" количество кадров для анализа угла поворота (yaw angle) головы.
Если параметр "yaw_collection_mode" отключен, то система будет последовательно проводить анализ поступающих кадров, т. е. сначала проводится анализ двух кадров, затем трех и т. д. Максимальное количество кадров этой последовательности задано в "yaw_number".
По умолчанию параметр отключён.
Цель работы параметров "yaw_number" и "yaw_collection_mode" — увеличить точность определения лучшего кадра из всего трека.
mouth_occlusion_threshold#
Данный параметр используется только для работы с лицами.
Параметр определяет максимальную степень перекрытия рта у лица в кадре.
Например, при значении параметра равном "0.5" допускается перекрытие 50% области рта.
Если полученное значение превышает указанный порог, изображение считается неприемлемым для дальнейшей обработки. зк
Фильтрация проводится при значении параметра "0.3" и выше. При значении ниже фильтрация отключена.
min_body_size_threshold#
Параметр задает размер детекции тела, меньше которого она не будет отправлена на обработку. Размер высчитывается как квадратный корень из произведения ширины (в пикселях) на высоту (в пикселях) детекции.
Пример: min_body_size_threshold = sqrt (64*128) = 90.5
Если значение равно "0", то фильтрация детекции тела по размеру выполняться не будет.
frame_processing_mode#
Параметр используется только для типов "tcp", "udp" и "videofile".
Параметр аналогичен convert_full_frame, но задаётся для конкретного экземпляра FaceStream.
При значении "full" кадр сразу конвертируется в RGB изображение необходимого размера после декодирования. При этом получается изображение лучшего качества, снижается скорость обработки кадров.
При значении "scale" масштабирование изображения выполняется в зависимости от настроек TrackEngine (стандартное поведение для релизов 3.2.4 и ниже).
По умолчанию задано значение "auto". В этом случае один из двух режимов выбирается автоматически.
real_time_mode_fps#
Параметр используется только для типа "videofile".
Параметр позволяет задать количество FPS, с которым будет обработан видеопоток.
Если у видео высокое значение FPS и FaceStream не может работать с заданным количеством кадров в секунду, то кадры будут пропускаться.
Таким образом, видеофайл имитирует поток с реальной видеокамеры. Это может быть полезно при настройке производительности. Видео будет проигрываться с выбранной скоростью, что удобно для нагрузочного тестирования и последующего анализа.
Параметр не используется, если выставлено значение "0".
ffmpeg_threads_number#
Параметр позволяет задать количество потоков для декодирования видео с помощью FFMPEG.
При увеличении числа потоков увеличивается число ядер процессора, задействованных в декодировании. Увеличение числа потоков рекомендуется при обработке видео высокого разрешения (4K и выше).
health_check#
Данная группа параметров используется только при работе с потоками ("tcp", "udp") и видеофайлами ("videofile").
В данной группе можно задать параметры повторного подключения к потоку при возникновении ошибок проигрывания потока.
max_error_count#
Максимальное количество ошибок при воспроизведении потока.
Параметр работает совместно с параметрами "period" и "retry_delay". После получения первой ошибки, выполняется ожидание, заданное в параметре "retry_delay", а затем выполняется повторная попытка подключения к потоку. Если за время, указанное в параметре "period", было накоплено количество ошибок большее или равное количеству, указанному в "max_error_count, то обработка потока будет прекращена и его статус изменится на "failure".
Ошибки могут быть вызваны проблемой с сетью или доступностью видео.
period#
Задаёт время в секундах, за которое ведётся подсчёт ошибок.
Параметр работает совместно с параметрами "retry_delay и "max_error_count. См. описание работы с данным параметром в разделе "max_error_count".
retry_delay#
Задаёт время в секундах, по истечении которого выполняется повторная попытка подключения к потоку.
Параметр работает совместно с параметрами "period и "max_error_count. См. описание работы с данным параметром в разделе "max_error_count".
timeout#
Задаёт таймаут в миллисекундах на чтение закодированного пакета.
Благодаря этому параметру можно обеспечить более гибкую обработку видеопотока, контролировать скорость чтения видеопакетов и предотвращать переполнение буфера данных.
location#
Данная группа параметров включает информацию о расположении источника видеосигнала.
- "city" - город
- "area" - область
- "district" - район
- "street" - улица
- "house_number" - номер дома
- "geo_position" - географическое положение, включает в себя параметры "latitude" (широта) и "longitude" (долгота)
Географическое положение считается заданным правильно, если заданы долгота и широта.
Параметр send_location_data
регулирует отправку расположения источника видеосигнала.
"location": {
"send_location_data" : false,
"city": "Moscow",
"area": "CAO",
"district": "Arbat",
"street": "Arbat",
"house_number": "37",
"geo_position": {
"longitude": 36.616,
"latitude": 55.752
}
}
autorestart#
Данная группа параметров позволяет настроить автоматический перезапуск потока. Доступно три параметра:
- restart - следует ли использовать автоматический перезапуск потока
- attempt_count - количество попыток автоматического перезапуска потока (по умолчанию 10)
- delay - задержка автоматического перезапуска потока, в секундах (по умолчанию 60 секунд)
См. подробную информацию о работе автоматического перезапуска потока в разделе "Автоматический перезапуск потоков".
status#
Состояние на момент начала обработки. Доступно два состояния - "pending" (ожидание) "pause" (пауза).
Кроме двух состояний на момент начала обработки также доступны другие состояния, возникающие в процессе работы FaceStream (см. раздел "Распределение потоков").
group_name и group_id#
Параметры привязки потока к группе. Можно указать либо "group_id", либо "group_name".
Настройки, задаваемые в сервисе LUNA Configurator#
В сервисе LUNA Configurator хранятся общие настройки для:
Для подробной информации о взаимодействии сервиса LUNA Configurator и FaceStream см. в разделе "Использование FaceStream с LUNA Configurator".
Настройки FaceStream#
Конфигурирование параметров FaceStream осуществляется с помощью редактирования параметров в секции "FACE_STREAM_CONFIG" в сервисе Configurator (см. раздел "Использование FaceStream с Configurator");
Также можно настроить FaceStream с помощью редактирования конфигурационного файла "fs3Config.conf" в режиме работы без сервиса Configurator (см. раздел "Использование FaceStream с конфигурационными файлами").
Далее приведены настройки, разбитые на логические блоки в зависимости от основных выполняемых блоком функций.
logging#
Секция с настройками логирования работы приложения. Она отвечает за вывод сообщений об ошибках или о текущем состоянии приложения.
severity#
Severity – параметр определяет информацию, которую пользователь хочет получать в логах. Доступны следующие фильтры информации:
0 – выводить всю информацию,
1 – выводить только предупреждения системы,
2 – выводить только ошибки.
tags#
Теги позволяют получить информацию о процессе обработки кадров и возникающих ошибках только для интересующих процессов FaceStream.
Данный параметр позволяет перечислить теги, которые связаны с логированием соответствующей информации. Если тег не указан, то соответствующая информация не логируется.
Информация по указанным тегам выводится в соответствии со значением параметра severity.
Текст логов содержит соответствующий тег. Его можно использовать для фильтрации логов.
Ошибки пишутся в лог всегда, для них не нужно задавать дополнительные теги.
Описание тегов
Тег | Описание |
---|---|
streams | Информация, связанная с работой сервиса LUNA Streams |
common | Общая информация |
ffmpeg | Информация о работе библиотеки FFMPEG |
liveness | Информация, связанная с проверкой наличия живого человека в кадре (секция «liveness): достаточно ли информации о проверке liveness и проходит ли кадр проверку liveness |
primary-track | Информация о главном треке (секция «primary_track_policy): прошёл ли кадр указанные пороги и какой трек является главным |
bestshot | Информация, связанная с выбором лучшего кадра: информация о появлении лучшего кадра, его смене, отправке лучшего кадра |
angles | Информация о фильтрации по углам наклона головы |
ags | Информация, связанная с оценкой качества кадров для дальнейшей обработки с помощью LUNA PLATFORM |
mouth-occlusion | Информация о перекрытии лица в кадре |
statistics | Информация о производительности, количестве обрабатываемых кадров в секунду и количестве пропущенных кадров |
http_api | Информация об API запросах, отправленных в FaceStream, и получаемых ответах |
client | Информация об отправке запросов в LUNA PLATFORM и полученных ответах |
json | Информация об обработке параметров из конфигурационных файлов и сервиса Configurator |
debug | Отладочная информация. Следует использовать данный тег только при отладке, а не при эксплуатации FS, т. к. выводится большое количество отладочной информации |
estimator | Информация о статистике выполненных оценок. |
Тег "estimator"
При включении тега "estimator" в логах FaceStream возвращается информация по размеру батчей, с которыми вызывались эстиматоры. Пример содержимого логов с включенным тегом "estimator":
[I0609 15:48:03.779697 65 EstimatorStatistic.cpp:85] [estimator] Batch statistic for estimator HeadPoseEstimator
Total calls: 1311 total time: 191 ms.
sz cnt
1 1311 (100.00%)
2 0 (0.00%)
3 0 (0.00%)
...
16 0 (0.00%)
В данном случае, статистика показывает следующее:
- всего было сделано 1311 вызова к эстиматору "HeadPoseEstimator", на которые ушло 191 миллисекунд;
- все вызовы (1311) были обработаны индивидуально, каждый в своем батче размером 1;
- батчи с размерами от 2 до 16 не были использованы.
Если эстиматоры не вызывались, то в логах FaceStream не будет выведено никакой информации.
mode#
Mode – параметр задаёт режим логирования приложения: файл или консоль. Существует три режима:
-
"l2c" – выводить информацию только в консоль,
-
"l2f" – выводить информацию только в файл,
-
"l2b" – выводить информацию в оба места.
В режиме работы FaceStream с конфигурационными файлами можно настроить директорию для сохранения логов при выводе информации в файл с помощью параметра запуска --log-dir
.
sending#
Данный раздел описывает настройку отправки готовых портретов в виде HTTP-запросов из FaceStream во внешние сервисы.
request_type#
Данный параметр используется только для работы с лицами.
Данный параметр определяет тип запроса для отправки портретов во внешние сервисы. Поддерживаются 2 типа запросов:
-
"jpeg" используется для отправки биометрических образцов в VisionLabs LUNA PLATFORM;
-
"json" может использоваться для отправки портретов в сторонние пользовательские сервисы для дальнейшей обработки.
Подробное описание запросов см. в таблице.
Запросы
Формат | Тип запроса | Заголовки авторизации | Тело |
---|---|---|---|
JSON | PUT | Authorization: Basic, login/password(Base64) | Media type: application/json ; frame – исходный кадр в Base64 (если установлен параметр send_source_frame); data – портрет в Base64; identification – значение параметра Cid. Пример JSON: {frame":"","data":"image_in_base_64","identification":"camera_1"} |
JPEG | POST | Authorization: Basic, login/password(Base64) или X-Auth-Token: 11c59254-e83f-41a3-b0eb-28fae998f271(UUID4) | Media type: image/jpeg |
request_timeout_ms#
Данный параметр задает таймаут отправки и получения событий из/в LUNA PLATFORM в миллисекундах.
Значение по умолчанию - 30 секунд (30000 миллисекунд).
portrait_type#
Данный параметр используется только для работы с лицами.
Данный параметр определяет формат, в котором изображение детектированного лица отправляется во внешний сервис. Возможные значения:
-
«warp – использовать биометрический образец, трансформированный под определённые требования;
-
«gost – не использовать трансформацию, вырезать детекцию из исходного кадра с учетом отступов.
Характеристики биометрического образца:
-
имеет размер 250х250 пикселей;
-
лицо отцентрировано на изображении;
-
лицо повернуто так, чтобы условная линия, соединяющая уголки глаз, была приближена к горизонтальной.
Такой формат изображения при использовании совместно с LUNA PLATFORM дает следующие преимущества:
-
постоянный предсказуемый минимальный объем данных для передачи по сети;
-
фазы детектирования лица в LUNA PLATFORM автоматически отключаются для таких изображений, что приводит к значительному снижению времени обработки запроса.
send_source_frame#
Данный параметр позволяет отправить исходный кадр, на котором было детектировано лицо или тело.
Исходный кадр можно сохранять как в бакет сервиса LUNA Image Store, так и в ресурс "/images" сервиса LUNA API. Способ сохранения исходного кадра задается с помощью указания соответствующего адреса в параметре "frame_store".
Для коллекции лучших снимков ("number_of_bestshots_to_send" > 1) отправляется только один исходный кадр, который определяется FaceStream как лучший из всех лучших снимков. Например, если значение настройки "number_of_bestshots_to_send" = 3, то в LP будет отправлено три лучших снимка и только один исходный кадр, который будет автоматически выбран из трех лучших снимков.
Если предполагается сохранять исходный кадр в бакет сервиса LUNA Image Store, то кадр будет отправлен в LP за некоторое время до отправки лучшего снимка. Сначала он сохраняется в БД LUNA Events и ему назначается уникальный идентификатор, который хранится в поле "image_origin" таблицы "face_detect_result"/"body_detect_result". Далее в LP отправляется лучший снимок и генерируется событие, где в поле "image_origin" указывается ID исходного кадра, взятого из БД LUNA Events.
Пример из тела ответа события об успешном сохранении в бакет:
"events": [
detections": [
"image_origin": "/1/buckets/source-images/images/83c383d8-8af4-406c-8ff8-76eb389e61c8"
Если предполагается сохранять исходный кадр в ресурс "/images", то кадр будет отправлен вместе с лучшим снимком с помощью схемы "multipart/form-data" запроса на генерацию события LUNA PLATFORM.
Пример из тела ответа события об успешном сохранении в ресурс "/images" сервиса LUNA API:
"events": [
detections": [
"image_origin": "/6/images/19c5c40a-04e4-4f2b-811c-0f3bb0003359"
Если же в поле "image_origin" содержится адрес вида "/6/samples/faces/c93f39f1-809c-4583-b386-c166cecac333", то это значит, что речь идет об адресе сохранения лучшего снимка, а не исходного изображения.
size_source_frame#
Параметр изменяет ширину исходного кадра до заданного значения. Допустимый диапазон - [0...1024]. Значение "0" означает, что ширина не будет меняться. Дробная часть задаваемого числа игнорируется.
FaceStream отправляет в LUNA PLATFORM заголовок X-Luna-Meta-rescale
, который содержит коэффициент масштабирования исходного изображения в форме числа с плавающей запятой.
Коэффициент масштабирования позволяет вычислить реальные координаты отмасштабированного исходного изображения. Для этого необходимо разделить размер полученного изображения на полученный коэффициент масштабирования.
Примечание. Реальный размер рассчитывается с абсолютной погрешностью менее 1 / (2 * коэффициент масштабирования).
Например, полученное изображение имеет размер 200x113, а коэффициент масштабирования равен 0.104399, тогда реальный размер исходного изображения равен 1916x1082 (200/0.104399=1916, 113/0.104399=1082).
Коэффициент масштабирования можно найти в LUNA PLATFORM:
- в заголовке ответа на запрос "get image" к сервису LUNA API. Запрос должен быть выполнен с параметром запроса
with_meta = 1
- в файле "image_id.meta.json", расположенном рядом с исходным изображением в бакете исходных изображений хранилища LUNA Image Store
Заголовок X-Luna-Meta-rescale
отправляется только если включена отправка исходного кадра (параметр send_source_frame = 1
). В обработчике LUNA PLATFORM также должна быть включена политика сохранения исходного изображения.
Если для исходного кадра не выставлено масштабирование (параметр size_source_frame = 0
), то значение заголовка ответа X-Luna-Meta-rescale
будет равно 1.
detection_path_length#
Данный параметр используется только для работы с телами.
Данный параметр устанавливает максимальное количество детекций для параметра "minimal_body_track_length_to_send".
Максимальное количество детекций не может превышать 100. Если детекций больше 100, то алгоритм FaceStream удалит лишние детекции с некоторым шагом.
minimal_body_track_length_to_send#
Данный параметр используется только для работы с телами.
Данный параметр позволяет вместе с лучшими снимками отправлять заданное количество детекций с координатами тела человека - x, y, width и height (см. запрос "save event" в спецификации OpenAPI LUNA PLATFORM). По наборам детекций тела человека можно определить его путь.
Детекция, у которой есть лучший снимок обязательна к отправке.
Если количество детекций меньше заданного значения, то эти детекции не будут отправлены. Например, если количество детекций равно "3", а значение "minimal_body_track_length_to_send" равно "4", то детекции не будут отправлены и в логах FaceStream отобразится следующее сообщение:
Track is too short and will not be sent. Length 3 < 4
Если значение параметра равно "0", то количество детекций будет равно количеству лучших снимков.
async_requests#
Данный параметр позволяет указать, как следует выполнять запросы в LUNA PLATFORM – асинхронно или синхронно.
По умолчанию выставлен асинхронный режим, при котором все запросы в LUNA PLATFORM выполняются параллельно.
aggregate_attr_requests#
Данный параметр позволяет включать агрегацию лучших кадров для получения одного биометрического шаблона в LUNA PLATFORM.
Агрегация выполняется, если отправляется больше одного лучшего кадра. Количество кадров для отправки задаётся параметром "number_of_bestshots_to_send".
Точность распознавания лиц и тел при использовании агрегированного биометрического шаблона выше.
jpeg_quality_level#
Качество JPEG для отправки исходных кадров:
- 'best' - сжатие изображения не выполняется
- 'good' - 75% исходного качества изображения
- 'normal' - 50% исходного качества изображения
- 'average' - 25% исходного качества изображения
- 'bad' - 10% исходного качества изображения
Качество 'best' выставлено по умолчанию.
Отправка изображений в высоком качестве может влиять на скорость обработки кадров.
lunastreams#
Данный раздел описывает настройку отправки готовых портретов в виде HTTP-запросов из FaceStream в сервис LUNA Streams.
См. подробную информацию о работе LUNA Streams с FaceStream в разделе "Взаимодействие FaceStream с LUNA Streams".
origin#
Адрес и порт сервера, где запущен сервис LUNA Streams.
api_version#
В параметре задаётся версия API сервиса LUNA Streams. На настоящий момент поддерживается 1 версия API.
Актуальную версию API всегда можно найти в документации сервиса API.
max_number_streams#
В параметре задаётся верхняя граница количества потоков FS. Значение должно быть больше 0.
request_stream_period#
В параметре задаётся временной промежуток между запросами на получение новых потоков из LUNA Streams в диапазоне от 0.1 до 3600 секунд.
Значение по умолчанию - 1 секунда.
send_feedback_period#
В параметре задаётся временной промежуток между отправкой отчётов об обработанных потоках в LUNA Streams в диапазоне от 1.0 до 3600 секунд.
Значение по умолчанию - 5 секунд.
Значение данного параметра не должно превышать значение параметра "STREAM_STATUS_OBSOLETING_PERIOD", задаваемого в настройках сервиса LUNA Streams.
max_feedback_delay#
Параметр задаёт максимальную задержку отправки отчёта в диапазоне от 1.0 до 3600 секунд. Если отчёт не был отправлен за данное время, то FaceStream остановит обработку текущих потоков.
Значение данного параметра не должно быть меньше, чем значение параметра "send_feedback_period" и не должно превышать значение параметра "STREAM_STATUS_OBSOLETING_PERIOD", задаваемого в настройках сервиса LUNA Streams.
Значение по умолчанию - 10 секунд.
performance#
stream_images_buffer_max_size#
Параметр задаёт максимальный размер буфера изображений для одного потока.
При увеличении значения параметра повышается производительность FaceStream. Чем выше заданное значение, тем больше памяти требуется для работы.
Параметр рекомендуется выставить равным 40 при работе с GPU, если достаточно памяти GPU.
enable_gpu_processing#
Параметр позволяет включить использование GPU вместо CPU для вычислений.
Использование GPU позволяет ускорить вычисления, но при этом увеличивается потребление оперативной памяти.
Вычисления с использованием видеокарты поддерживаются только для детектора FaceDetV3. См. параметр "defaultDetectorType" в настройках FaceEngine ("faceengine.conf").
convert_full_frame#
Если данный параметр включён, то кадр сразу конвертируется в RGB изображение необходимого размера после декодирования. При этом получается изображение лучшего качества, но снижается скорость обработки кадров.
Если параметр выключен, то масштабирование изображения выполняется в зависимости от настроек TrackEngine (стандартное поведение для релизов 3.2.4 и более ранних).
Параметр аналогичен параметру frame_processing_mode, но задаётся сразу для всех экземпляров FaceStream.
monitoring#
В данной группе параметров задаются настройки мониторинга.
storage_type#
Данный параметр позволяет выбрать тип хранения данных для мониторинга. На данный момент можно использовать только базу данных Influx.
send_data#
Данный параметр включает отправку мониторинга. По умолчанию отключен.
organization#
Данный параметр задает рабочую область InfluxDB 2.x.
Рабочая область задается с помощью передачи соответствующего аргумента при старте контейнера InfluxDB.
bucket#
Данный параметр задает бакет InfluxDB 2.x.
Бакет задается с помощью передачи соответствующего аргумента при старте контейнера InfluxDB. Его можно также создать с помощью пользовательского интерфейса Influx.
token#
Параметр задаёт токен аутентификации InfluxDB 2.x.
Токен задается с помощью передачи соответствующего аргумента при старте контейнера InfluxDB.
origin#
Параметр задаёт IP-адрес и порт сервера с InfluxDB 2.x.
По умолчанию используется адрес "127.0.0.1". Такой адрес означает, что будет использоваться InfluxDB 2.x, расположенный на сервере с LUNA Configurator. Если InfluxDB 2.x находится на ином сервере, то в данном параметре нужно указать корректный IP-адрес InfluxDB 2.x.
"origin": "http://127.0.0.1:8086/"
flushing_period#
Параметр задаёт частоту отправки данных мониторинга в InfluxDB (в секундах).
По умолчанию используется 1 секунда.
Настройки TrackEngine#
Данный раздел описывает параметры TrackEngine, которые используются для настройки FaceStream.
Конфигурирование параметров TrackEngine осуществляется с помощью редактирования параметров в секции "TRACK_ENGINE_CONFIG" в сервисе Configurator (см. раздел "Использование FaceStream с Configurator").
Также можно настроить TrackEngine с помощью конфигурационного файла "trackengine.conf" в режиме работы без сервиса Configurator (см. раздел "Использование FaceStream с конфигурационными файлами").
use-face-detector и use-body-detector#
Данные параметры позволяют сменить детекцию лиц на тела и наоборот. Одновременная детекция лиц и тел невозможна.
Необходимо помнить, что для успешной смены детекции нужно задать соответствующие настройки FaceStream и настройки источников потоков.
<!-- use-face-detector: Flag to use or not face detection -->
<param name="use-face-detector" type="Value::Int1" x="1" />
<!-- use-body-detector: Flag to use or not body detection -->
<param name="use-body-detector" type="Value::Int1" x="0" />
detector-step#
Параметр "detector-step" позволяет указать количество кадров, на которых будет выполняться редетекция лица или тела в заданной области до выполнения детекции лица или тела. Редетекция требует меньше ресурсов, но объект может быть потерян при задании большого количества кадров для редетекции.
<!-- detector-step: The count of frames between frames with full detection, [0 .. 30] ('7' by default). -->
<param name="detector-step" type="Value::Int1" x="7" />
detector-scaling#
Параметр "detector-scaling" позволяет масштабировать кадр перед обработкой. Размер кадра для масштабирования задается в параметре "scale-result-size".
См. подробную информацию о масштабировании в разделе "Масштабирование кадра".
<!-- detector-scaling: Scale frame before detection for performance reasons, [0, 1] ('0' by default). -->
<param name="detector-scaling" type="Value::Int1" x="0" />
scale-result-size#
Параметр "scale-result-size" задаёт максимальный размер кадра после масштабирования по наибольшей из сторон кадра.
Для работы данного параметра необходимо включить параметр "detector-scaling".
Если исходный кадр имел размер 1920 на 1080 и значение "scale-result-size" равно 640, то FaceStream будет обрабатывать кадр размером 640 на 360. Для подбора оптимального значения "scale-result-size" следует постепенно уменьшать масштаб кадра и проверять, происходит ли на кадре детектирование лиц или тел. Следует выставить минимальный размер изображения, при котором все объекты в интересующей области детектируются.
Если кадр был обрезан с помощью параметра "roi", то масштабирование будет применено к этому уменьшенному кадру. В этом случае значение "scale-result-size" следует задавать в зависимости от наибольшей стороны области ROI.
На изображениях ниже приведены примеры детекций для кадра разрешением 1920x1080 и для того же кадра после его масштабирования до разрешения 960x640. Шесть лиц найдено на изображении с разрешением 1920x1080.
Три лица найдено после масштабирования изображения до разрешения 960x640. Лица на заднем плане меньше по размеру и имеют низкое качество.