Видеодетекция лиц: findface-video-manager
и findface-video-worker
¶
Примечание
Компонент findface-video-worker
поставляется в пакетах с ускорением на CPU (findface-video-worker-cpu
) и GPU (findface-video-worker-gpu
).
В этом разделе:
Функции findface-video-manager
¶
Сервис findface-video-manager
является частью модуля видеодетекции лиц и используется для непосредственного управления детекцией лиц на видео.
Сервис findface-video-manager
взаимодействует с findface-video-worker
следующим образом:
- Обеспечивает
findface-video-worker
настройками и списком видеопотоков для обработки. Для этого он выдаетfindface-video-worker
так называемое job-задание, задачу на обработку видео, которая содержит параметры конфигурации и сведения о видеопотоке. - В распределенной системе распределяет видеопотоки (job-задания) по свободным экземплярам
findface-video-worker
.
Примечание
Параметры конфигурации, передаваемые через job-задания, имеют больший приоритет, чем аналогичные параметры в файле конфигурации findface-video-manager
.
Для работы findface-video-manager
требуется установленный сервис ETCD. ETCD представляет собой стороннее программное обеспечение, реализующее распределенное хранилище ключей findface-video-manager
. Используется в качестве координационной службы в распределенной системе, обеспечивая отказоустойчивость работы видеодетектора лиц.
Полный список функций findface-video-manager
:
- конфигурирование параметров видеодетектора лиц,
- управление списком видеопотоков для обработки,
- управление видеодетекцией лиц.
Функции findface-video-worker
¶
Компонент findface-video-worker
(или findface-video-worker-gpu
) является частью модуля видеодетекции лиц и служит для обнаружения лиц «на лету» в видеопотоке или видеофайле. Он поддерживает большинство видеоформатов и кодеков, которые могут быть декодированы FFmpeg.
Сервис findface-video-worker
взаимодействует с сервисами findface-video-manager
и findface-facerouter
следующим образом:
- По запросу
findface-video-worker
получает отfindface-video-manager
job-задание с настройками и списком видеопотоков для обработки. - Сервис
findface-video-worker
отправляет полученные нормализованные изображения лиц вместе с полными кадрами и метаданными, такими как рамка вокруг лица, ID камеры и время детекции, в сервисfindface-facerouter
для дальнейшей обработки.
Примечание
В FindFace Security функции findface-facerouter
выполняются сервисом findface-security
.
Полный список функций findface-video-manager
:
- обнаружение лиц на видео,
- извлечение нормализованных изображений лиц,
- поиск наилучшего изображения лица,
- дедупликация кадров с лицом (только один кадр на каждое событие распознавания лица).
При обработки видео findface-video-worker
последовательно использует следующие алгоритмы:
- Детектор движения. Данный алгоритм позволяет снизить потребление ресурсов, поскольку детектор лиц включается только по движению в кадре.
- Детектор лиц. Алгоритм детектирует, отслеживает и захватывает лица на видео. Может работать одновременно с несколькими лицами в кадре. С помощью встроенной нейронной сети выполняет поиск кадра с лучшим изображением лица. Как только лучшее изображение найдено, отправляет его в компонент
findface-facerouter
.
Подбор лучшего изображения лица может быть выполнен в одном из следующих режимов:
- Режим реального времени
- Буферный режим
Режим реального времени
В режиме реального времени findface-video-worker
начинает отправлять в компонент findface-facerouter
изображения лица сразу после появления лица в поле зрения видеокамеры.
- Если параметр
rt-perm=True
, детектор лиц выбирает лучший кадр в течение каждого из последовательных промежутков времени, равныхrt-delay
, и отправляет его вfindface-facerouter
. - Если
rt-perm=False
, детектор лиц выбирает лучшее изображение лица динамически:- Сначала оценивается качество изображения лица. Если оно превышает некое предустановленное пороговое значение, то лицо отправляется в
findface-facerouter
. - Порог повышается после каждой отправки изображения лица в
findface-facerouter
. Каждый раз, когда детектор лиц получает изображение того же лица лучшего качества, оно отправляется. - При исчезновении лица из поля зрения видеокамеры снова устанавливается пороговое значение по умолчанию.
- Сначала оценивается качество изображения лица. Если оно превышает некое предустановленное пороговое значение, то лицо отправляется в
По умолчанию режим реального времени отключен (параметр realtime=false
в файле конфигурации /etc/findface-video-manager.conf
).
Буферный режим
Буферный режим требует меньший объем дискового пространства по сравнению с режимом реального времени, поскольку для каждого лица компонент findface-video-worker
отправляет только одно изображение из трека, но наивысшего качества.
Буферный режим включен по умолчанию (параметр overall=true
в файле конфигурации /etc/findface-video-manager.conf
).
Настройка видеодетекции лиц¶
Настройка видеодетектора лиц выполняется через следующие файлы конфигурации:
Файл конфигурации компонента
findface-video-manager
/etc/findface-video-manager.conf
:listen: :18810 etcd: endpoints: 127.0.0.1:2379 dial_timeout: 3s kafka: enabled: false endpoints: 127.0.0.1:9092 master: lease_ttl: 10 self_url: 127.0.0.1:18811 self_url_http: 127.0.0.1:18810 rpc: listen: 127.0.0.1:18811 heart_beat_timeout: 4s router_url: http://127.0.0.1:18820/v0/frame exp_backoff: enabled: false min_delay: 1s max_delay: 1m0s factor: 2 flush_interval: 2m0s ntls: enabled: false url: http://127.0.0.1:3185/ update_interval: 1m0s prometheus: jobs_processed_duration_buckets: - 1 - 30 - 60 - 500 - 1800 - 3600 - 21600 - .inf job_scheduler_script: "" stream_settings: ffmpeg_params: [] md_threshold: 0.002 md_scale: 0.3 fd_frame_height: -1 uc_max_time_diff: 30 uc_max_dup: 3 uc_max_avg_shift: 10 det_period: 8 realtime: false npersons: 4 disable_drops: false tracker_threads: 4 parse_sei: false image_arg: photo additional_headers: [] additional_body: [] api_timeout: 15000 api_ssl_verify: true post_uniq: true min_score: -2 min_d_score: -1000 realtime_dly: 500 realtime_post_perm: false rot: "" roi: "" draw_track: false send_track: 0 min_face_size: 0 max_face_size: 0 overall: true only_norm: false max_candidates: 0 jpeg_quality: 95 ffmpeg_format: "" stream_settings_gpu: play_speed: -1 filter_min_quality: -2 filter_min_face_size: 1 filter_max_face_size: 8192 normalized_only: false jpeg_quality: 95 overall_only: false use_stream_timestamp: false ffmpeg_params: [] router_timeout_ms: 15000 router_verify_ssl: true router_headers: [] router_body: [] start_stream_timestamp: 0 imotion_threshold: 0 rot: "" roi: "" realtime_post_interval: 1 realtime_post_every_interval: false ffmpeg_format: "" disable_drops: true router_full_frame_png: false router_disable_normalized: false
Пользовательская настройка
findface-video-manager
выполняется с использованием следующих параметров:
Опция Описание router_url
IP-адрес и порт сервера findface-facerouter
, который получает обнаруженные лица изfindface-video-worker
. В FindFace Security функцииfindface-facerouter
выполняет компонентfindface-security
. Значение по умолчанию:http://127.0.0.1:18820/v0/frame
.etcd
->endpoints
IP-адрес и порт сервиса etcd
. Значение по умолчанию:127.0.0.1:2379
.ntls
->enabled
Если true
, компонентfindface-video-manager
отправляет в компонентfindface-video-worker
задания только на обработку того количества видеокамер, которое указано в лицензии. Значение по умолчанию:false
.ntls
->url
IP-адрес и порт сервера findface-ntls
. Значение по умолчанию:http://127.0.0.1:3185/
.Вы также можете использовать следующие параметры:
Примечание
В разделе файла
stream_settings-gpu
вы найдете настройки, общие для всех видеопотоков. Настройки в данном разделе работают как в GPU, так и CPU-конфигурации. Настройки определенного потока, переданные в job-задании, имеют приоритет над настройками в файле конфигурации (см. Job-задания).Примечание
Раздел
stream_settings
файла устарел и необходим только для обратной совместимости.
Опция Описание play_speed
Если меньше нуля, то скорость не ограничивается. В остальных случаях поток читается со скоростью play_speed
. Не применимо для потоков с камер видеонаблюдения.filter_min_quality
Минимальное значение качества изображения лица, отправляемого компонентом findface-video-worker
в компонентfindface_facerouter
(findface-security
в стандартной конфигурации FindFace Security). Значение определяется эмпирически: отрицательные рациональные числа до 0. Реперные точки: 0 = наиболее качественные лица, -1 = хорошее качество, -2 = удовлетворительное качество, -5 = последующее распознавание лиц может быть неэффективным. Значение по умолчанию: -2.filter_min_face_size
Определяет минимальный размер лица в пикселях. Лица меньшего размера не отправляются. Значение по умолчанию: 0 (фильтр выключен). filter_max_face_size
Определяет максимальный размер лица в пикселях. Лица большего размера не отправляются. Значение по умолчанию: 0 (фильтр выключен). normalized_only
Включает/отключает отправку только нормализованных лиц без исходных кадров. Значение по умолчанию: false. jpeg_quality
Качество сжатия исходного кадра в JPEG. Значение по умолчанию: 95 % от исходного размера. overall_only
Буферный режим. Отправлять для лица один кадр наилучшего качества. Значение по умолчанию: true. use_stream_timestamp
Если true, отправлять на сервер временные метки полученные из потока. Если false, отправлять текущие дату и время. ffmpeg_params
Список ffmpeg-параметров видеопотока со значениями в виде массива ключ=значение: [“rtsp_transpotr=tcp”, .., “ss=00:20:00”]. Полный список параметров на сайте FFMPEG. Значение по умолчанию: параметры не указаны. router_timeout_ms
Время ожидания в миллисекундах ответа от компонента findface-facerouter
(findface-security
в стандартной конфигурации FindFace Security) на API-запрос компонентаfindface-video-worker
. Если время ожидания истекло, регистрируется ошибка. Значение по умолчанию: 15000.router_verify_ssl
Включает/отключает проверку подписи SSL-сертификата при взаимодействии по https findface-video-worker
с компонентомfindface-facerouter
(findface-security
в стандартной конфигурации FindFace Security). Значение по умолчанию: true. Если false, может быть принят самоподписанный сертификат.router_headers
Массив дополнительных заголовков в POST-запросе с изображением лица в формате [“ключ=значение”]. По умолчанию дополнительные заголовки не передаются. router_body
Массив дополнительных полей в POST-запросе с изображением лица в формате [“ключ=значение”]. По умолчанию дополнительные поля не передаются. start_stream_timestamp
Прибавлять указанное количество секунд к временным меткам из потока. imotion_threshold
Минимальная интенсивность движения, которая будет регистрироваться детектором движения. Пороговое значение определяется эмпирически. Реперные точки: 0 = детектор выключен, 0.002 = значение по умолчанию, 0.05 = минимальная интенсивность слишком высока, чтобы зарегистрировать движение. rot
Включает детектирование и отслеживание лиц только внутри заданной прямоугольной области WxH+X+Y. Используйте данную опцию, чтобы уменьшить нагрузку на findface-video-worker
. По умолчанию область не задана.roi
Включает отправку на Сервер лиц, обнаруженных только внутри интересующей области WxH+X+Y. По умолчанию область не задана. realtime_post_interval
Только для режима реального времени. Если realtime_post_perm=True
, период времени в миллисекундах, в течение которого детектор лиц выбирает лучший кадр и отправляет его в компонентfindface-facerouter
. Еслиrealtime_post_perm=False
, максимальный период времени в миллисекундах между двумя последовательными отправками одного и того же лица, но в улучшенном качестве. Значение по умолчанию: 500.realtime_post_every_interval
Только для режима реального времени. Включает отправку лучшего кадра в течение периода времени realtime_dly
. Если false, лучший кадр ищется динамически иrealtime_dly
представляет собой максимальный период времени между двумя последовательными отправками одного и того же лица, но в улучшенном качестве. Значение по умолчанию: false.ffmpeg_format
Передает формат FFMPEG (mxg, flv и т. д.), если он не может быть автоматически определен. disable_drops
Включает/отключает отправку в компонент findface-facerouter
всех подходящих лиц без пропусков. По умолчанию, еслиfindface-video-worker
не обладает достаточными ресурсами для обработки всех кадров с лицами, он отбрасывает некоторые из них. Если данная опция активна,findface-video-worker
помещает лишние кадры в очередь, чтобы обработать их впоследствии. Значение по умолчанию: false.router_full_frame_png
Отправлять полные кадры в формате PNG, а не в формате JPEG, как установлено по умолчанию. Не включайте этот параметр, не посоветовавшись с нашей командой, так как он может повлиять на работу всей системы. Значение по умолчанию: false (отправлять в формате JPEG). router_disable_normalized
Отправлять только полные кадры без нормализованных изображений. Не включайте этот параметр, не посоветовавшись с нашей командой, так как он может повлиять на работу всей системы. Значение по умолчанию: false (отправка как полных кадров, так и нормализованных изображений).
Если вы выбрали пакет
findface-video-worker-cpu
с ускорением на CPU, используйте файл конфигурации/etc/findface-video-worker-cpu.ini
:## read streams from file, do not use VideoManager input = ## exit on first finished job, only when --input specified exit_on_first_finished = false ## batch size batch_size = 4 ## http server port for metrics, 0=do not start server metrics_port = 0 ## resize scale, 1=do not resize resize_scale = 1.000000 ## maximum number of streams capacity = 10 ## command to obtain videomanager's grpc ip:port mgr_cmd = ## videomanager grpc ip:port mgr_static = 127.0.0.1:18811 ## ntls server ip:port ntls_addr = 127.0.0.1:3133 ## debug: save faces to dir save_dir = ## minimum face size min_face_size = 60 ## preinit detector for specified resolutions: "640x480;1920x1080" resolutions = ## worker labels: "k=v;group=enter" labels = ## use timestamps from SEI packet use_time_from_sei = false #------------------------------ [streamer] #------------------------------ ## streamer/shots webserver port, 0=disabled port = 18999 ## streamer url - how to access this worker on streamer_port url = 127.0.0.1:18999 #------------------------------ [liveness] #------------------------------ ## path to liveness fnk fnk = ## liveness threshold threshold = 0.945000 ## liveness internal algo param interval = 1.000000 ## liveness internal algo param stdev_cnt = 1 #------------------------------ [send] #------------------------------ ## posting faces threads threads = 8 ## posting faces maximum queue size queue_limit = 256 #------------------------------ [tracker] #------------------------------ ## max face miss duration, sec miss_interval = 1.000000 ## overlap threshold overlap_threshold = 0.250000 #------------------------------ [models] #------------------------------ ## path to detector fnk detector = /usr/share/findface-data/models/facedet/mtcnn.cpu.fnk ## path to quality fnk quality = /usr/share/findface-data/models/faceattr/quality.v0.cpu.fnk ## path to norm for quality fnk norm_quality = /usr/share/findface-data/models/facenorm/ant.v2.cpu.fnk ## path to norm200 fnk, for face send norm_200 = /usr/share/findface-data/models/facenorm/ant.v2.cpu.fnk ## path to norm_crop2x fnk, for face send norm_crop2x = /usr/share/findface-data/models/facenorm/crop2x.v2_maxsize400.cpu.fnk
Если вы выбрали пакет
findface-video-worker-gpu
с ускорением на GPU, используйте файл конфигурации/etc/findface-video-worker-gpu.ini
.## cuda device number device_number = 0 ## old gpu detector models directory models_dir = /usr/share/findface-gpudetector/models ## read streams from file, do not use VideoManager input = ## exit on first finished job, only when --input specified exit_on_first_finished = false ## batch size batch_size = 8 ## http server port for metrics, 0=do not start server metrics_port = 0 ## resize scale, 1=do not resize resize_scale = 1.000000 ## maximum number of streams capacity = 30 ## command to obtain videomanager's grpc ip:port mgr_cmd = ## videomanager grpc ip:port mgr_static = 127.0.0.1:18811 ## ntls server ip:port ntls_addr = 127.0.0.1:3133 ## debug: save faces to dir save_dir = ## minimum face size min_face_size = 60 ## preinit detector for specified resolutions: "640x480;1920x1080" resolutions = ## worker labels: "k=v;group=enter" labels = ## use timestamps from SEI packet use_time_from_sei = false #------------------------------ [streamer] #------------------------------ ## streamer/shots webserver port, 0=disabled port = 18999 ## streamer url - how to access this worker on streamer_port url = 127.0.0.1:18999 #------------------------------ [liveness] #------------------------------ ## path to liveness fnk fnk = ## liveness threshold threshold = 0.945000 ## liveness internal algo param interval = 1.000000 ## liveness internal algo param stdev_cnt = 1 #------------------------------ [send] #------------------------------ ## posting faces threads threads = 8 ## posting faces maximum queue size queue_limit = 256 #------------------------------ [tracker] #------------------------------ ## max face miss duration, sec miss_interval = 1.000000 ## overlap threshold overlap_threshold = 0.250000 #------------------------------ [models] #------------------------------ ## path to detector fnk detector = ## path to quality fnk quality = ## path to norm for quality fnk norm_quality = ## path to norm200 fnk, for face send norm_200 = /usr/share/findface-data/models/facenorm/ant.v2.gpu.fnk ## path to norm_crop2x fnk, for face send norm_crop2x = /usr/share/findface-data/models/facenorm/crop2x.v2_maxsize400.gpu.fnk ## path to cache directory cache_dir = #------------------------------ [video_decoder] #------------------------------ ## decode video on cpu cpu = false
Пользовательская настройка
findface-video-worker
на CPU/GPU выполняется с использованием следующих параметров:CPU GPU Описание ntls-addr
IP-адрес и порт сервера findface-ntls
.mgr-static
IP-адрес сервера findface-video-manager
, который обеспечиваетfindface-video-worker
настройками и списком видеопотоков для обработки.capacity
Максимальное количество видеопотоков, обрабатываемых findface-video-worker
.mgr-exec
Возможность подключить скрипт, описывающий динамическое изменение адреса компонента findface-videomanager-api
(вместоmgr-static
).labels
Метки, используемые для привязки экземпляра findface-video-worker
к определенной группе камер. См. Привязка группы камер к экземпляру findface-video-worker.Н/п fnk
Путь к детектору живых лиц (Liveness). input
Обрабатывать видеопотоки из файла, игнорируя данные потоков, поступающие от findface-video-manager
.exit_on_first_finished
(Только если указан input
) Выйти после завершения первого job-задания.resize_scale
Масштабировать видеокадры с заданным коэффициентом. save_dir
(Для отладки) Сохранять обнаруженные лица в заданный каталог. min_face_size
Минимальный обнаруживаемый размер лица. resolutions
Предварительно инициализируйте findface-video-worker
для конкретных разрешений, чтобы ускорить его работу.Н/п device_number
Номер используемого GPU-устройства. Н/п models_dir
Старый каталог с моделями GPU-детектора. В противном случае используйте данные из секции [models]
.Н/п cpu
При необходимости декодировать видео на CPU.
Job-задания¶
Сервис findface-video-manager
выдает findface-video-worker
так называемое job-задание, задачу на обработку видео, которая содержит параметры конфигурации и сведения о видеопотоке.
Содержимое типичного job-задания показано в примере ниже.
curl http://127.0.0.1:18810/job/1 | jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1771 100 1771 0 0 447k 0 --:--:-- --:--:-- --:--:-- 576k
{
"id": "1",
"enabled": true,
"stream_url": "rtmp://restreamer.int.ntl/cams/openspace",
"labels": {},
"router_url": "http://172.17.46.13/video-detector/frame",
"single_pass": false,
"stream_settings": {
"ffmpeg_params": [],
"md_threshold": 0.002,
"md_scale": 0.3,
"fd_frame_height": -1,
"uc_max_time_diff": 30,
"uc_max_dup": 3,
"uc_max_avg_shift": 10,
"det_period": 8,
"realtime": false,
"npersons": 4,
"disable_drops": false,
"tracker_threads": 4,
"parse_sei": false,
"image_arg": "photo",
"additional_headers": [
"Authorization=Token b612396adc3a6dd71b82b5fe333a0a30"
],
"additional_body": [],
"api_timeout": 15000,
"api_ssl_verify": true,
"post_uniq": true,
"min_score": -2,
"min_d_score": -1000,
"realtime_dly": 500,
"realtime_post_perm": false,
"rot": "",
"roi": "",
"draw_track": false,
"send_track": 0,
"min_face_size": 0,
"max_face_size": 0,
"overall": true,
"only_norm": false,
"max_candidates": 0,
"jpeg_quality": 95,
"ffmpeg_format": ""
},
"stream_settings_gpu": {
"play_speed": -1,
"filter_min_quality": -2,
"filter_min_face_size": 1,
"filter_max_face_size": 8192,
"normalized_only": false,
"jpeg_quality": 95,
"overall_only": false,
"use_stream_timestamp": false,
"ffmpeg_params": [],
"router_timeout_ms": 15000,
"router_verify_ssl": true,
"router_headers": [
"Authorization=Token b612396adc3a6dd71b82b5fe333a0a30"
],
"router_body": [],
"start_stream_timestamp": 0,
"imotion_threshold": 0,
"rot": "",
"roi": "",
"realtime_post_interval": 1,
"realtime_post_every_interval": false,
"ffmpeg_format": "",
"disable_drops": true
"router_full_frame_png": false,
"router_disable_normalized": false
},
"status": "INPROGRESS",
"status_msg": "",
"statistic": {
"processed_duration": 14879,
"faces_posted": 777,
"faces_failed": 3,
"faces_not_posted": 1206,
"processing_fps": 18.816668,
"frames_dropped": 0,
"frames_processed": 0,
"frames_imotion_skipped": 0,
"decoding_soft_errors": 0,
"job_starts": 56
},
"restream_url": "",
"worker_id": "ffsec40_213ab8c0ed5d954e",
"version": "bl068taaa7tcafrfsmq0"
}
Каждое job-задание имеет следующие параметры:
id
: id job-задания.enabled
: статус активности.stream_url
: URL/адрес видеопотока или файла для обработки.labels
: метки, по которым будет осуществляться обработка обнаруженных лиц в компонентеfindface-facerouter
(findface-security
в стандартной конфигурации FindFace Security).single_pass
: если true (по умолчанию false), то не перезапускать обработку потока в случае ошибки.router_url
: IP-адрес и порт компонентаfindface-facerouter
(findface-security
в стандартной конфигурации FindFace Security), в который компонентfindface-video-worker
отправляет обнаруженные лица для последующей обработки.stream_settings
: используется только для обратной совместимости.stream_settings_gpu
: параметры видеопотока, дублирующие параметры в файле конфигурацииfindface-video-manager
(обладая при этом приоритетом).status
: статус job-задания.status_msg
: дополнительная информация о статусе job-задания.statistic
: статистика выполнения job-задания (продолжительность процесса обработки, количество отправленных и неотправленных лиц, кадровая частота обработки, количество обработанных и пропущенных кадров, время начала обработки и т. д.).worker_id
: id экземпляраfindface-video-worker
, выполняющего job-задание.