Видеодетекция лиц: 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, детектор лиц выбирает лучшее изображение лица динамически:
    1. Сначала оценивается качество изображения лица. Если оно превышает некое предустановленное пороговое значение, то лицо отправляется в findface-facerouter.
    2. Порог повышается после каждой отправки изображения лица в findface-facerouter. Каждый раз, когда детектор лиц получает изображение того же лица лучшего качества, оно отправляется.
    3. При исчезновении лица из поля зрения видеокамеры снова устанавливается пороговое значение по умолчанию.

По умолчанию режим реального времени отключен (параметр realtime=false в файле конфигурации /etc/findface-video-manager.conf).

Буферный режим

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

Буферный режим включен по умолчанию (параметр overall=true в файле конфигурации /etc/findface-video-manager.conf).

Настройка видеодетекции лиц

Настройка видеодетектора лиц выполняется через следующие файлы конфигурации:

  1. Файл конфигурации компонента 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 (отправка как полных кадров, так и нормализованных изображений).
  1. Если вы выбрали пакет 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-задание.