Видеодетекция лиц: findface-video-manager и findface-video-worker

Примечание

Компонент findface-video-worker поставляется в пакетах с ускорением на CPU (findface-video-worker) и 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-mananger требуется установленный сервис ETCD. ETCD представляет собой стороннее программное обеспечение, реализующее распределенное хранилище ключей findface-video-mananger. Используется в качестве координационной службы в распределенной системе, обеспечивая отказоустойчивость работы видеодетектора лиц.

Полный список функций 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:

    etcd:
      dial_timeout: 3s
      endpoints: 127.0.0.1:2379
    exp_backoff:
      enabled: false
      factor: 2
      flush_interval: 2m0s
      max_delay: 1m0s
      min_delay: 1s
    job_scheduler_script: ''
    kafka:
      enabled: false
      endpoints: 127.0.0.1:9092
    listen: 127.0.0.1:18810
    master:
      lease_ttl: 10
      self_url: 127.0.0.1:18811
      self_url_http: 127.0.0.1:18811
    ntls:
      enabled: false
      update_interval: 1m0s
      url: http://127.0.0.1:3185/
    prometheus:
      jobs_processed_duration_buckets:
      - 1
      - 30
      - 60
      - 500
      - 1800
      - 3600
      - 21600
      - .inf
    router_url: http://127.0.0.1:18820/v0/frame
    rpc:
     heart_beat_timeout: 4s
     listen: 127.0.0.1:18811
    stream_settings:
      additional_body: []
      additional_headers: []
      api_ssl_verify: true
      api_timeout: 15000
      det_period: 8
      disable_drops: false
      draw_track: false
      fd_frame_height: -1
      ffmpeg_format: ''
      ffmpeg_params: []
      image_arg: photo
      jpeg_quality: 95
      max_candidates: 0
      max_face_size: 0
      md_scale: 0.3
      md_threshold: 0.002
      min_d_score: -1000
      min_face_size: 0
      min_score: -2
      npersons: 4
      only_norm: false
      overall: true
      parse_sei: false
      post_uniq: true
      realtime: false
      realtime_dly: 500
      realtime_post_perm: false
      roi: ''
      rot: ''
      send_track: 0
      tracker_threads: 4
      uc_max_avg_shift: 10
      uc_max_dup: 3
      uc_max_time_diff: 30
    stream_settings_gpu:
      ffmpeg_format: ''
      ffmpeg_params: []
      filter_max_face_size: 8192
      filter_min_face_size: 1
      filter_min_quality: -2
      imotion_threshold: 0
      jpeg_quality: 95
      normalized_only: false
      overall_only: false
      play_speed: -1
      realtime_post_every_interval: false
      realtime_post_interval: 1
      roi: ''
      rot: ''
      router_body: []
      router_headers: []
      router_timeout_ms: 15000
      router_verify_ssl: true
      start_stream_timestamp: 0
      use_stream_timestamp: 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/.
  2. Если вы выбрали пакет findface-video-worker с ускорением на CPU, используйте файл конфигурации /etc/findface-video-worker.ini:

    ntls-addr=127.0.0.1:3133
    mgr-static=127.0.0.1:18811
    capacity=10
    #mgr-exec=shell command with arguments
    

    Если вы выбрали пакет findface-video-worker-gpu с ускорением на GPU, используйте файл конфигурации /etc/findface-video-worker-gpu.ini:

    ## cuda device number
    device_number = 0
    
    ## read streams from file, do not use VideoManager
    input =
    
    ## exit on first finished job, only when --input specified
    exit_on_first_finished = false
    
    ## models directory
    models_dir = /usr/share/findface-gpudetector/models
    
    ## batch size
    batch_size = 1
    
    ## http server port for metrics, 0=do not start server
    metrics_port = 0
    
    ## resize scale, 1=do not resize
    resize_scale = 1.0
    
    ## 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 server port, 0=disabled
    port = 9999
    
    ## streamer url - how to access this worker on streamer_port
    url = ws://127.0.0.1:9999/stream/
    
    #------------------------------
    [liveness]
    #------------------------------
    ## path to liveness fnk
    fnk =
    
    ## liveness threshold
    threshold = 0.945
    
    ## liveness internal algo param
    interval = 1.0
    
    ## liveness internal algo param
    stdev_cnt = 1
    
    #------------------------------
    [video_decoder]
    #------------------------------
    ## decode video on cpu
    cpu = false
    
    #------------------------------
    [send]
    #------------------------------
    ## posting faces threads
    threads = 8
    
    ## posting faces maximum queue size
    queue_limit = 256
    
    #------------------------------
    [tracker]
    #------------------------------
    ## max face miss duration, sec
    miss_interval = 1.0
    
    ## overlap threshold
    overlap_threshold = 0.25```
    

    Пользовательская настройка findface-video-worker/findface-video-worker-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 (Только для GPU, опционально). Метки, используемые для привязки экземпляра findface-video-worker к определенной группе камер. См. Привязка группы камер к экземпляру findface-video-worker.
    fnk (Только для GPU, опционально). Путь к детектору живых лиц.